feat(tui): add /elev alias
This commit is contained in:
@@ -37,6 +37,7 @@
|
|||||||
- Gmail: stop restart loop when `gog gmail watch serve` fails to bind (address already in use).
|
- Gmail: stop restart loop when `gog gmail watch serve` fails to bind (address already in use).
|
||||||
- Linux: auto-attempt lingering during onboarding (try without sudo, fallback to sudo) and prompt on install/restart to keep the gateway alive after logout/idle. Thanks @tobiasbischoff for PR #237.
|
- Linux: auto-attempt lingering during onboarding (try without sudo, fallback to sudo) and prompt on install/restart to keep the gateway alive after logout/idle. Thanks @tobiasbischoff for PR #237.
|
||||||
- TUI: migrate key handling to the updated pi-tui Key matcher API.
|
- TUI: migrate key handling to the updated pi-tui Key matcher API.
|
||||||
|
- TUI: add `/elev` alias for `/elevated`.
|
||||||
- Logging: redact sensitive tokens in verbose tool summaries by default (configurable patterns).
|
- Logging: redact sensitive tokens in verbose tool summaries by default (configurable patterns).
|
||||||
- macOS: prefer gateway config reads/writes in local mode (fall back to disk if the gateway is unavailable).
|
- macOS: prefer gateway config reads/writes in local mode (fall back to disk if the gateway is unavailable).
|
||||||
- macOS: local gateway now connects via tailnet IP when bind mode is `tailnet`/`auto`.
|
- macOS: local gateway now connects via tailnet IP when bind mode is `tailnet`/`auto`.
|
||||||
|
|||||||
@@ -52,6 +52,7 @@ Use SSH tunneling or Tailscale to reach the Gateway WS.
|
|||||||
- `/think <off|minimal|low|medium|high>`
|
- `/think <off|minimal|low|medium|high>`
|
||||||
- `/verbose <on|off>`
|
- `/verbose <on|off>`
|
||||||
- `/elevated <on|off>`
|
- `/elevated <on|off>`
|
||||||
|
- `/elev <on|off>`
|
||||||
- `/activation <mention|always>`
|
- `/activation <mention|always>`
|
||||||
- `/deliver <on|off>`
|
- `/deliver <on|off>`
|
||||||
- `/new` or `/reset`
|
- `/new` or `/reset`
|
||||||
|
|||||||
16
src/tui/commands.test.ts
Normal file
16
src/tui/commands.test.ts
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
import { describe, expect, it } from "vitest";
|
||||||
|
|
||||||
|
import { parseCommand } from "./commands.js";
|
||||||
|
|
||||||
|
describe("tui slash commands", () => {
|
||||||
|
it("treats /elev as an alias for /elevated", () => {
|
||||||
|
expect(parseCommand("/elev on")).toEqual({ name: "elevated", args: "on" });
|
||||||
|
});
|
||||||
|
|
||||||
|
it("normalizes alias case", () => {
|
||||||
|
expect(parseCommand("/ELEV off")).toEqual({
|
||||||
|
name: "elevated",
|
||||||
|
args: "off",
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
@@ -11,11 +11,19 @@ export type ParsedCommand = {
|
|||||||
args: string;
|
args: string;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const COMMAND_ALIASES: Record<string, string> = {
|
||||||
|
elev: "elevated",
|
||||||
|
};
|
||||||
|
|
||||||
export function parseCommand(input: string): ParsedCommand {
|
export function parseCommand(input: string): ParsedCommand {
|
||||||
const trimmed = input.replace(/^\//, "").trim();
|
const trimmed = input.replace(/^\//, "").trim();
|
||||||
if (!trimmed) return { name: "", args: "" };
|
if (!trimmed) return { name: "", args: "" };
|
||||||
const [name, ...rest] = trimmed.split(/\s+/);
|
const [name, ...rest] = trimmed.split(/\s+/);
|
||||||
return { name: name.toLowerCase(), args: rest.join(" ").trim() };
|
const normalized = name.toLowerCase();
|
||||||
|
return {
|
||||||
|
name: COMMAND_ALIASES[normalized] ?? normalized,
|
||||||
|
args: rest.join(" ").trim(),
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
export function getSlashCommands(): SlashCommand[] {
|
export function getSlashCommands(): SlashCommand[] {
|
||||||
@@ -53,6 +61,14 @@ export function getSlashCommands(): SlashCommand[] {
|
|||||||
(value) => ({ value, label: value }),
|
(value) => ({ value, label: value }),
|
||||||
),
|
),
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
name: "elev",
|
||||||
|
description: "Alias for /elevated",
|
||||||
|
getArgumentCompletions: (prefix) =>
|
||||||
|
ELEVATED_LEVELS.filter((v) => v.startsWith(prefix.toLowerCase())).map(
|
||||||
|
(value) => ({ value, label: value }),
|
||||||
|
),
|
||||||
|
},
|
||||||
{
|
{
|
||||||
name: "activation",
|
name: "activation",
|
||||||
description: "Set group activation",
|
description: "Set group activation",
|
||||||
@@ -88,6 +104,7 @@ export function helpText(): string {
|
|||||||
"/think <off|minimal|low|medium|high>",
|
"/think <off|minimal|low|medium|high>",
|
||||||
"/verbose <on|off>",
|
"/verbose <on|off>",
|
||||||
"/elevated <on|off>",
|
"/elevated <on|off>",
|
||||||
|
"/elev <on|off>",
|
||||||
"/activation <mention|always>",
|
"/activation <mention|always>",
|
||||||
"/deliver <on|off>",
|
"/deliver <on|off>",
|
||||||
"/new or /reset",
|
"/new or /reset",
|
||||||
|
|||||||
Reference in New Issue
Block a user