@sagmans/dsh-tui 0.1.2 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +196 -17
- package/cordis.patch.yml +4 -2
- package/lib/agent/host.d.ts +14 -0
- package/lib/agent/host.d.ts.map +1 -1
- package/lib/agent/host.js +20 -4
- package/lib/agent/host.js.map +1 -1
- package/lib/agent/model.d.ts +50 -0
- package/lib/agent/model.d.ts.map +1 -1
- package/lib/agent/model.js +87 -1
- package/lib/agent/model.js.map +1 -1
- package/lib/agent/present.d.ts +7 -1
- package/lib/agent/present.d.ts.map +1 -1
- package/lib/agent/present.js +33 -4
- package/lib/agent/present.js.map +1 -1
- package/lib/agent/presets.d.ts +7 -1
- package/lib/agent/presets.d.ts.map +1 -1
- package/lib/agent/presets.js +7 -3
- package/lib/agent/presets.js.map +1 -1
- package/lib/agent/status.d.ts +10 -0
- package/lib/agent/status.d.ts.map +1 -1
- package/lib/agent/status.js +2 -0
- package/lib/agent/status.js.map +1 -1
- package/lib/cards.d.ts +127 -7
- package/lib/cards.d.ts.map +1 -1
- package/lib/cards.js +381 -52
- package/lib/cards.js.map +1 -1
- package/lib/export.d.ts +5 -4
- package/lib/export.d.ts.map +1 -1
- package/lib/export.js +62 -13
- package/lib/export.js.map +1 -1
- package/lib/fold-cursor.d.ts +23 -0
- package/lib/fold-cursor.d.ts.map +1 -0
- package/lib/fold-cursor.js +31 -0
- package/lib/fold-cursor.js.map +1 -0
- package/lib/gates.d.ts +145 -2
- package/lib/gates.d.ts.map +1 -1
- package/lib/gates.js +335 -40
- package/lib/gates.js.map +1 -1
- package/lib/index.d.ts +7 -1
- package/lib/index.d.ts.map +1 -1
- package/lib/index.js +651 -92
- package/lib/index.js.map +1 -1
- package/lib/input/actions.d.ts +136 -0
- package/lib/input/actions.d.ts.map +1 -0
- package/lib/input/actions.js +740 -0
- package/lib/input/actions.js.map +1 -0
- package/lib/input/keymap-settings.d.ts +21 -0
- package/lib/input/keymap-settings.d.ts.map +1 -0
- package/lib/input/keymap-settings.js +28 -0
- package/lib/input/keymap-settings.js.map +1 -0
- package/lib/input/keymap.d.ts +91 -0
- package/lib/input/keymap.d.ts.map +1 -0
- package/lib/input/keymap.js +170 -0
- package/lib/input/keymap.js.map +1 -0
- package/lib/input/match.d.ts +10 -0
- package/lib/input/match.d.ts.map +1 -0
- package/lib/input/match.js +83 -0
- package/lib/input/match.js.map +1 -0
- package/lib/input/submission.d.ts +8 -1
- package/lib/input/submission.d.ts.map +1 -1
- package/lib/input/submission.js +9 -2
- package/lib/input/submission.js.map +1 -1
- package/lib/input.d.ts +17 -0
- package/lib/input.d.ts.map +1 -0
- package/lib/input.js +27 -0
- package/lib/input.js.map +1 -0
- package/lib/keys-command.d.ts +16 -0
- package/lib/keys-command.d.ts.map +1 -0
- package/lib/keys-command.js +60 -0
- package/lib/keys-command.js.map +1 -0
- package/lib/queue.d.ts +6 -0
- package/lib/queue.d.ts.map +1 -0
- package/lib/queue.js +68 -0
- package/lib/queue.js.map +1 -0
- package/lib/settings-notice.d.ts +19 -0
- package/lib/settings-notice.d.ts.map +1 -0
- package/lib/settings-notice.js +30 -0
- package/lib/settings-notice.js.map +1 -0
- package/lib/terminal/warning-screen.d.ts +8 -0
- package/lib/terminal/warning-screen.d.ts.map +1 -0
- package/lib/terminal/warning-screen.js +66 -0
- package/lib/terminal/warning-screen.js.map +1 -0
- package/lib/theme-capability.d.ts +36 -0
- package/lib/theme-capability.d.ts.map +1 -0
- package/lib/theme-capability.js +190 -0
- package/lib/theme-capability.js.map +1 -0
- package/lib/theme-command.d.ts +10 -0
- package/lib/theme-command.d.ts.map +1 -0
- package/lib/theme-command.js +61 -0
- package/lib/theme-command.js.map +1 -0
- package/lib/theme-settings.d.ts +196 -0
- package/lib/theme-settings.d.ts.map +1 -0
- package/lib/theme-settings.js +229 -0
- package/lib/theme-settings.js.map +1 -0
- package/lib/theme-tokens.d.ts +110 -0
- package/lib/theme-tokens.d.ts.map +1 -0
- package/lib/theme-tokens.js +427 -0
- package/lib/theme-tokens.js.map +1 -0
- package/lib/theme.d.ts +32 -35
- package/lib/theme.d.ts.map +1 -1
- package/lib/theme.js +112 -63
- package/lib/theme.js.map +1 -1
- package/lib/tokens.d.ts +15 -0
- package/lib/tokens.d.ts.map +1 -0
- package/lib/tokens.js +29 -0
- package/lib/tokens.js.map +1 -0
- package/lib/transcript.d.ts +26 -1
- package/lib/transcript.d.ts.map +1 -1
- package/lib/transcript.js +153 -25
- package/lib/transcript.js.map +1 -1
- package/lib/ui/dock.d.ts.map +1 -1
- package/lib/ui/dock.js +67 -28
- package/lib/ui/dock.js.map +1 -1
- package/lib/ui/editor.d.ts +51 -0
- package/lib/ui/editor.d.ts.map +1 -0
- package/lib/ui/editor.js +159 -0
- package/lib/ui/editor.js.map +1 -0
- package/lib/ui/frame.d.ts +54 -0
- package/lib/ui/frame.d.ts.map +1 -0
- package/lib/ui/frame.js +79 -0
- package/lib/ui/frame.js.map +1 -0
- package/lib/ui/gate-input.d.ts +20 -0
- package/lib/ui/gate-input.d.ts.map +1 -0
- package/lib/ui/gate-input.js +96 -0
- package/lib/ui/gate-input.js.map +1 -0
- package/lib/ui/markdown.d.ts +19 -2
- package/lib/ui/markdown.d.ts.map +1 -1
- package/lib/ui/markdown.js +37 -6
- package/lib/ui/markdown.js.map +1 -1
- package/lib/ui/mermaid.d.ts +44 -0
- package/lib/ui/mermaid.d.ts.map +1 -0
- package/lib/ui/mermaid.js +178 -0
- package/lib/ui/mermaid.js.map +1 -0
- package/lib/ui/picker.d.ts +66 -7
- package/lib/ui/picker.d.ts.map +1 -1
- package/lib/ui/picker.js +112 -19
- package/lib/ui/picker.js.map +1 -1
- package/lib/ui/prompt.d.ts +30 -0
- package/lib/ui/prompt.d.ts.map +1 -0
- package/lib/ui/prompt.js +45 -0
- package/lib/ui/prompt.js.map +1 -0
- package/lib/ui/queue.d.ts +24 -0
- package/lib/ui/queue.d.ts.map +1 -0
- package/lib/ui/queue.js +57 -0
- package/lib/ui/queue.js.map +1 -0
- package/lib/ui/status.d.ts +7 -1
- package/lib/ui/status.d.ts.map +1 -1
- package/lib/ui/status.js +84 -24
- package/lib/ui/status.js.map +1 -1
- package/lib/ui/view.d.ts +65 -2
- package/lib/ui/view.d.ts.map +1 -1
- package/lib/ui/view.js +319 -59
- package/lib/ui/view.js.map +1 -1
- package/lib/work.d.ts +48 -0
- package/lib/work.d.ts.map +1 -1
- package/lib/work.js +44 -0
- package/lib/work.js.map +1 -1
- package/package.json +5 -2
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
import { mergeTokenSpec, PALETTE_NAMES, TUI_TOKENS } from "./theme-tokens.js";
|
|
2
|
+
/** A colour as the reader would see it applied, with a palette name resolved. */
|
|
3
|
+
function showColour(spec, palette) {
|
|
4
|
+
if (typeof spec === 'string' && PALETTE_NAMES.includes(spec)) {
|
|
5
|
+
return palette[spec];
|
|
6
|
+
}
|
|
7
|
+
return String(spec);
|
|
8
|
+
}
|
|
9
|
+
/**
|
|
10
|
+
* Describe one token's effective value and its origin.
|
|
11
|
+
*
|
|
12
|
+
* A settings file that does nothing looks exactly like one that works, so the
|
|
13
|
+
* reader needs to see which layer won: an override they wrote, the palette it
|
|
14
|
+
* named, or the shipped default it never touched. The value is the merged one a
|
|
15
|
+
* renderer would apply, not the fragment the reader happened to write.
|
|
16
|
+
*/
|
|
17
|
+
function describeToken(token, overrides) {
|
|
18
|
+
const spec = mergeTokenSpec(token, overrides.tokens);
|
|
19
|
+
const fields = [];
|
|
20
|
+
if (spec.fg !== undefined)
|
|
21
|
+
fields.push(showColour(spec.fg, overrides.palette));
|
|
22
|
+
if (spec.bg !== undefined)
|
|
23
|
+
fields.push(`bg ${showColour(spec.bg, overrides.palette)}`);
|
|
24
|
+
for (const attribute of ['bold', 'dim', 'italic', 'underline', 'strike']) {
|
|
25
|
+
if (spec[attribute] === true)
|
|
26
|
+
fields.push(attribute);
|
|
27
|
+
}
|
|
28
|
+
if (spec.glyph !== undefined && spec.glyph !== '')
|
|
29
|
+
fields.push(`glyph ${JSON.stringify(spec.glyph)}`);
|
|
30
|
+
if (spec.hidden === true)
|
|
31
|
+
fields.push('hidden');
|
|
32
|
+
const named = typeof spec.fg === 'string' && PALETTE_NAMES.includes(spec.fg);
|
|
33
|
+
const source = overrides.tokens.has(token) ? 'override' : named ? 'palette' : 'default';
|
|
34
|
+
return { text: fields.length === 0 ? 'plain' : fields.join(' '), source };
|
|
35
|
+
}
|
|
36
|
+
/** Where the reader edits the section; the home is a variable, not a fixed path. */
|
|
37
|
+
const SETTINGS_HINT = 'edit $DSH_HOME/settings.yaml (default ~/.dsh/settings.yaml) under "dsh-tui:" · /theme shows the result';
|
|
38
|
+
/**
|
|
39
|
+
* The effective table, one line per element.
|
|
40
|
+
*
|
|
41
|
+
* The token name comes first because it is what the reader types into
|
|
42
|
+
* settings.yaml; the origin comes last because it is what explains the value
|
|
43
|
+
* when the value is not what they expected.
|
|
44
|
+
*/
|
|
45
|
+
export function renderThemeTable(overrides) {
|
|
46
|
+
const lines = [`theme · ${TUI_TOKENS.length} elements`, ''];
|
|
47
|
+
let group = '';
|
|
48
|
+
for (const token of TUI_TOKENS) {
|
|
49
|
+
const head = token.split('.')[0] ?? token;
|
|
50
|
+
if (head !== group) {
|
|
51
|
+
group = head;
|
|
52
|
+
lines.push(`${group}:`);
|
|
53
|
+
}
|
|
54
|
+
const { text, source } = describeToken(token, overrides);
|
|
55
|
+
lines.push(` ${token} = ${text} (${source})`);
|
|
56
|
+
}
|
|
57
|
+
lines.push('', `palette: ${Object.entries(overrides.palette).map(([name, value]) => `${name} ${value}`).join(' · ')}`);
|
|
58
|
+
lines.push('', SETTINGS_HINT);
|
|
59
|
+
return lines;
|
|
60
|
+
}
|
|
61
|
+
//# sourceMappingURL=theme-command.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-command.js","sourceRoot":"","sources":["../src/theme-command.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,196 @@
|
|
|
1
|
+
import type { KeyId } from '@earendil-works/pi-tui';
|
|
2
|
+
import z from '@deepseek-ai/schemastery';
|
|
3
|
+
import { type Keymap } from './input/actions.ts';
|
|
4
|
+
import { type PaletteName, type StyleSpec, type TuiToken } from './theme-tokens.ts';
|
|
5
|
+
/** Settings namespace owned by the terminal surface. */
|
|
6
|
+
export declare const TUI_SETTINGS_NAMESPACE = "dsh-tui";
|
|
7
|
+
/** How nested PTC calls draw: nothing beyond the card, or one indented line per dispatched call. */
|
|
8
|
+
export type SubCallDisplay = 'collapsed' | 'inline';
|
|
9
|
+
/** How a reply's mermaid fences draw: never, once settled, or as the reply streams. */
|
|
10
|
+
export declare const MERMAID_MODES: readonly ["off", "final", "streaming"];
|
|
11
|
+
export type MermaidMode = (typeof MERMAID_MODES)[number];
|
|
12
|
+
/**
|
|
13
|
+
* The schema the harness registers.
|
|
14
|
+
*
|
|
15
|
+
* Exported alongside the parser because registration needs a real schemastery
|
|
16
|
+
* schema, while reading needs the unknown-token check that a schemastery object
|
|
17
|
+
* cannot express.
|
|
18
|
+
*/
|
|
19
|
+
export declare const TuiSettingsSchema: z<Schemastery.ObjectS<{
|
|
20
|
+
palette: z<Schemastery.ObjectS<{
|
|
21
|
+
[k: string]: z<string | number, string | number>;
|
|
22
|
+
}>, Schemastery.ObjectT<{
|
|
23
|
+
[k: string]: z<string | number, string | number>;
|
|
24
|
+
}>>;
|
|
25
|
+
tokens: z<Schemastery.ObjectS<{
|
|
26
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
27
|
+
fg: z<string | number, string | number>;
|
|
28
|
+
bg: z<string | number, string | number>;
|
|
29
|
+
bold: z<boolean, boolean>;
|
|
30
|
+
dim: z<boolean, boolean>;
|
|
31
|
+
italic: z<boolean, boolean>;
|
|
32
|
+
underline: z<boolean, boolean>;
|
|
33
|
+
strike: z<boolean, boolean>;
|
|
34
|
+
glyph: z<string, string>;
|
|
35
|
+
hidden: z<boolean, boolean>;
|
|
36
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
37
|
+
}>, Schemastery.ObjectT<{
|
|
38
|
+
fg: z<string | number, string | number>;
|
|
39
|
+
bg: z<string | number, string | number>;
|
|
40
|
+
bold: z<boolean, boolean>;
|
|
41
|
+
dim: z<boolean, boolean>;
|
|
42
|
+
italic: z<boolean, boolean>;
|
|
43
|
+
underline: z<boolean, boolean>;
|
|
44
|
+
strike: z<boolean, boolean>;
|
|
45
|
+
glyph: z<string, string>;
|
|
46
|
+
hidden: z<boolean, boolean>;
|
|
47
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
48
|
+
}>>;
|
|
49
|
+
}>, Schemastery.ObjectT<{
|
|
50
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
51
|
+
fg: z<string | number, string | number>;
|
|
52
|
+
bg: z<string | number, string | number>;
|
|
53
|
+
bold: z<boolean, boolean>;
|
|
54
|
+
dim: z<boolean, boolean>;
|
|
55
|
+
italic: z<boolean, boolean>;
|
|
56
|
+
underline: z<boolean, boolean>;
|
|
57
|
+
strike: z<boolean, boolean>;
|
|
58
|
+
glyph: z<string, string>;
|
|
59
|
+
hidden: z<boolean, boolean>;
|
|
60
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
61
|
+
}>, Schemastery.ObjectT<{
|
|
62
|
+
fg: z<string | number, string | number>;
|
|
63
|
+
bg: z<string | number, string | number>;
|
|
64
|
+
bold: z<boolean, boolean>;
|
|
65
|
+
dim: z<boolean, boolean>;
|
|
66
|
+
italic: z<boolean, boolean>;
|
|
67
|
+
underline: z<boolean, boolean>;
|
|
68
|
+
strike: z<boolean, boolean>;
|
|
69
|
+
glyph: z<string, string>;
|
|
70
|
+
hidden: z<boolean, boolean>;
|
|
71
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
72
|
+
}>>;
|
|
73
|
+
}>>;
|
|
74
|
+
subcalls: z<"collapsed" | "inline", "collapsed" | "inline">;
|
|
75
|
+
mermaid: z<"off" | "final" | "streaming", "off" | "final" | "streaming">;
|
|
76
|
+
prefix: z<string, string>;
|
|
77
|
+
prefixWindow: z<number, number>;
|
|
78
|
+
keys: z<Schemastery.ObjectS<{
|
|
79
|
+
[k: string]: z<string | string[], string | string[]>;
|
|
80
|
+
}>, Schemastery.ObjectT<{
|
|
81
|
+
[k: string]: z<string | string[], string | string[]>;
|
|
82
|
+
}>>;
|
|
83
|
+
}>, Schemastery.ObjectT<{
|
|
84
|
+
palette: z<Schemastery.ObjectS<{
|
|
85
|
+
[k: string]: z<string | number, string | number>;
|
|
86
|
+
}>, Schemastery.ObjectT<{
|
|
87
|
+
[k: string]: z<string | number, string | number>;
|
|
88
|
+
}>>;
|
|
89
|
+
tokens: z<Schemastery.ObjectS<{
|
|
90
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
91
|
+
fg: z<string | number, string | number>;
|
|
92
|
+
bg: z<string | number, string | number>;
|
|
93
|
+
bold: z<boolean, boolean>;
|
|
94
|
+
dim: z<boolean, boolean>;
|
|
95
|
+
italic: z<boolean, boolean>;
|
|
96
|
+
underline: z<boolean, boolean>;
|
|
97
|
+
strike: z<boolean, boolean>;
|
|
98
|
+
glyph: z<string, string>;
|
|
99
|
+
hidden: z<boolean, boolean>;
|
|
100
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
101
|
+
}>, Schemastery.ObjectT<{
|
|
102
|
+
fg: z<string | number, string | number>;
|
|
103
|
+
bg: z<string | number, string | number>;
|
|
104
|
+
bold: z<boolean, boolean>;
|
|
105
|
+
dim: z<boolean, boolean>;
|
|
106
|
+
italic: z<boolean, boolean>;
|
|
107
|
+
underline: z<boolean, boolean>;
|
|
108
|
+
strike: z<boolean, boolean>;
|
|
109
|
+
glyph: z<string, string>;
|
|
110
|
+
hidden: z<boolean, boolean>;
|
|
111
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
112
|
+
}>>;
|
|
113
|
+
}>, Schemastery.ObjectT<{
|
|
114
|
+
[k: string]: z<Schemastery.ObjectS<{
|
|
115
|
+
fg: z<string | number, string | number>;
|
|
116
|
+
bg: z<string | number, string | number>;
|
|
117
|
+
bold: z<boolean, boolean>;
|
|
118
|
+
dim: z<boolean, boolean>;
|
|
119
|
+
italic: z<boolean, boolean>;
|
|
120
|
+
underline: z<boolean, boolean>;
|
|
121
|
+
strike: z<boolean, boolean>;
|
|
122
|
+
glyph: z<string, string>;
|
|
123
|
+
hidden: z<boolean, boolean>;
|
|
124
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
125
|
+
}>, Schemastery.ObjectT<{
|
|
126
|
+
fg: z<string | number, string | number>;
|
|
127
|
+
bg: z<string | number, string | number>;
|
|
128
|
+
bold: z<boolean, boolean>;
|
|
129
|
+
dim: z<boolean, boolean>;
|
|
130
|
+
italic: z<boolean, boolean>;
|
|
131
|
+
underline: z<boolean, boolean>;
|
|
132
|
+
strike: z<boolean, boolean>;
|
|
133
|
+
glyph: z<string, string>;
|
|
134
|
+
hidden: z<boolean, boolean>;
|
|
135
|
+
inherit: z<"transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch", "transcript.user" | "transcript.notice" | "transcript.marker" | "transcript.reasoning.summary" | "transcript.reasoning.body" | "transcript.reasoning.hint" | "tool.title" | "tool.glyph" | "tool.args" | "tool.stat.added" | "tool.stat.changed" | "tool.stat.removed" | "tool.stat.size" | "tool.stat.separator" | "tool.detail" | "tool.hint" | "tool.failed.title" | "tool.failed.glyph" | "tool.subcall.title" | "tool.subcall.args" | "tool.diff.header" | "tool.diff.hunk" | "tool.diff.added" | "tool.diff.removed" | "tool.read.header" | "tool.read.lineNumber" | "tool.read.line" | "tool.search.path" | "tool.search.lineNumber" | "tool.search.match" | "tool.search.truncated" | "tool.terminal.cwd" | "tool.terminal.status" | "tool.terminal.output" | "tool.web.url" | "tool.web.source" | "tool.web.truncated" | "tool.generic.detail" | "markdown.heading" | "markdown.link" | "markdown.linkUrl" | "markdown.code" | "markdown.codeBlock" | "markdown.codeBlockBorder" | "markdown.quote" | "markdown.quoteBorder" | "markdown.hr" | "markdown.listBullet" | "markdown.bold" | "markdown.italic" | "markdown.strikethrough" | "markdown.underline" | "markdown.diagram.border" | "markdown.diagram.text" | "markdown.diagram.edge" | "markdown.diagram.edgeLabel" | "markdown.diagram.title" | "markdown.diagram.warning" | "picker.title" | "picker.glyph" | "picker.note" | "picker.filter" | "picker.row" | "picker.rowCurrent" | "picker.scrollNewer" | "picker.scrollOlder" | "picker.hint" | "picker.cursor" | "gate.title" | "gate.glyphApproval" | "gate.glyphQuestion" | "gate.detail" | "gate.option" | "gate.optionCurrent" | "gate.cursor" | "gate.hint" | "dock.goal" | "dock.planMode" | "dock.todos.heading" | "dock.todos.pending" | "dock.todos.inProgress" | "dock.todos.overflow" | "dock.subagents.heading" | "dock.subagents.running" | "dock.subagents.overflow" | "dock.jobs.heading" | "dock.jobs.running" | "dock.jobs.overflow" | "status.prefix" | "status.back" | "status.activity.working" | "status.activity.ready" | "status.elapsed" | "status.agentPreset" | "status.model" | "status.effort" | "status.permission" | "status.context" | "status.cache" | "status.cwd" | "status.separator" | "editor.border" | "editor.queued" | "editor.queued.more" | "editor.selectList.selectedPrefix" | "editor.selectList.selectedText" | "editor.selectList.description" | "editor.selectList.scrollInfo" | "editor.selectList.noMatch">;
|
|
136
|
+
}>>;
|
|
137
|
+
}>>;
|
|
138
|
+
subcalls: z<"collapsed" | "inline", "collapsed" | "inline">;
|
|
139
|
+
mermaid: z<"off" | "final" | "streaming", "off" | "final" | "streaming">;
|
|
140
|
+
prefix: z<string, string>;
|
|
141
|
+
prefixWindow: z<number, number>;
|
|
142
|
+
keys: z<Schemastery.ObjectS<{
|
|
143
|
+
[k: string]: z<string | string[], string | string[]>;
|
|
144
|
+
}>, Schemastery.ObjectT<{
|
|
145
|
+
[k: string]: z<string | string[], string | string[]>;
|
|
146
|
+
}>>;
|
|
147
|
+
}>>;
|
|
148
|
+
/** The reader-facing shape of the `dsh-tui:` section. */
|
|
149
|
+
export declare function parseSettings(raw: unknown): TuiSettings;
|
|
150
|
+
/** What the section holds once parsed: only what the reader wrote. */
|
|
151
|
+
export interface TuiSettings {
|
|
152
|
+
readonly palette: Readonly<Partial<Record<PaletteName, string>>>;
|
|
153
|
+
readonly tokens: Readonly<Partial<Record<TuiToken, StyleSpec>>>;
|
|
154
|
+
readonly subcalls: SubCallDisplay;
|
|
155
|
+
readonly mermaid: MermaidMode;
|
|
156
|
+
/** The keys that start a chord; a key the surface answers itself is refused at parse. */
|
|
157
|
+
readonly prefixes: readonly KeyId[];
|
|
158
|
+
/** How long an armed chord waits for its second key, in seconds; zero waits for the next key. */
|
|
159
|
+
readonly prefixWindow: number;
|
|
160
|
+
/** Every action's keys, with the reader's overrides already merged over the shipped ones. */
|
|
161
|
+
readonly keymap: Keymap;
|
|
162
|
+
}
|
|
163
|
+
/** The section as it reads when the reader has written nothing. */
|
|
164
|
+
export declare function defaultSettings(): TuiSettings;
|
|
165
|
+
/** The theme inputs a parsed section implies. */
|
|
166
|
+
export interface ThemeOverrides {
|
|
167
|
+
readonly palette: Readonly<Record<PaletteName, string>>;
|
|
168
|
+
readonly tokens: ReadonlyMap<TuiToken, StyleSpec>;
|
|
169
|
+
}
|
|
170
|
+
/**
|
|
171
|
+
* One sentence for a section the surface refused.
|
|
172
|
+
*
|
|
173
|
+
* Shared by the stderr fallback and the reader-facing notice so a refusal the
|
|
174
|
+
* schema makes at registration and one the parser makes on a read read alike.
|
|
175
|
+
*/
|
|
176
|
+
export declare function settingsProblemMessage(error: unknown): string;
|
|
177
|
+
/**
|
|
178
|
+
* Read a registered scope's section, or nothing when it cannot be read.
|
|
179
|
+
*
|
|
180
|
+
* A malformed section must not cost the reader their session: an unreadable
|
|
181
|
+
* one falls back to the shipped table, which is the appearance the surface had
|
|
182
|
+
* before any of this existed. The caller is told on the way past, because a
|
|
183
|
+
* silently ignored typo is the exact failure this section is meant to prevent;
|
|
184
|
+
* stderr alone is invisible under the alternate screen.
|
|
185
|
+
*/
|
|
186
|
+
export declare function readScope(scope: {
|
|
187
|
+
get(): unknown;
|
|
188
|
+
}, onProblem?: (message: string) => void): TuiSettings;
|
|
189
|
+
/**
|
|
190
|
+
* Turn a parsed section into the inputs the resolver takes.
|
|
191
|
+
*
|
|
192
|
+
* Shipped defaults fill anything the reader left out, so a partial section is
|
|
193
|
+
* the normal case rather than something the resolver has to guard against.
|
|
194
|
+
*/
|
|
195
|
+
export declare function toOverrides(settings: TuiSettings): ThemeOverrides;
|
|
196
|
+
//# sourceMappingURL=theme-settings.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-settings.d.ts","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,wBAAwB,CAAA;AACnD,OAAO,CAAC,MAAM,0BAA0B,CAAA;AAExC,OAAO,EAA4D,KAAK,MAAM,EAAE,MAAM,oBAAoB,CAAA;AAG1G,OAAO,EAIL,KAAK,WAAW,EAChB,KAAK,SAAS,EACd,KAAK,QAAQ,EACd,MAAM,mBAAmB,CAAA;AAE1B,wDAAwD;AACxD,eAAO,MAAM,sBAAsB,YAAY,CAAA;AA4C/C,oGAAoG;AACpG,MAAM,MAAM,cAAc,GAAG,WAAW,GAAG,QAAQ,CAAA;AAKnD,uFAAuF;AACvF,eAAO,MAAM,aAAa,wCAAyC,CAAA;AACnE,MAAM,MAAM,WAAW,GAAG,CAAC,OAAO,aAAa,CAAC,CAAC,MAAM,CAAC,CAAA;AAwBxD;;;;;;GAMG;AACH,eAAO,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;GAAU,CAAA;AAyCxC,yDAAyD;AACzD,wBAAgB,aAAa,CAAC,GAAG,EAAE,OAAO,GAAG,WAAW,CA2DvD;AAQD,sEAAsE;AACtE,MAAM,WAAW,WAAW;IAC1B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,CAAA;IAChE,QAAQ,CAAC,MAAM,EAAE,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAC,CAAC,CAAA;IAC/D,QAAQ,CAAC,QAAQ,EAAE,cAAc,CAAA;IACjC,QAAQ,CAAC,OAAO,EAAE,WAAW,CAAA;IAC7B,yFAAyF;IACzF,QAAQ,CAAC,QAAQ,EAAE,SAAS,KAAK,EAAE,CAAA;IACnC,iGAAiG;IACjG,QAAQ,CAAC,YAAY,EAAE,MAAM,CAAA;IAC7B,6FAA6F;IAC7F,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;CACxB;AAED,mEAAmE;AACnE,wBAAgB,eAAe,IAAI,WAAW,CAU7C;AAED,iDAAiD;AACjD,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,OAAO,EAAE,QAAQ,CAAC,MAAM,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAA;IACvD,QAAQ,CAAC,MAAM,EAAE,WAAW,CAAC,QAAQ,EAAE,SAAS,CAAC,CAAA;CAClD;AAED;;;;;GAKG;AACH,wBAAgB,sBAAsB,CAAC,KAAK,EAAE,OAAO,GAAG,MAAM,CAE7D;AAED;;;;;;;;GAQG;AACH,wBAAgB,SAAS,CAAC,KAAK,EAAE;IAAE,GAAG,IAAI,OAAO,CAAA;CAAE,EAAE,SAAS,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,GAAG,WAAW,CASvG;AAED;;;;;GAKG;AACH,wBAAgB,WAAW,CAAC,QAAQ,EAAE,WAAW,GAAG,cAAc,CAMjE"}
|
|
@@ -0,0 +1,229 @@
|
|
|
1
|
+
import z from '@deepseek-ai/schemastery';
|
|
2
|
+
import { defaultKeymap, keysFor, resolveKeymap } from "./input/actions.js";
|
|
3
|
+
import { KeymapSectionSchema, isActionId } from "./input/keymap-settings.js";
|
|
4
|
+
import { DEFAULT_PREFIX_KEYS, DEFAULT_PREFIX_WINDOW_S } from "./input/keymap.js";
|
|
5
|
+
import { DEFAULT_PALETTE, PALETTE_NAMES, TUI_TOKENS, } from "./theme-tokens.js";
|
|
6
|
+
/** Settings namespace owned by the terminal surface. */
|
|
7
|
+
export const TUI_SETTINGS_NAMESPACE = 'dsh-tui';
|
|
8
|
+
/**
|
|
9
|
+
* A colour the reader may write.
|
|
10
|
+
*
|
|
11
|
+
* Enumerated rather than a free string: a misspelled colour must fail at load
|
|
12
|
+
* with the offending token named, not silently paint nothing for the rest of
|
|
13
|
+
* the session.
|
|
14
|
+
*/
|
|
15
|
+
const ColourSchema = z.union([
|
|
16
|
+
z.string().pattern(/^#[0-9a-fA-F]{6}$/u),
|
|
17
|
+
z.union([...PALETTE_NAMES]),
|
|
18
|
+
z.number().min(0).max(255),
|
|
19
|
+
]);
|
|
20
|
+
/** One element's override; every field optional so a reader sets only what they mean. */
|
|
21
|
+
const StyleSpecSchema = z.object({
|
|
22
|
+
fg: ColourSchema,
|
|
23
|
+
bg: ColourSchema,
|
|
24
|
+
bold: z.boolean(),
|
|
25
|
+
dim: z.boolean(),
|
|
26
|
+
italic: z.boolean(),
|
|
27
|
+
underline: z.boolean(),
|
|
28
|
+
strike: z.boolean(),
|
|
29
|
+
glyph: z.string(),
|
|
30
|
+
hidden: z.boolean(),
|
|
31
|
+
inherit: z.union([...TUI_TOKENS]),
|
|
32
|
+
});
|
|
33
|
+
/** The palette half: every entry optional, each defaulting to the shipped shade. */
|
|
34
|
+
const PaletteSchema = z.object(Object.fromEntries(PALETTE_NAMES.map(name => [name, ColourSchema.default(DEFAULT_PALETTE[name])])));
|
|
35
|
+
/**
|
|
36
|
+
* The token half: every token optional, but an unknown name rejected.
|
|
37
|
+
*
|
|
38
|
+
* Spelled out rather than `z.dict` because `dict` would accept any key, which
|
|
39
|
+
* is exactly the silent-typo failure this section has to prevent.
|
|
40
|
+
*/
|
|
41
|
+
const TokensSchema = z.object(Object.fromEntries(TUI_TOKENS.map(token => [token, StyleSpecSchema])));
|
|
42
|
+
/** The values the `subcalls` key accepts, declared once for the schema and the refusal message. */
|
|
43
|
+
const SUBCALL_DISPLAYS = ['collapsed', 'inline'];
|
|
44
|
+
/** How a reply's mermaid fences draw: never, once settled, or as the reply streams. */
|
|
45
|
+
export const MERMAID_MODES = ['off', 'final', 'streaming'];
|
|
46
|
+
/** The shipped mode: a diagram draws itself while the reply arrives, without waiting for the turn. */
|
|
47
|
+
const DEFAULT_MERMAID_MODE = 'streaming';
|
|
48
|
+
/** Longest chord window a reader may ask for, so a typo cannot arm one for an hour. */
|
|
49
|
+
const MAX_PREFIX_WINDOW_S = 60;
|
|
50
|
+
const SECTION = z.object({
|
|
51
|
+
palette: PaletteSchema.default({}),
|
|
52
|
+
tokens: TokensSchema.default({}),
|
|
53
|
+
subcalls: z.union([...SUBCALL_DISPLAYS]).default('inline'),
|
|
54
|
+
mermaid: z.union([...MERMAID_MODES]).default(DEFAULT_MERMAID_MODE),
|
|
55
|
+
// A free string rather than an enumerated union: the keymap module owns which
|
|
56
|
+
// keys exist, and its refusal is the message a reader can act on.
|
|
57
|
+
//
|
|
58
|
+
// No default, unlike the fields around it: a registration fills every declared
|
|
59
|
+
// field, so a default here would hand back the old spelling as written and the
|
|
60
|
+
// reader's own keys.chord.prefix would read as a second spelling of it.
|
|
61
|
+
prefix: z.string(),
|
|
62
|
+
prefixWindow: z.number().min(0).max(MAX_PREFIX_WINDOW_S).default(DEFAULT_PREFIX_WINDOW_S),
|
|
63
|
+
keys: KeymapSectionSchema.default({}),
|
|
64
|
+
});
|
|
65
|
+
/**
|
|
66
|
+
* The schema the harness registers.
|
|
67
|
+
*
|
|
68
|
+
* Exported alongside the parser because registration needs a real schemastery
|
|
69
|
+
* schema, while reading needs the unknown-token check that a schemastery object
|
|
70
|
+
* cannot express.
|
|
71
|
+
*/
|
|
72
|
+
export const TuiSettingsSchema = SECTION;
|
|
73
|
+
const TOKEN_NAMES = new Set(TUI_TOKENS);
|
|
74
|
+
const PALETTE_NAME_SET = new Set(PALETTE_NAMES);
|
|
75
|
+
/** The section's own keys: schemastery keeps what it does not declare, so a misspelling has to be refused here. */
|
|
76
|
+
const SECTION_KEYS = new Set(['palette', 'tokens', 'subcalls', 'mermaid', 'prefix', 'prefixWindow', 'keys']);
|
|
77
|
+
/**
|
|
78
|
+
* Validate the raw section, refusing a name the surface does not have.
|
|
79
|
+
*
|
|
80
|
+
* Schemastery's object schema ignores undeclared keys, so a misspelled token,
|
|
81
|
+
* palette entry, or key would otherwise parse cleanly and do nothing at all —
|
|
82
|
+
* the one outcome a reader could not debug from the screen. Every level is
|
|
83
|
+
* therefore checked against its declared names before validation.
|
|
84
|
+
*/
|
|
85
|
+
function rejectUnknownKeys(raw) {
|
|
86
|
+
const section = asRecord(raw);
|
|
87
|
+
if (section === undefined)
|
|
88
|
+
return;
|
|
89
|
+
const unknownKeys = Object.keys(section).filter(name => !SECTION_KEYS.has(name));
|
|
90
|
+
if (unknownKeys.length > 0) {
|
|
91
|
+
throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} key${unknownKeys.length === 1 ? '' : 's'}: ${unknownKeys.join(', ')}`);
|
|
92
|
+
}
|
|
93
|
+
const unknownTokens = Object.keys(asRecord(section.tokens) ?? {}).filter(name => !TOKEN_NAMES.has(name));
|
|
94
|
+
if (unknownTokens.length > 0) {
|
|
95
|
+
throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} token${unknownTokens.length === 1 ? '' : 's'}: ${unknownTokens.join(', ')}`);
|
|
96
|
+
}
|
|
97
|
+
const unknownPalette = Object.keys(asRecord(section.palette) ?? {}).filter(name => !PALETTE_NAME_SET.has(name));
|
|
98
|
+
if (unknownPalette.length > 0) {
|
|
99
|
+
throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} palette entr${unknownPalette.length === 1 ? 'y' : 'ies'}: ${unknownPalette.join(', ')}`);
|
|
100
|
+
}
|
|
101
|
+
const unknownActions = Object.keys(asRecord(section.keys) ?? {}).filter(name => !isActionId(name));
|
|
102
|
+
if (unknownActions.length > 0) {
|
|
103
|
+
throw new Error(`unknown ${TUI_SETTINGS_NAMESPACE} key action${unknownActions.length === 1 ? '' : 's'}: ${unknownActions.join(', ')}`);
|
|
104
|
+
}
|
|
105
|
+
}
|
|
106
|
+
function asRecord(value) {
|
|
107
|
+
return typeof value === 'object' && value !== null ? value : undefined;
|
|
108
|
+
}
|
|
109
|
+
/** The reader-facing shape of the `dsh-tui:` section. */
|
|
110
|
+
export function parseSettings(raw) {
|
|
111
|
+
rejectUnknownKeys(raw);
|
|
112
|
+
const section = asRecord(raw) ?? {};
|
|
113
|
+
const parsed = SECTION(section);
|
|
114
|
+
// Only what the reader actually wrote is an override: the schema fills every
|
|
115
|
+
// field so validation can see a whole section, but returning those fills
|
|
116
|
+
// would turn a one-line override into a table of empty entries.
|
|
117
|
+
const writtenPalette = asRecord(section.palette) ?? {};
|
|
118
|
+
const palette = {};
|
|
119
|
+
for (const [name, value] of Object.entries(writtenPalette)) {
|
|
120
|
+
// Same fill-in problem as the tokens: the schema supplies a default for
|
|
121
|
+
// every entry, so only a value the reader chose is an override.
|
|
122
|
+
if (value === undefined || value === DEFAULT_PALETTE[name])
|
|
123
|
+
continue;
|
|
124
|
+
palette[name] = parsed.palette[name];
|
|
125
|
+
}
|
|
126
|
+
const writtenTokens = asRecord(section.tokens) ?? {};
|
|
127
|
+
const tokens = {};
|
|
128
|
+
for (const [name, value] of Object.entries(writtenTokens)) {
|
|
129
|
+
// A registered scope hands back every key the schema declares, with an
|
|
130
|
+
// empty spec for the ones nobody wrote. An empty spec cannot change an
|
|
131
|
+
// appearance, so keeping it would let the schema's own fill-in shadow the
|
|
132
|
+
// shipped default and report every element as overridden.
|
|
133
|
+
if (value === undefined || !hasAnyField(parsed.tokens[name]))
|
|
134
|
+
continue;
|
|
135
|
+
tokens[name] = parsed.tokens[name] ?? {};
|
|
136
|
+
}
|
|
137
|
+
const writtenKeys = asRecord(section.keys) ?? {};
|
|
138
|
+
// The old spelling and the map set the same key; accepting both would make
|
|
139
|
+
// the document mean two things at once.
|
|
140
|
+
if (section.prefix !== undefined && writtenKeys['chord.prefix'] !== undefined) {
|
|
141
|
+
throw new Error('prefix and keys.chord.prefix set the same key; write keys.chord.prefix alone');
|
|
142
|
+
}
|
|
143
|
+
// Only what the reader wrote reaches the map: the schema fills every action so
|
|
144
|
+
// validation can see a whole section, and a fill-in would report every action
|
|
145
|
+
// as overridden.
|
|
146
|
+
const overrides = {};
|
|
147
|
+
for (const [id, value] of Object.entries(parsed.keys)) {
|
|
148
|
+
if (value !== undefined)
|
|
149
|
+
overrides[id] = value;
|
|
150
|
+
}
|
|
151
|
+
if (parsed.prefix !== undefined)
|
|
152
|
+
overrides['chord.prefix'] = parsed.prefix;
|
|
153
|
+
// Validated here rather than in the schema because every refusal depends on
|
|
154
|
+
// the catalog and on the layers the map already claims, which a schema cannot see.
|
|
155
|
+
const keymap = resolveKeymap(overrides);
|
|
156
|
+
return {
|
|
157
|
+
palette: palette,
|
|
158
|
+
tokens: tokens,
|
|
159
|
+
subcalls: parsed.subcalls,
|
|
160
|
+
mermaid: parsed.mermaid,
|
|
161
|
+
prefixes: keysFor(keymap, 'chord.prefix'),
|
|
162
|
+
prefixWindow: parsed.prefixWindow,
|
|
163
|
+
keymap,
|
|
164
|
+
};
|
|
165
|
+
}
|
|
166
|
+
/** Whether a resolved spec actually asks for anything. */
|
|
167
|
+
function hasAnyField(spec) {
|
|
168
|
+
if (spec === undefined)
|
|
169
|
+
return false;
|
|
170
|
+
return Object.values(spec).some(value => value !== undefined);
|
|
171
|
+
}
|
|
172
|
+
/** The section as it reads when the reader has written nothing. */
|
|
173
|
+
export function defaultSettings() {
|
|
174
|
+
return {
|
|
175
|
+
palette: {},
|
|
176
|
+
tokens: {},
|
|
177
|
+
subcalls: 'inline',
|
|
178
|
+
mermaid: DEFAULT_MERMAID_MODE,
|
|
179
|
+
prefixes: [...DEFAULT_PREFIX_KEYS],
|
|
180
|
+
prefixWindow: DEFAULT_PREFIX_WINDOW_S,
|
|
181
|
+
keymap: defaultKeymap(),
|
|
182
|
+
};
|
|
183
|
+
}
|
|
184
|
+
/**
|
|
185
|
+
* One sentence for a section the surface refused.
|
|
186
|
+
*
|
|
187
|
+
* Shared by the stderr fallback and the reader-facing notice so a refusal the
|
|
188
|
+
* schema makes at registration and one the parser makes on a read read alike.
|
|
189
|
+
*/
|
|
190
|
+
export function settingsProblemMessage(error) {
|
|
191
|
+
return `ignoring ${TUI_SETTINGS_NAMESPACE} settings: ${error instanceof Error ? error.message : String(error)}`;
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Read a registered scope's section, or nothing when it cannot be read.
|
|
195
|
+
*
|
|
196
|
+
* A malformed section must not cost the reader their session: an unreadable
|
|
197
|
+
* one falls back to the shipped table, which is the appearance the surface had
|
|
198
|
+
* before any of this existed. The caller is told on the way past, because a
|
|
199
|
+
* silently ignored typo is the exact failure this section is meant to prevent;
|
|
200
|
+
* stderr alone is invisible under the alternate screen.
|
|
201
|
+
*/
|
|
202
|
+
export function readScope(scope, onProblem) {
|
|
203
|
+
try {
|
|
204
|
+
return parseSettings(scope.get() ?? {});
|
|
205
|
+
}
|
|
206
|
+
catch (error) {
|
|
207
|
+
const message = settingsProblemMessage(error);
|
|
208
|
+
if (onProblem === undefined)
|
|
209
|
+
process.stderr.write(`dsh-tui: ${message}\n`);
|
|
210
|
+
else
|
|
211
|
+
onProblem(message);
|
|
212
|
+
return defaultSettings();
|
|
213
|
+
}
|
|
214
|
+
}
|
|
215
|
+
/**
|
|
216
|
+
* Turn a parsed section into the inputs the resolver takes.
|
|
217
|
+
*
|
|
218
|
+
* Shipped defaults fill anything the reader left out, so a partial section is
|
|
219
|
+
* the normal case rather than something the resolver has to guard against.
|
|
220
|
+
*/
|
|
221
|
+
export function toOverrides(settings) {
|
|
222
|
+
const tokens = new Map();
|
|
223
|
+
for (const [token, spec] of Object.entries(settings.tokens)) {
|
|
224
|
+
if (spec !== undefined)
|
|
225
|
+
tokens.set(token, spec);
|
|
226
|
+
}
|
|
227
|
+
return { palette: { ...DEFAULT_PALETTE, ...settings.palette }, tokens };
|
|
228
|
+
}
|
|
229
|
+
//# sourceMappingURL=theme-settings.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"theme-settings.js","sourceRoot":"","sources":["../src/theme-settings.ts"],"names":[],"mappings":"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"}
|