@ashx-j/lunr 0.2.12 → 0.2.14
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/CHANGELOG.md +16 -1
- package/README.md +6 -3
- package/dist/builtin-extensions/ashxj-tui.d.ts +16 -1
- package/dist/builtin-extensions/ashxj-tui.d.ts.map +1 -1
- package/dist/builtin-extensions/ashxj-tui.js +44 -20
- package/dist/builtin-extensions/ashxj-tui.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts +2 -0
- package/dist/builtin-extensions/pi-subagents/src/extension/index.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js +27 -22
- package/dist/builtin-extensions/pi-subagents/src/extension/index.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js +5 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js +12 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-resume.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js +3 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/async-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-append.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/chain-root-attachment.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js +3 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/background/fleet-view.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/runs/background/run-status.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js +3 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/background/subagent-runner.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js +7 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/chain-execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js +2 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/execution.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js +19 -3
- package/dist/builtin-extensions/pi-subagents/src/runs/foreground/subagent-executor.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts +10 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js +19 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/model-fallback.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts +1 -0
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/runs/shared/parallel-utils.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts +2 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js +17 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/child-spec.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts +3 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js +14 -3
- package/dist/builtin-extensions/pi-subagents/src/shared/formatters.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts +14 -0
- package/dist/builtin-extensions/pi-subagents/src/shared/types.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/shared/types.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js +2 -2
- package/dist/builtin-extensions/pi-subagents/src/tui/fleet.js.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.d.ts.map +1 -1
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js +12 -10
- package/dist/builtin-extensions/pi-subagents/src/tui/render.js.map +1 -1
- package/dist/catalog/models.json +1 -1
- package/dist/catalog/providers/amazon-bedrock.json +1 -1
- package/dist/catalog/providers/anthropic.json +1 -1
- package/dist/catalog/providers/azure-openai-responses.json +1 -1
- package/dist/catalog/providers/cloudflare-ai-gateway.json +1 -1
- package/dist/catalog/providers/cloudflare-workers-ai.json +1 -1
- package/dist/catalog/providers/fireworks.json +1 -1
- package/dist/catalog/providers/github-copilot.json +1 -1
- package/dist/catalog/providers/google-vertex.json +1 -1
- package/dist/catalog/providers/google.json +1 -1
- package/dist/catalog/providers/groq.json +1 -1
- package/dist/catalog/providers/huggingface.json +1 -1
- package/dist/catalog/providers/nvidia.json +1 -1
- package/dist/catalog/providers/openai-codex.json +1 -1
- package/dist/catalog/providers/openai.json +1 -1
- package/dist/catalog/providers/opencode-go.json +1 -1
- package/dist/catalog/providers/opencode.json +1 -1
- package/dist/catalog/providers/openrouter.json +1 -1
- package/dist/catalog/providers/together.json +1 -1
- package/dist/catalog/providers/vercel-ai-gateway.json +1 -1
- package/dist/catalog/publication.json +131 -3
- package/dist/cli/list-models.d.ts.map +1 -1
- package/dist/cli/list-models.js +1 -0
- package/dist/cli/list-models.js.map +1 -1
- package/dist/cli.d.ts.map +1 -1
- package/dist/cli.js +52 -27
- package/dist/cli.js.map +1 -1
- package/dist/core/catalog-cache-scope.d.ts +3 -0
- package/dist/core/catalog-cache-scope.d.ts.map +1 -0
- package/dist/core/catalog-cache-scope.js +12 -0
- package/dist/core/catalog-cache-scope.js.map +1 -0
- package/dist/core/catalog-merge.d.ts +2 -0
- package/dist/core/catalog-merge.d.ts.map +1 -1
- package/dist/core/catalog-merge.js +29 -2
- package/dist/core/catalog-merge.js.map +1 -1
- package/dist/core/catalog-refresh-polling.d.ts +8 -0
- package/dist/core/catalog-refresh-polling.d.ts.map +1 -0
- package/dist/core/catalog-refresh-polling.js +30 -0
- package/dist/core/catalog-refresh-polling.js.map +1 -0
- package/dist/core/codex-catalog.d.ts +3 -0
- package/dist/core/codex-catalog.d.ts.map +1 -0
- package/dist/core/codex-catalog.js +15 -0
- package/dist/core/codex-catalog.js.map +1 -0
- package/dist/core/context-breakdown.d.ts +3 -1
- package/dist/core/context-breakdown.d.ts.map +1 -1
- package/dist/core/context-breakdown.js +5 -2
- package/dist/core/context-breakdown.js.map +1 -1
- package/dist/core/customize.d.ts +2 -4
- package/dist/core/customize.d.ts.map +1 -1
- package/dist/core/customize.js +2 -8
- package/dist/core/customize.js.map +1 -1
- package/dist/core/footer-data-provider.d.ts +3 -4
- package/dist/core/footer-data-provider.d.ts.map +1 -1
- package/dist/core/footer-data-provider.js +54 -82
- package/dist/core/footer-data-provider.js.map +1 -1
- package/dist/core/live-catalog.d.ts +5 -2
- package/dist/core/live-catalog.d.ts.map +1 -1
- package/dist/core/live-catalog.js +108 -27
- package/dist/core/live-catalog.js.map +1 -1
- package/dist/core/model-runtime.d.ts +8 -0
- package/dist/core/model-runtime.d.ts.map +1 -1
- package/dist/core/model-runtime.js +64 -12
- package/dist/core/model-runtime.js.map +1 -1
- package/dist/core/official-catalog.d.ts +4 -0
- package/dist/core/official-catalog.d.ts.map +1 -1
- package/dist/core/official-catalog.js +86 -21
- package/dist/core/official-catalog.js.map +1 -1
- package/dist/core/settings-manager.d.ts +7 -6
- package/dist/core/settings-manager.d.ts.map +1 -1
- package/dist/core/settings-manager.js +13 -17
- package/dist/core/settings-manager.js.map +1 -1
- package/dist/core/slash-commands.d.ts.map +1 -1
- package/dist/core/slash-commands.js +1 -0
- package/dist/core/slash-commands.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/main.d.ts +2 -0
- package/dist/main.d.ts.map +1 -1
- package/dist/main.js +106 -50
- package/dist/main.js.map +1 -1
- package/dist/migrations.d.ts +2 -0
- package/dist/migrations.d.ts.map +1 -1
- package/dist/migrations.js +14 -4
- package/dist/migrations.js.map +1 -1
- package/dist/modes/interactive/components/assistant-message.d.ts +1 -3
- package/dist/modes/interactive/components/assistant-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/assistant-message.js +4 -32
- package/dist/modes/interactive/components/assistant-message.js.map +1 -1
- package/dist/modes/interactive/components/custom-editor.d.ts.map +1 -1
- package/dist/modes/interactive/components/custom-editor.js +2 -1
- package/dist/modes/interactive/components/custom-editor.js.map +1 -1
- package/dist/modes/interactive/components/model-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/model-selector.js +4 -1
- package/dist/modes/interactive/components/model-selector.js.map +1 -1
- package/dist/modes/interactive/components/plan-message.d.ts +1 -3
- package/dist/modes/interactive/components/plan-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/plan-message.js +1 -16
- package/dist/modes/interactive/components/plan-message.js.map +1 -1
- package/dist/modes/interactive/components/settings-selector.d.ts +3 -5
- package/dist/modes/interactive/components/settings-selector.d.ts.map +1 -1
- package/dist/modes/interactive/components/settings-selector.js +113 -117
- package/dist/modes/interactive/components/settings-selector.js.map +1 -1
- package/dist/modes/interactive/components/user-message.d.ts +1 -3
- package/dist/modes/interactive/components/user-message.d.ts.map +1 -1
- package/dist/modes/interactive/components/user-message.js +2 -19
- package/dist/modes/interactive/components/user-message.js.map +1 -1
- package/dist/modes/interactive/interactive-mode.d.ts +12 -1
- package/dist/modes/interactive/interactive-mode.d.ts.map +1 -1
- package/dist/modes/interactive/interactive-mode.js +153 -130
- package/dist/modes/interactive/interactive-mode.js.map +1 -1
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts +13 -0
- package/dist/modes/interactive/skill-tag-autocomplete.d.ts.map +1 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js +72 -0
- package/dist/modes/interactive/skill-tag-autocomplete.js.map +1 -0
- package/dist/modes/interactive/theme/moon.json +0 -1
- package/dist/modes/interactive/theme/theme-schema.json +3 -3
- package/dist/modes/interactive/theme/theme.d.ts +1 -1
- package/dist/modes/interactive/theme/theme.d.ts.map +1 -1
- package/dist/modes/interactive/theme/theme.js +95 -90
- package/dist/modes/interactive/theme/theme.js.map +1 -1
- package/dist/startup/interactive-view.d.ts +55 -0
- package/dist/startup/interactive-view.d.ts.map +1 -0
- package/dist/startup/interactive-view.js +332 -0
- package/dist/startup/interactive-view.js.map +1 -0
- package/dist/startup/launch-routing.d.ts +8 -0
- package/dist/startup/launch-routing.d.ts.map +1 -0
- package/dist/startup/launch-routing.js +29 -0
- package/dist/startup/launch-routing.js.map +1 -0
- package/dist/startup/startup-milestones.d.ts +4 -0
- package/dist/startup/startup-milestones.d.ts.map +1 -0
- package/dist/startup/startup-milestones.js +14 -0
- package/dist/startup/startup-milestones.js.map +1 -0
- package/dist/utils/syntax-highlight.d.ts.map +1 -1
- package/dist/utils/syntax-highlight.js +10 -4
- package/dist/utils/syntax-highlight.js.map +1 -1
- package/docs/features.md +2 -2
- package/docs/interactive-startup.md +58 -0
- package/docs/keybindings.md +1 -1
- package/docs/model-catalog.md +29 -0
- package/docs/quickstart.md +1 -1
- package/docs/settings.md +2 -3
- package/docs/skills.md +10 -0
- package/docs/terminal-setup.md +2 -2
- package/docs/usage.md +2 -1
- package/docs/windows.md +1 -1
- package/examples/extensions/custom-provider-anthropic/package-lock.json +2 -2
- package/examples/extensions/custom-provider-anthropic/package.json +1 -1
- package/examples/extensions/custom-provider-gitlab-duo/package.json +1 -1
- package/examples/extensions/gondolin/package-lock.json +2 -2
- package/examples/extensions/gondolin/package.json +1 -1
- package/examples/extensions/sandbox/package-lock.json +2 -2
- package/examples/extensions/sandbox/package.json +1 -1
- package/examples/extensions/with-deps/package-lock.json +2 -2
- package/examples/extensions/with-deps/package.json +1 -1
- package/package.json +16 -16
|
@@ -2,6 +2,7 @@ import { Container, getCapabilities, getKeybindings, Input, SelectList, Settings
|
|
|
2
2
|
import { getCustomizeBridge } from "../../../core/customize.js";
|
|
3
3
|
import { formatHttpIdleTimeoutMs, HTTP_IDLE_TIMEOUT_CHOICES } from "../../../core/http-dispatcher.js";
|
|
4
4
|
import { MEMORY_CHAR_CAP_DEFAULT, MEMORY_CHAR_CAP_MAX, MEMORY_CHAR_CAP_MIN } from "../../../core/memory-cap.js";
|
|
5
|
+
import { SKILL_TAG_CHARACTERS, } from "../../../core/settings-manager.js";
|
|
5
6
|
import { getSelectListTheme, getSettingsListTheme, parseAutoThemeSetting, theme, } from "../theme/theme.js";
|
|
6
7
|
import { DynamicBorder } from "./dynamic-border.js";
|
|
7
8
|
import { keyDisplayText } from "./keybinding-hints.js";
|
|
@@ -28,17 +29,17 @@ const MODEL_TIER_ROWS = [
|
|
|
28
29
|
{
|
|
29
30
|
tier: "light",
|
|
30
31
|
label: "Light tier model",
|
|
31
|
-
description: "
|
|
32
|
+
description: "Fast, low-cost model for simple subagent tasks",
|
|
32
33
|
},
|
|
33
34
|
{
|
|
34
35
|
tier: "standard",
|
|
35
36
|
label: "Standard tier model",
|
|
36
|
-
description: "
|
|
37
|
+
description: "Balanced model for everyday coding tasks",
|
|
37
38
|
},
|
|
38
39
|
{
|
|
39
40
|
tier: "heavy",
|
|
40
41
|
label: "Heavy tier model",
|
|
41
|
-
description: "
|
|
42
|
+
description: "Strong model for complex reasoning and debugging",
|
|
42
43
|
},
|
|
43
44
|
];
|
|
44
45
|
/**
|
|
@@ -64,7 +65,7 @@ class ModelTiersSubmenu extends Container {
|
|
|
64
65
|
{
|
|
65
66
|
id: "enabled",
|
|
66
67
|
label: "Enable model tiers",
|
|
67
|
-
description: "Route
|
|
68
|
+
description: "Route subagent work by model tier",
|
|
68
69
|
currentValue: this.state.enabled ? "on" : "off",
|
|
69
70
|
values: ["on", "off"],
|
|
70
71
|
},
|
|
@@ -83,11 +84,15 @@ class ModelTiersSubmenu extends Container {
|
|
|
83
84
|
{
|
|
84
85
|
id: `${tier}-thinking`,
|
|
85
86
|
label: `${row.label.replace(" model", "")} thinking`,
|
|
86
|
-
description: "Reasoning
|
|
87
|
+
description: "Reasoning level for this tier",
|
|
87
88
|
currentValue: this.state[tKey] ?? "inherit",
|
|
88
89
|
disabled: () => !this.state.enabled,
|
|
89
|
-
submenu: (_currentValue, done) => new SelectSubmenu(`${row.label} thinking`, "
|
|
90
|
-
{
|
|
90
|
+
submenu: (_currentValue, done) => new SelectSubmenu(`${row.label} thinking`, "Inherit uses the parent session's reasoning level", [
|
|
91
|
+
{
|
|
92
|
+
value: "inherit",
|
|
93
|
+
label: "inherit",
|
|
94
|
+
description: "Use the parent session's reasoning level",
|
|
95
|
+
},
|
|
91
96
|
...callbacks.getTierThinkingLevels(tier).map((level) => ({
|
|
92
97
|
value: level,
|
|
93
98
|
label: level,
|
|
@@ -134,7 +139,7 @@ class MemoryCharCapSubmenu extends Container {
|
|
|
134
139
|
super();
|
|
135
140
|
this.addChild(new Text(theme.bold(theme.fg("accent", "Memory Character Cap")), 0, 0));
|
|
136
141
|
this.addChild(new Spacer(1));
|
|
137
|
-
this.addChild(new Text(theme.fg("muted", `
|
|
142
|
+
this.addChild(new Text(theme.fg("muted", `Maximum agent memory size (${MEMORY_CHAR_CAP_MIN} to ${MEMORY_CHAR_CAP_MAX} characters, default ${MEMORY_CHAR_CAP_DEFAULT})`), 0, 0));
|
|
138
143
|
this.addChild(new Spacer(1));
|
|
139
144
|
this.input = new Input();
|
|
140
145
|
this.input.setValue(currentValue);
|
|
@@ -166,99 +171,79 @@ class CustomizeSubmenu extends Container {
|
|
|
166
171
|
// one /settings session reflects toggles made earlier in that session.
|
|
167
172
|
const bridge = getCustomizeBridge();
|
|
168
173
|
const items = [
|
|
169
|
-
{
|
|
170
|
-
id: "gutter-rail",
|
|
171
|
-
label: "Gutter rail",
|
|
172
|
-
description: "Render a thin left │ rail spanning each turn, closing with ╰.",
|
|
173
|
-
currentValue: (bridge?.getGutterRail() ?? true) ? "on" : "off",
|
|
174
|
-
values: ["on", "off"],
|
|
175
|
-
},
|
|
176
|
-
{
|
|
177
|
-
id: "prompt-symbol",
|
|
178
|
-
label: "Prompt symbol",
|
|
179
|
-
description: "Show the ☾ › prompt glyph on the editor's first line.",
|
|
180
|
-
currentValue: (bridge?.getPromptSymbol() ?? true) ? "on" : "off",
|
|
181
|
-
values: ["on", "off"],
|
|
182
|
-
},
|
|
183
174
|
{
|
|
184
175
|
id: "footer-mcp",
|
|
185
|
-
label: "
|
|
186
|
-
description: "
|
|
176
|
+
label: "MCP status",
|
|
177
|
+
description: "MCP server status",
|
|
187
178
|
currentValue: (bridge?.getFooterMcp() ?? true) ? "on" : "off",
|
|
188
179
|
values: ["on", "off"],
|
|
189
180
|
},
|
|
190
181
|
{
|
|
191
182
|
id: "footer-lsp",
|
|
192
|
-
label: "
|
|
193
|
-
description: "
|
|
183
|
+
label: "LSP status",
|
|
184
|
+
description: "Language server status",
|
|
194
185
|
currentValue: (bridge?.getFooterLsp() ?? false) ? "on" : "off",
|
|
195
186
|
values: ["on", "off"],
|
|
196
187
|
},
|
|
197
188
|
{
|
|
198
189
|
id: "footer-context",
|
|
199
|
-
label: "
|
|
200
|
-
description: "
|
|
190
|
+
label: "Context meter",
|
|
191
|
+
description: "Context usage",
|
|
201
192
|
currentValue: (bridge?.getFooterContext() ?? true) ? "on" : "off",
|
|
202
193
|
values: ["on", "off"],
|
|
203
194
|
},
|
|
204
195
|
{
|
|
205
196
|
id: "footer-tokens",
|
|
206
|
-
label: "
|
|
207
|
-
description: "
|
|
197
|
+
label: "Token counter",
|
|
198
|
+
description: "Input and output token counts",
|
|
208
199
|
currentValue: (bridge?.getFooterTokens() ?? true) ? "on" : "off",
|
|
209
200
|
values: ["on", "off"],
|
|
210
201
|
},
|
|
211
202
|
{
|
|
212
203
|
id: "footer-cache-hit-rate",
|
|
213
|
-
label: "
|
|
214
|
-
description: "
|
|
204
|
+
label: "Cache hit rate",
|
|
205
|
+
description: "Latest prompt cache hit rate",
|
|
215
206
|
currentValue: (bridge?.getFooterCacheHitRate() ?? true) ? "on" : "off",
|
|
216
207
|
values: ["on", "off"],
|
|
217
208
|
},
|
|
218
209
|
{
|
|
219
210
|
id: "footer-tps",
|
|
220
|
-
label: "
|
|
221
|
-
description: "
|
|
211
|
+
label: "TPS counter",
|
|
212
|
+
description: "Token generation speed",
|
|
222
213
|
currentValue: (bridge?.getFooterTps() ?? true) ? "on" : "off",
|
|
223
214
|
values: ["on", "off"],
|
|
224
215
|
},
|
|
225
216
|
{
|
|
226
217
|
id: "footer-statuses",
|
|
227
|
-
label: "
|
|
228
|
-
description: "
|
|
218
|
+
label: "Feature statuses",
|
|
219
|
+
description: "Active plan, goal, and swarm status",
|
|
229
220
|
currentValue: (bridge?.getFooterStatuses() ?? true) ? "on" : "off",
|
|
230
221
|
values: ["on", "off"],
|
|
231
222
|
},
|
|
232
223
|
{
|
|
233
224
|
id: "footer-git",
|
|
234
|
-
label: "
|
|
235
|
-
description: "
|
|
225
|
+
label: "Git branch",
|
|
226
|
+
description: "Git branch and line changes",
|
|
236
227
|
currentValue: (bridge?.getFooterGit() ?? true) ? "on" : "off",
|
|
237
228
|
values: ["on", "off"],
|
|
238
229
|
},
|
|
239
230
|
{
|
|
240
231
|
id: "footer-plan",
|
|
241
|
-
label: "
|
|
242
|
-
description: "
|
|
232
|
+
label: "Plan usage",
|
|
233
|
+
description: "Subscription usage percentage",
|
|
243
234
|
currentValue: (bridge?.getFooterPlan() ?? true) ? "on" : "off",
|
|
244
235
|
values: ["on", "off"],
|
|
245
236
|
},
|
|
246
237
|
{
|
|
247
238
|
id: "footer-plan-bar",
|
|
248
|
-
label: "
|
|
249
|
-
description: "
|
|
239
|
+
label: "Plan bar",
|
|
240
|
+
description: "Bar beside the subscription usage percentage",
|
|
250
241
|
currentValue: (bridge?.getFooterPlanBar() ?? true) ? "on" : "off",
|
|
251
242
|
values: ["on", "off"],
|
|
252
243
|
},
|
|
253
244
|
];
|
|
254
245
|
this.settingsList = new SettingsList(items, Math.min(items.length, 10), getSettingsListTheme(), (id, newValue) => {
|
|
255
246
|
switch (id) {
|
|
256
|
-
case "gutter-rail":
|
|
257
|
-
callbacks.onGutterRailChange(newValue === "on");
|
|
258
|
-
break;
|
|
259
|
-
case "prompt-symbol":
|
|
260
|
-
callbacks.onPromptSymbolChange(newValue === "on");
|
|
261
|
-
break;
|
|
262
247
|
case "footer-mcp":
|
|
263
248
|
callbacks.onFooterMcpChange(newValue === "on");
|
|
264
249
|
break;
|
|
@@ -308,8 +293,7 @@ class RollbackSubmenu extends Container {
|
|
|
308
293
|
{
|
|
309
294
|
id: "rollback-enabled",
|
|
310
295
|
label: "Rollback enabled",
|
|
311
|
-
description:
|
|
312
|
-
(sessionForceEnabled ? " (forced on by auto mode)" : ""),
|
|
296
|
+
description: `Save file snapshots for /rollback${sessionForceEnabled ? ". Always on in Auto mode" : ""}`,
|
|
313
297
|
currentValue: this.enabled ? "on" : "off",
|
|
314
298
|
values: ["on", "off"],
|
|
315
299
|
disabled: () => sessionForceEnabled,
|
|
@@ -317,7 +301,7 @@ class RollbackSubmenu extends Container {
|
|
|
317
301
|
{
|
|
318
302
|
id: "rollback-turns",
|
|
319
303
|
label: "Rollback turns",
|
|
320
|
-
description:
|
|
304
|
+
description: "Number of turns kept for rollback",
|
|
321
305
|
currentValue: String(config.rollbackTurns),
|
|
322
306
|
disabled: () => !this.enabled,
|
|
323
307
|
submenu: (currentValue, submenuDone) => new RollbackTurnsSubmenu(currentValue, submenuDone),
|
|
@@ -325,24 +309,24 @@ class RollbackSubmenu extends Container {
|
|
|
325
309
|
{
|
|
326
310
|
id: "rollback-capture",
|
|
327
311
|
label: "Capture mode",
|
|
328
|
-
description: "How snapshots are
|
|
312
|
+
description: "How rollback snapshots are stored",
|
|
329
313
|
currentValue: config.rollbackCapture,
|
|
330
314
|
disabled: () => !this.enabled,
|
|
331
|
-
submenu: (currentValue, submenuDone) => new SelectSubmenu("Rollback Capture Mode", "
|
|
315
|
+
submenu: (currentValue, submenuDone) => new SelectSubmenu("Rollback Capture Mode", "Snapshot storage method", [
|
|
332
316
|
{
|
|
333
317
|
value: "copies",
|
|
334
318
|
label: "copies",
|
|
335
|
-
description: "
|
|
319
|
+
description: "File copies for tool edits and created files",
|
|
336
320
|
},
|
|
337
321
|
{
|
|
338
322
|
value: "hybrid",
|
|
339
323
|
label: "hybrid",
|
|
340
|
-
description: "
|
|
324
|
+
description: "Track files created outside tools with tree scope",
|
|
341
325
|
},
|
|
342
326
|
{
|
|
343
327
|
value: "shadow-git",
|
|
344
328
|
label: "shadow-git",
|
|
345
|
-
description: "
|
|
329
|
+
description: "Reserved mode; currently falls back to copies",
|
|
346
330
|
},
|
|
347
331
|
], currentValue, (value) => {
|
|
348
332
|
callbacks.onRollbackCaptureChange(value);
|
|
@@ -352,15 +336,15 @@ class RollbackSubmenu extends Container {
|
|
|
352
336
|
{
|
|
353
337
|
id: "rollback-scope",
|
|
354
338
|
label: "Rollback scope",
|
|
355
|
-
description: "
|
|
339
|
+
description: "Which file changes rollback tracks",
|
|
356
340
|
currentValue: config.rollbackScope,
|
|
357
341
|
disabled: () => !this.enabled,
|
|
358
|
-
submenu: (currentValue, submenuDone) => new SelectSubmenu("Rollback Scope", "
|
|
359
|
-
{ value: "tools", label: "tools", description: "
|
|
342
|
+
submenu: (currentValue, submenuDone) => new SelectSubmenu("Rollback Scope", "File changes included in snapshots", [
|
|
343
|
+
{ value: "tools", label: "tools", description: "Changes made by edit and write tools" },
|
|
360
344
|
{
|
|
361
345
|
value: "tree",
|
|
362
346
|
label: "tree",
|
|
363
|
-
description: "
|
|
347
|
+
description: "Tool and shell changes across the repository",
|
|
364
348
|
},
|
|
365
349
|
], currentValue, (value) => {
|
|
366
350
|
callbacks.onRollbackScopeChange(value);
|
|
@@ -392,7 +376,7 @@ class RollbackTurnsSubmenu extends Container {
|
|
|
392
376
|
super();
|
|
393
377
|
this.addChild(new Text(theme.bold(theme.fg("accent", "Rollback Turns")), 0, 0));
|
|
394
378
|
this.addChild(new Spacer(1));
|
|
395
|
-
this.addChild(new Text(theme.fg("muted", "
|
|
379
|
+
this.addChild(new Text(theme.fg("muted", "Number of turns kept for rollback (1 to 20, default 2)"), 0, 0));
|
|
396
380
|
this.addChild(new Spacer(1));
|
|
397
381
|
this.input = new Input();
|
|
398
382
|
this.input.setValue(currentValue);
|
|
@@ -463,8 +447,8 @@ class SubscriptionActionSubmenu extends Container {
|
|
|
463
447
|
id: "set-active",
|
|
464
448
|
label: "Set active",
|
|
465
449
|
description: subs.autoManage()
|
|
466
|
-
? "
|
|
467
|
-
: "Use this key for new requests
|
|
450
|
+
? "Turn off automatic key rotation to switch keys"
|
|
451
|
+
: "Use this key for new requests",
|
|
468
452
|
currentValue: row.active ? "already active" : "activate",
|
|
469
453
|
values: ["activate"],
|
|
470
454
|
disabled: () => subs.autoManage() || row.active,
|
|
@@ -472,7 +456,7 @@ class SubscriptionActionSubmenu extends Container {
|
|
|
472
456
|
{
|
|
473
457
|
id: "rename",
|
|
474
458
|
label: "Rename",
|
|
475
|
-
description: "
|
|
459
|
+
description: "Change the key's display name",
|
|
476
460
|
currentValue: row.name,
|
|
477
461
|
submenu: (currentValue, renameDone) => new SubscriptionRenameSubmenu(currentValue, (name) => {
|
|
478
462
|
if (name === undefined) {
|
|
@@ -491,7 +475,7 @@ class SubscriptionActionSubmenu extends Container {
|
|
|
491
475
|
label: "Clear exhausted flag",
|
|
492
476
|
description: row.exhaustedUntil !== undefined
|
|
493
477
|
? `Marked exhausted until ${formatSubscriptionExhaustedUntil(row.exhaustedUntil)}.`
|
|
494
|
-
: "
|
|
478
|
+
: "Unavailable until the key is marked exhausted",
|
|
495
479
|
currentValue: "clear",
|
|
496
480
|
values: ["clear"],
|
|
497
481
|
disabled: () => row.exhaustedUntil === undefined,
|
|
@@ -499,9 +483,9 @@ class SubscriptionActionSubmenu extends Container {
|
|
|
499
483
|
{
|
|
500
484
|
id: "remove",
|
|
501
485
|
label: "Remove",
|
|
502
|
-
description: "Delete this
|
|
486
|
+
description: "Delete this stored key",
|
|
503
487
|
currentValue: "remove…",
|
|
504
|
-
submenu: (_currentValue, confirmDone) => new SelectSubmenu("Remove Subscription", `
|
|
488
|
+
submenu: (_currentValue, confirmDone) => new SelectSubmenu("Remove Subscription", `Delete "${row.name}" from ${row.providerName}? The last key also logs out the provider.`, [
|
|
505
489
|
{ value: "cancel", label: "Cancel" },
|
|
506
490
|
{ value: "remove", label: "Remove key" },
|
|
507
491
|
], "cancel", (value) => {
|
|
@@ -651,7 +635,7 @@ function singleModeThemeItems(availableThemes) {
|
|
|
651
635
|
{
|
|
652
636
|
value: AUTOMATIC_THEME_VALUE,
|
|
653
637
|
label: "Automatic",
|
|
654
|
-
description: "
|
|
638
|
+
description: "Follow the terminal's light or dark appearance",
|
|
655
639
|
},
|
|
656
640
|
...themeItems(availableThemes),
|
|
657
641
|
];
|
|
@@ -713,7 +697,7 @@ class ThemeSubmenu extends Container {
|
|
|
713
697
|
}
|
|
714
698
|
showSingleMenu() {
|
|
715
699
|
this.mode = "single";
|
|
716
|
-
const menu = new SelectSubmenu("Theme", "
|
|
700
|
+
const menu = new SelectSubmenu("Theme", "Choose a theme or follow terminal appearance", singleModeThemeItems(this.availableThemes), this.singleTheme, (value) => {
|
|
717
701
|
if (value === AUTOMATIC_THEME_VALUE) {
|
|
718
702
|
this.mode = "automatic";
|
|
719
703
|
this.callbacks.onThemePreview?.(this.getThemeSetting());
|
|
@@ -732,16 +716,16 @@ class ThemeSubmenu extends Container {
|
|
|
732
716
|
const content = new Container();
|
|
733
717
|
content.addChild(new Text(theme.bold(theme.fg("accent", "Automatic Theme")), 0, 0));
|
|
734
718
|
content.addChild(new Spacer(1));
|
|
735
|
-
content.addChild(new Text(theme.fg("muted", "
|
|
719
|
+
content.addChild(new Text(theme.fg("muted", "Use different themes for light and dark terminals."), 0, 0));
|
|
736
720
|
content.addChild(new Text(theme.fg("muted", "Light/dark detection requires terminal support."), 0, 0));
|
|
737
721
|
content.addChild(new Spacer(1));
|
|
738
722
|
const items = [
|
|
739
723
|
{
|
|
740
724
|
id: "light-theme",
|
|
741
725
|
label: "Light theme",
|
|
742
|
-
description: "Theme
|
|
726
|
+
description: "Theme for light terminals",
|
|
743
727
|
currentValue: this.lightTheme,
|
|
744
|
-
submenu: (currentValue, done) => this.createThemeSelect("Light Theme", "
|
|
728
|
+
submenu: (currentValue, done) => this.createThemeSelect("Light Theme", "Theme for light terminals", currentValue, done, (value) => {
|
|
745
729
|
this.lightTheme = value;
|
|
746
730
|
this.callbacks.onThemePreview?.(this.getThemeSetting());
|
|
747
731
|
done(value);
|
|
@@ -750,9 +734,9 @@ class ThemeSubmenu extends Container {
|
|
|
750
734
|
{
|
|
751
735
|
id: "dark-theme",
|
|
752
736
|
label: "Dark theme",
|
|
753
|
-
description: "Theme
|
|
737
|
+
description: "Theme for dark terminals",
|
|
754
738
|
currentValue: this.darkTheme,
|
|
755
|
-
submenu: (currentValue, done) => this.createThemeSelect("Dark Theme", "
|
|
739
|
+
submenu: (currentValue, done) => this.createThemeSelect("Dark Theme", "Theme for dark terminals", currentValue, done, (value) => {
|
|
756
740
|
this.darkTheme = value;
|
|
757
741
|
this.callbacks.onThemePreview?.(this.getThemeSetting());
|
|
758
742
|
done(value);
|
|
@@ -761,14 +745,14 @@ class ThemeSubmenu extends Container {
|
|
|
761
745
|
{
|
|
762
746
|
id: "apply",
|
|
763
747
|
label: "Apply",
|
|
764
|
-
description: "Save
|
|
748
|
+
description: "Save theme settings",
|
|
765
749
|
currentValue: "save and go back",
|
|
766
750
|
values: ["save and go back"],
|
|
767
751
|
},
|
|
768
752
|
{
|
|
769
753
|
id: "single-mode",
|
|
770
754
|
label: "Change mode",
|
|
771
|
-
description: "
|
|
755
|
+
description: "Use one theme for all terminal appearances",
|
|
772
756
|
currentValue: "switch to single theme",
|
|
773
757
|
values: ["switch to single theme"],
|
|
774
758
|
},
|
|
@@ -826,42 +810,42 @@ export class SettingsSelectorComponent extends Container {
|
|
|
826
810
|
{
|
|
827
811
|
id: "autocompact",
|
|
828
812
|
label: "Auto-compact",
|
|
829
|
-
description: "
|
|
813
|
+
description: "Compact context before it reaches the model limit",
|
|
830
814
|
currentValue: config.autoCompact ? "true" : "false",
|
|
831
815
|
values: ["true", "false"],
|
|
832
816
|
},
|
|
833
817
|
{
|
|
834
818
|
id: "steering-mode",
|
|
835
819
|
label: "Steering mode",
|
|
836
|
-
description: "
|
|
820
|
+
description: "How new messages interrupt a streaming response",
|
|
837
821
|
currentValue: config.steeringMode,
|
|
838
822
|
values: ["one-at-a-time", "all"],
|
|
839
823
|
},
|
|
840
824
|
{
|
|
841
825
|
id: "follow-up-mode",
|
|
842
826
|
label: "Follow-up mode",
|
|
843
|
-
description:
|
|
827
|
+
description: `How ${followUpKey} messages run after the current response`,
|
|
844
828
|
currentValue: config.followUpMode,
|
|
845
829
|
values: ["one-at-a-time", "all"],
|
|
846
830
|
},
|
|
847
831
|
{
|
|
848
832
|
id: "transport",
|
|
849
833
|
label: "Transport",
|
|
850
|
-
description: "
|
|
834
|
+
description: "Connection method for supported providers",
|
|
851
835
|
currentValue: config.transport,
|
|
852
836
|
values: ["sse", "websocket", "websocket-cached", "auto"],
|
|
853
837
|
},
|
|
854
838
|
{
|
|
855
839
|
id: "http-idle-timeout",
|
|
856
840
|
label: "HTTP idle timeout",
|
|
857
|
-
description: "
|
|
841
|
+
description: "Time before an inactive HTTP request times out",
|
|
858
842
|
currentValue: formatHttpIdleTimeoutMs(config.httpIdleTimeoutMs),
|
|
859
843
|
values: HTTP_IDLE_TIMEOUT_CHOICES.map((choice) => choice.label),
|
|
860
844
|
},
|
|
861
845
|
{
|
|
862
846
|
id: "hide-thinking",
|
|
863
847
|
label: "Hide thinking",
|
|
864
|
-
description: "
|
|
848
|
+
description: "Thinking block visibility",
|
|
865
849
|
currentValue: config.hideThinkingBlock ? "true" : "false",
|
|
866
850
|
values: ["true", "false"],
|
|
867
851
|
},
|
|
@@ -870,7 +854,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
870
854
|
// "✻ Thought for Xs" + first sentence. Disabled when thinking is hidden.
|
|
871
855
|
id: "thinking-collapse",
|
|
872
856
|
label: "Collapse thinking",
|
|
873
|
-
description: "
|
|
857
|
+
description: "Short summaries for completed thinking",
|
|
874
858
|
currentValue: config.thinkingCollapse ? "true" : "false",
|
|
875
859
|
values: ["true", "false"],
|
|
876
860
|
disabled: () => config.hideThinkingBlock,
|
|
@@ -878,7 +862,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
878
862
|
{
|
|
879
863
|
id: "cache-miss-notices",
|
|
880
864
|
label: "Cache miss notices",
|
|
881
|
-
description: "
|
|
865
|
+
description: "Prompt cache miss notices in the transcript",
|
|
882
866
|
currentValue: config.showCacheMissNotices ? "true" : "false",
|
|
883
867
|
values: ["true", "false"],
|
|
884
868
|
},
|
|
@@ -887,35 +871,35 @@ export class SettingsSelectorComponent extends Container {
|
|
|
887
871
|
// applies; the row displays "short" as the implicit default.
|
|
888
872
|
id: "cache-retention",
|
|
889
873
|
label: "Cache retention",
|
|
890
|
-
description: "Prompt
|
|
874
|
+
description: "Prompt cache lifetime",
|
|
891
875
|
currentValue: config.cacheRetention,
|
|
892
876
|
values: ["short", "long", "none"],
|
|
893
877
|
},
|
|
894
878
|
{
|
|
895
879
|
id: "quiet-startup",
|
|
896
880
|
label: "Quiet startup",
|
|
897
|
-
description: "
|
|
881
|
+
description: "Startup log visibility",
|
|
898
882
|
currentValue: config.quietStartup ? "true" : "false",
|
|
899
883
|
values: ["true", "false"],
|
|
900
884
|
},
|
|
901
885
|
{
|
|
902
886
|
id: "smooth-streaming",
|
|
903
887
|
label: "Smooth streaming",
|
|
904
|
-
description: "
|
|
888
|
+
description: "Typewriter-style response streaming",
|
|
905
889
|
currentValue: config.smoothStreaming ? "true" : "false",
|
|
906
890
|
values: ["true", "false"],
|
|
907
891
|
},
|
|
908
892
|
{
|
|
909
893
|
id: "agent-memory",
|
|
910
894
|
label: "Agent memory",
|
|
911
|
-
description: "
|
|
895
|
+
description: "Durable facts the agent can manage",
|
|
912
896
|
currentValue: config.memoryEnabled ? "on" : "off",
|
|
913
897
|
values: ["on", "off"],
|
|
914
898
|
},
|
|
915
899
|
{
|
|
916
900
|
id: "memory-char-cap",
|
|
917
901
|
label: "Memory character cap",
|
|
918
|
-
description:
|
|
902
|
+
description: "Maximum agent memory size",
|
|
919
903
|
currentValue: String(config.memoryCharCap),
|
|
920
904
|
submenu: (currentValue, submenuDone) => new MemoryCharCapSubmenu(currentValue, submenuDone),
|
|
921
905
|
},
|
|
@@ -923,52 +907,52 @@ export class SettingsSelectorComponent extends Container {
|
|
|
923
907
|
id: "search-curator",
|
|
924
908
|
label: "Search curator",
|
|
925
909
|
description: curatorAvailable
|
|
926
|
-
? "
|
|
927
|
-
: "
|
|
910
|
+
? "Web search review and summary mode"
|
|
911
|
+
: "Unavailable because web access is not loaded",
|
|
928
912
|
currentValue: config.searchCurator ?? "unavailable",
|
|
929
913
|
values: curatorAvailable ? SEARCH_CURATOR_VALUES : undefined,
|
|
930
914
|
},
|
|
931
915
|
{
|
|
932
916
|
id: "session-retention-days",
|
|
933
917
|
label: "Session retention",
|
|
934
|
-
description: "
|
|
918
|
+
description: "How long session files are kept",
|
|
935
919
|
currentValue: String(config.sessionRetentionDays),
|
|
936
920
|
values: ["0", "7", "14", "30", "60", "90", "365"],
|
|
937
921
|
},
|
|
938
922
|
{
|
|
939
923
|
id: "default-project-trust",
|
|
940
924
|
label: "Default project trust",
|
|
941
|
-
description: "
|
|
925
|
+
description: "Trust choice when a project has no saved decision",
|
|
942
926
|
currentValue: DEFAULT_PROJECT_TRUST_LABELS[config.defaultProjectTrust],
|
|
943
927
|
values: Object.values(DEFAULT_PROJECT_TRUST_LABELS),
|
|
944
928
|
},
|
|
945
929
|
{
|
|
946
930
|
id: "default-permission-mode",
|
|
947
931
|
label: "Default permission mode",
|
|
948
|
-
description: "
|
|
932
|
+
description: "Starting permission mode for new sessions",
|
|
949
933
|
currentValue: config.defaultPermissionMode,
|
|
950
934
|
values: ["manual", "yolo", "plan", "auto"],
|
|
951
935
|
},
|
|
952
936
|
{
|
|
953
937
|
id: "double-escape-action",
|
|
954
938
|
label: "Double-escape action",
|
|
955
|
-
description: "Action
|
|
939
|
+
description: "Action for double Escape in an empty editor",
|
|
956
940
|
currentValue: config.doubleEscapeAction,
|
|
957
941
|
values: ["tree", "fork", "none"],
|
|
958
942
|
},
|
|
959
943
|
{
|
|
960
944
|
id: "tree-filter-mode",
|
|
961
945
|
label: "Tree filter mode",
|
|
962
|
-
description: "Default
|
|
946
|
+
description: "Default /tree filter",
|
|
963
947
|
currentValue: config.treeFilterMode,
|
|
964
948
|
values: ["default", "no-tools", "user-only", "labeled-only", "all"],
|
|
965
949
|
},
|
|
966
950
|
{
|
|
967
951
|
id: "thinking",
|
|
968
952
|
label: "Thinking level",
|
|
969
|
-
description: "Reasoning
|
|
953
|
+
description: "Reasoning level for supported models",
|
|
970
954
|
currentValue: config.thinkingLevel,
|
|
971
|
-
submenu: (currentValue, done) => new SelectSubmenu("Thinking Level", "
|
|
955
|
+
submenu: (currentValue, done) => new SelectSubmenu("Thinking Level", "Reasoning level for supported models", config.availableThinkingLevels.map((level) => ({
|
|
972
956
|
value: level,
|
|
973
957
|
label: level,
|
|
974
958
|
description: THINKING_DESCRIPTIONS[level],
|
|
@@ -980,21 +964,21 @@ export class SettingsSelectorComponent extends Container {
|
|
|
980
964
|
{
|
|
981
965
|
id: "theme",
|
|
982
966
|
label: "Theme",
|
|
983
|
-
description: "
|
|
967
|
+
description: "Interface color theme",
|
|
984
968
|
currentValue: config.currentTheme,
|
|
985
969
|
submenu: (currentValue, done) => new ThemeSubmenu(currentValue, config.terminalTheme, config.availableThemes, callbacks, done),
|
|
986
970
|
},
|
|
987
971
|
{
|
|
988
972
|
id: "model-tiers",
|
|
989
973
|
label: "Model tiers",
|
|
990
|
-
description: "
|
|
974
|
+
description: "Subagent model routing",
|
|
991
975
|
currentValue: config.modelTiers.enabled ? "on" : "off",
|
|
992
976
|
submenu: (currentValue, done) => new ModelTiersSubmenu(currentValue, config.modelTiers, callbacks, done),
|
|
993
977
|
},
|
|
994
978
|
{
|
|
995
979
|
id: "plan-usage-window",
|
|
996
980
|
label: "Plan usage window",
|
|
997
|
-
description: "
|
|
981
|
+
description: "Subscription usage period shown in the footer",
|
|
998
982
|
currentValue: config.planUsageWindow,
|
|
999
983
|
values: ["5h", "weekly"],
|
|
1000
984
|
},
|
|
@@ -1002,7 +986,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1002
986
|
{
|
|
1003
987
|
id: "customize",
|
|
1004
988
|
label: "Customize",
|
|
1005
|
-
description: "
|
|
989
|
+
description: "Interface and footer options",
|
|
1006
990
|
currentValue: "configure",
|
|
1007
991
|
submenu: (_currentValue, done) => new CustomizeSubmenu(config, callbacks, done),
|
|
1008
992
|
},
|
|
@@ -1010,7 +994,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1010
994
|
{
|
|
1011
995
|
id: "rollback",
|
|
1012
996
|
label: "Rollback",
|
|
1013
|
-
description: "
|
|
997
|
+
description: "Rollback behavior options",
|
|
1014
998
|
currentValue: config.rollbackEnabled ? "on" : "off",
|
|
1015
999
|
submenu: (currentValue, done) => new RollbackSubmenu(currentValue, config, callbacks, callbacks.isRollbackSessionForceEnabled(), done),
|
|
1016
1000
|
},
|
|
@@ -1018,7 +1002,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1018
1002
|
{
|
|
1019
1003
|
id: "auto-manage-subscriptions",
|
|
1020
1004
|
label: "Auto-manage subscriptions",
|
|
1021
|
-
description: "
|
|
1005
|
+
description: "Automatic API key rotation after usage limits",
|
|
1022
1006
|
currentValue: config.autoManageSubscriptions ? "on" : "off",
|
|
1023
1007
|
values: ["on", "off"],
|
|
1024
1008
|
},
|
|
@@ -1029,7 +1013,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1029
1013
|
items.push({
|
|
1030
1014
|
id: "subscriptions",
|
|
1031
1015
|
label: "Subscriptions",
|
|
1032
|
-
description: "
|
|
1016
|
+
description: "Saved API key management",
|
|
1033
1017
|
currentValue: config.subscriptionCount === 0
|
|
1034
1018
|
? "none"
|
|
1035
1019
|
: `${config.subscriptionCount} key${config.subscriptionCount === 1 ? "" : "s"}`,
|
|
@@ -1042,14 +1026,14 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1042
1026
|
items.splice(1, 0, {
|
|
1043
1027
|
id: "show-images",
|
|
1044
1028
|
label: "Show images",
|
|
1045
|
-
description: "
|
|
1029
|
+
description: "Inline terminal image rendering",
|
|
1046
1030
|
currentValue: config.showImages ? "true" : "false",
|
|
1047
1031
|
values: ["true", "false"],
|
|
1048
1032
|
});
|
|
1049
1033
|
items.splice(2, 0, {
|
|
1050
1034
|
id: "image-width-cells",
|
|
1051
1035
|
label: "Image width",
|
|
1052
|
-
description: "
|
|
1036
|
+
description: "Inline image width in terminal cells",
|
|
1053
1037
|
currentValue: String(config.imageWidthCells),
|
|
1054
1038
|
values: ["60", "80", "120"],
|
|
1055
1039
|
});
|
|
@@ -1058,7 +1042,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1058
1042
|
items.splice(supportsImages ? 3 : 1, 0, {
|
|
1059
1043
|
id: "auto-resize-images",
|
|
1060
1044
|
label: "Auto-resize images",
|
|
1061
|
-
description: "
|
|
1045
|
+
description: "Limit images to 2000 x 2000 pixels",
|
|
1062
1046
|
currentValue: config.autoResizeImages ? "true" : "false",
|
|
1063
1047
|
values: ["true", "false"],
|
|
1064
1048
|
});
|
|
@@ -1067,7 +1051,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1067
1051
|
items.splice(autoResizeIndex + 1, 0, {
|
|
1068
1052
|
id: "block-images",
|
|
1069
1053
|
label: "Block images",
|
|
1070
|
-
description: "Prevent images from
|
|
1054
|
+
description: "Prevent images from reaching model providers",
|
|
1071
1055
|
currentValue: config.blockImages ? "true" : "false",
|
|
1072
1056
|
values: ["true", "false"],
|
|
1073
1057
|
});
|
|
@@ -1076,16 +1060,25 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1076
1060
|
items.splice(blockImagesIndex + 1, 0, {
|
|
1077
1061
|
id: "skill-commands",
|
|
1078
1062
|
label: "Skill commands",
|
|
1079
|
-
description: "
|
|
1063
|
+
description: "Skills as /skill:name commands",
|
|
1080
1064
|
currentValue: config.enableSkillCommands ? "true" : "false",
|
|
1081
1065
|
values: ["true", "false"],
|
|
1082
1066
|
});
|
|
1083
|
-
//
|
|
1067
|
+
// Skill tag character (insert after skill-commands)
|
|
1084
1068
|
const skillCommandsIndex = items.findIndex((item) => item.id === "skill-commands");
|
|
1085
1069
|
items.splice(skillCommandsIndex + 1, 0, {
|
|
1070
|
+
id: "skill-tag-character",
|
|
1071
|
+
label: "Skill tag",
|
|
1072
|
+
description: "After a space, this character lists skills to tag in the message",
|
|
1073
|
+
currentValue: config.skillTagCharacter,
|
|
1074
|
+
values: [...SKILL_TAG_CHARACTERS],
|
|
1075
|
+
});
|
|
1076
|
+
// Hardware cursor toggle (insert after skill-tag-character)
|
|
1077
|
+
const skillTagIndex = items.findIndex((item) => item.id === "skill-tag-character");
|
|
1078
|
+
items.splice(skillTagIndex + 1, 0, {
|
|
1086
1079
|
id: "show-hardware-cursor",
|
|
1087
1080
|
label: "Show hardware cursor",
|
|
1088
|
-
description: "
|
|
1081
|
+
description: "Terminal cursor for input method editors",
|
|
1089
1082
|
currentValue: config.showHardwareCursor ? "true" : "false",
|
|
1090
1083
|
values: ["true", "false"],
|
|
1091
1084
|
});
|
|
@@ -1094,7 +1087,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1094
1087
|
items.splice(hardwareCursorIndex + 1, 0, {
|
|
1095
1088
|
id: "editor-padding",
|
|
1096
1089
|
label: "Editor padding",
|
|
1097
|
-
description: "Horizontal
|
|
1090
|
+
description: "Horizontal editor padding",
|
|
1098
1091
|
currentValue: String(config.editorPaddingX),
|
|
1099
1092
|
values: ["0", "1", "2", "3"],
|
|
1100
1093
|
});
|
|
@@ -1103,7 +1096,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1103
1096
|
items.splice(editorPaddingIndex + 1, 0, {
|
|
1104
1097
|
id: "output-padding",
|
|
1105
1098
|
label: "Output padding",
|
|
1106
|
-
description: "Horizontal padding
|
|
1099
|
+
description: "Horizontal message padding",
|
|
1107
1100
|
currentValue: String(config.outputPad),
|
|
1108
1101
|
values: ["0", "1"],
|
|
1109
1102
|
});
|
|
@@ -1112,7 +1105,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1112
1105
|
items.splice(outputPaddingIndex + 1, 0, {
|
|
1113
1106
|
id: "autocomplete-max-visible",
|
|
1114
1107
|
label: "Autocomplete max items",
|
|
1115
|
-
description: "
|
|
1108
|
+
description: "Visible autocomplete items",
|
|
1116
1109
|
currentValue: String(config.autocompleteMaxVisible),
|
|
1117
1110
|
values: ["3", "5", "7", "10", "15", "20"],
|
|
1118
1111
|
});
|
|
@@ -1121,7 +1114,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1121
1114
|
items.splice(autocompleteIndex + 1, 0, {
|
|
1122
1115
|
id: "clear-on-shrink",
|
|
1123
1116
|
label: "Clear on shrink",
|
|
1124
|
-
description: "Clear
|
|
1117
|
+
description: "Clear leftover terminal rows when content shrinks",
|
|
1125
1118
|
currentValue: config.clearOnShrink ? "true" : "false",
|
|
1126
1119
|
values: ["true", "false"],
|
|
1127
1120
|
});
|
|
@@ -1130,7 +1123,7 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1130
1123
|
items.splice(clearOnShrinkIndex + 1, 0, {
|
|
1131
1124
|
id: "terminal-progress",
|
|
1132
1125
|
label: "Terminal progress",
|
|
1133
|
-
description: "
|
|
1126
|
+
description: "Progress in supported terminal tabs",
|
|
1134
1127
|
currentValue: config.showTerminalProgress ? "true" : "false",
|
|
1135
1128
|
values: ["true", "false"],
|
|
1136
1129
|
});
|
|
@@ -1156,6 +1149,9 @@ export class SettingsSelectorComponent extends Container {
|
|
|
1156
1149
|
case "skill-commands":
|
|
1157
1150
|
callbacks.onEnableSkillCommandsChange(newValue === "true");
|
|
1158
1151
|
break;
|
|
1152
|
+
case "skill-tag-character":
|
|
1153
|
+
callbacks.onSkillTagCharacterChange(newValue);
|
|
1154
|
+
break;
|
|
1159
1155
|
case "steering-mode":
|
|
1160
1156
|
callbacks.onSteeringModeChange(newValue);
|
|
1161
1157
|
break;
|