chore(ui-tui): apply npm run fix formatting pass
Run ui-tui lint autofix + prettier and commit the resulting formatting-only changes for the parity PR branch.
This commit is contained in:
@@ -1,9 +1,9 @@
|
|||||||
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
import { beforeEach, describe, expect, it, vi } from 'vitest'
|
||||||
|
|
||||||
import { createSlashHandler } from '../app/createSlashHandler.js'
|
import { createSlashHandler } from '../app/createSlashHandler.js'
|
||||||
import { TUI_SESSION_MODEL_FLAG } from '../domain/slash.js'
|
|
||||||
import { getOverlayState, resetOverlayState } from '../app/overlayStore.js'
|
import { getOverlayState, resetOverlayState } from '../app/overlayStore.js'
|
||||||
import { getUiState, patchUiState, resetUiState } from '../app/uiStore.js'
|
import { getUiState, patchUiState, resetUiState } from '../app/uiStore.js'
|
||||||
|
import { TUI_SESSION_MODEL_FLAG } from '../domain/slash.js'
|
||||||
|
|
||||||
describe('createSlashHandler', () => {
|
describe('createSlashHandler', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@@ -55,9 +55,7 @@ describe('createSlashHandler', () => {
|
|||||||
})
|
})
|
||||||
|
|
||||||
expect(
|
expect(
|
||||||
createSlashHandler(ctx)(
|
createSlashHandler(ctx)(`/model anthropic/claude-sonnet-4.6 --provider openrouter ${TUI_SESSION_MODEL_FLAG}`)
|
||||||
`/model anthropic/claude-sonnet-4.6 --provider openrouter ${TUI_SESSION_MODEL_FLAG}`
|
|
||||||
)
|
|
||||||
).toBe(true)
|
).toBe(true)
|
||||||
expect(ctx.gateway.rpc).toHaveBeenCalledWith('config.set', {
|
expect(ctx.gateway.rpc).toHaveBeenCalledWith('config.set', {
|
||||||
key: 'model',
|
key: 'model',
|
||||||
|
|||||||
@@ -8,14 +8,7 @@ import { SLASH_COMMANDS } from '../app/slash/registry.js'
|
|||||||
|
|
||||||
type CommandRoute = 'fallback' | 'local' | 'native'
|
type CommandRoute = 'fallback' | 'local' | 'native'
|
||||||
|
|
||||||
const NATIVE_MUTATING_COMMANDS = new Set([
|
const NATIVE_MUTATING_COMMANDS = new Set(['browser', 'busy', 'fast', 'reload-mcp', 'rollback', 'stop'])
|
||||||
'browser',
|
|
||||||
'busy',
|
|
||||||
'fast',
|
|
||||||
'reload-mcp',
|
|
||||||
'rollback',
|
|
||||||
'stop'
|
|
||||||
])
|
|
||||||
|
|
||||||
const MUTATING_COMMANDS = [
|
const MUTATING_COMMANDS = [
|
||||||
'background',
|
'background',
|
||||||
@@ -57,12 +50,15 @@ const LOCAL_COMMAND_NAMES = new Set(
|
|||||||
|
|
||||||
const classifyRoute = (name: string): CommandRoute => {
|
const classifyRoute = (name: string): CommandRoute => {
|
||||||
const normalized = name.toLowerCase()
|
const normalized = name.toLowerCase()
|
||||||
|
|
||||||
if (NATIVE_MUTATING_COMMANDS.has(normalized)) {
|
if (NATIVE_MUTATING_COMMANDS.has(normalized)) {
|
||||||
return 'native'
|
return 'native'
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LOCAL_COMMAND_NAMES.has(normalized)) {
|
if (LOCAL_COMMAND_NAMES.has(normalized)) {
|
||||||
return 'local'
|
return 'local'
|
||||||
}
|
}
|
||||||
|
|
||||||
return 'fallback'
|
return 'fallback'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -6,8 +6,8 @@ import type {
|
|||||||
ConfigGetValueResponse,
|
ConfigGetValueResponse,
|
||||||
ConfigSetResponse,
|
ConfigSetResponse,
|
||||||
SessionSaveResponse,
|
SessionSaveResponse,
|
||||||
SessionTitleResponse,
|
|
||||||
SessionSteerResponse,
|
SessionSteerResponse,
|
||||||
|
SessionTitleResponse,
|
||||||
SessionUndoResponse
|
SessionUndoResponse
|
||||||
} from '../../../gatewayTypes.js'
|
} from '../../../gatewayTypes.js'
|
||||||
import { writeOsc52Clipboard } from '../../../lib/osc52.js'
|
import { writeOsc52Clipboard } from '../../../lib/osc52.js'
|
||||||
|
|||||||
@@ -102,6 +102,7 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
}
|
}
|
||||||
|
|
||||||
const payload: Record<string, unknown> = { action }
|
const payload: Record<string, unknown> = { action }
|
||||||
|
|
||||||
if (action === 'connect') {
|
if (action === 'connect') {
|
||||||
payload.url = rest.join(' ').trim() || 'http://localhost:9222'
|
payload.url = rest.join(' ').trim() || 'http://localhost:9222'
|
||||||
}
|
}
|
||||||
@@ -115,11 +116,13 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
r.connected ? `browser connected: ${r.url || '(url unavailable)'}` : 'browser not connected'
|
r.connected ? `browser connected: ${r.url || '(url unavailable)'}` : 'browser not connected'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (action === 'connect') {
|
if (action === 'connect') {
|
||||||
return ctx.transcript.sys(
|
return ctx.transcript.sys(
|
||||||
r.connected ? `browser connected: ${r.url || '(url unavailable)'}` : 'browser connect failed'
|
r.connected ? `browser connected: ${r.url || '(url unavailable)'}` : 'browser connect failed'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.transcript.sys('browser disconnected')
|
ctx.transcript.sys('browser disconnected')
|
||||||
})
|
})
|
||||||
)
|
)
|
||||||
@@ -143,10 +146,13 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
if (!r.enabled) {
|
if (!r.enabled) {
|
||||||
return ctx.transcript.sys('checkpoints are not enabled')
|
return ctx.transcript.sys('checkpoints are not enabled')
|
||||||
}
|
}
|
||||||
|
|
||||||
const checkpoints = r.checkpoints ?? []
|
const checkpoints = r.checkpoints ?? []
|
||||||
|
|
||||||
if (!checkpoints.length) {
|
if (!checkpoints.length) {
|
||||||
return ctx.transcript.sys('no checkpoints found')
|
return ctx.transcript.sys('no checkpoints found')
|
||||||
}
|
}
|
||||||
|
|
||||||
ctx.transcript.panel('Rollback checkpoints', [
|
ctx.transcript.panel('Rollback checkpoints', [
|
||||||
{
|
{
|
||||||
rows: checkpoints.map((c, idx) => [
|
rows: checkpoints.map((c, idx) => [
|
||||||
@@ -162,17 +168,21 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
|
|
||||||
if (lower === 'diff') {
|
if (lower === 'diff') {
|
||||||
const hash = rest[0]
|
const hash = rest[0]
|
||||||
|
|
||||||
if (!hash) {
|
if (!hash) {
|
||||||
return ctx.transcript.sys('usage: /rollback diff <checkpoint>')
|
return ctx.transcript.sys('usage: /rollback diff <checkpoint>')
|
||||||
}
|
}
|
||||||
|
|
||||||
return ctx.gateway
|
return ctx.gateway
|
||||||
.rpc<RollbackDiffResponse>('rollback.diff', { hash, session_id: ctx.sid })
|
.rpc<RollbackDiffResponse>('rollback.diff', { hash, session_id: ctx.sid })
|
||||||
.then(
|
.then(
|
||||||
ctx.guarded<RollbackDiffResponse>(r => {
|
ctx.guarded<RollbackDiffResponse>(r => {
|
||||||
const body = (r.rendered || r.diff || '').trim()
|
const body = (r.rendered || r.diff || '').trim()
|
||||||
|
|
||||||
if (!body && !r.stat) {
|
if (!body && !r.stat) {
|
||||||
return ctx.transcript.sys('no changes since this checkpoint')
|
return ctx.transcript.sys('no changes since this checkpoint')
|
||||||
}
|
}
|
||||||
|
|
||||||
const text = [r.stat || '', body].filter(Boolean).join('\n\n')
|
const text = [r.stat || '', body].filter(Boolean).join('\n\n')
|
||||||
ctx.transcript.page(text, 'Rollback diff')
|
ctx.transcript.page(text, 'Rollback diff')
|
||||||
})
|
})
|
||||||
@@ -182,6 +192,7 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
|
|
||||||
const hash = first
|
const hash = first
|
||||||
const filePath = rest.join(' ').trim()
|
const filePath = rest.join(' ').trim()
|
||||||
|
|
||||||
return ctx.gateway
|
return ctx.gateway
|
||||||
.rpc<RollbackRestoreResponse>('rollback.restore', {
|
.rpc<RollbackRestoreResponse>('rollback.restore', {
|
||||||
...(filePath ? { file_path: filePath } : {}),
|
...(filePath ? { file_path: filePath } : {}),
|
||||||
@@ -193,9 +204,11 @@ export const opsCommands: SlashCommand[] = [
|
|||||||
if (!r.success) {
|
if (!r.success) {
|
||||||
return ctx.transcript.sys(`rollback failed: ${r.error || r.message || 'unknown error'}`)
|
return ctx.transcript.sys(`rollback failed: ${r.error || r.message || 'unknown error'}`)
|
||||||
}
|
}
|
||||||
|
|
||||||
const target = filePath || 'workspace'
|
const target = filePath || 'workspace'
|
||||||
const detail = r.reason || r.message || r.restored_to || 'restored'
|
const detail = r.reason || r.message || r.restored_to || 'restored'
|
||||||
ctx.transcript.sys(`rollback restored ${target}: ${detail}`)
|
ctx.transcript.sys(`rollback restored ${target}: ${detail}`)
|
||||||
|
|
||||||
if ((r.history_removed ?? 0) > 0) {
|
if ((r.history_removed ?? 0) > 0) {
|
||||||
ctx.transcript.setHistoryItems(prev => ctx.transcript.trimLastExchange(prev))
|
ctx.transcript.setHistoryItems(prev => ctx.transcript.trimLastExchange(prev))
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,5 @@
|
|||||||
import { attachedImageNotice, introMsg, toTranscriptMessages } from '../../../domain/messages.js'
|
import { attachedImageNotice, introMsg, toTranscriptMessages } from '../../../domain/messages.js'
|
||||||
|
import { TUI_SESSION_MODEL_FLAG } from '../../../domain/slash.js'
|
||||||
import type {
|
import type {
|
||||||
BackgroundStartResponse,
|
BackgroundStartResponse,
|
||||||
ConfigGetValueResponse,
|
ConfigGetValueResponse,
|
||||||
@@ -10,7 +11,6 @@ import type {
|
|||||||
VoiceToggleResponse
|
VoiceToggleResponse
|
||||||
} from '../../../gatewayTypes.js'
|
} from '../../../gatewayTypes.js'
|
||||||
import { fmtK } from '../../../lib/text.js'
|
import { fmtK } from '../../../lib/text.js'
|
||||||
import { TUI_SESSION_MODEL_FLAG } from '../../../domain/slash.js'
|
|
||||||
import type { PanelSection } from '../../../types.js'
|
import type { PanelSection } from '../../../types.js'
|
||||||
import { patchOverlayState } from '../../overlayStore.js'
|
import { patchOverlayState } from '../../overlayStore.js'
|
||||||
import { patchUiState } from '../../uiStore.js'
|
import { patchUiState } from '../../uiStore.js'
|
||||||
@@ -27,8 +27,7 @@ const persistedModelArg = (arg: string) => {
|
|||||||
return !trimmed || GLOBAL_MODEL_FLAG_RE.test(trimmed) ? trimmed : `${trimmed} --global`
|
return !trimmed || GLOBAL_MODEL_FLAG_RE.test(trimmed) ? trimmed : `${trimmed} --global`
|
||||||
}
|
}
|
||||||
|
|
||||||
const stripTuiSessionFlag = (trimmed: string) =>
|
const stripTuiSessionFlag = (trimmed: string) => trimmed.replace(TUI_SESSION_STRIP_RE, ' ').replace(/\s+/g, ' ').trim()
|
||||||
trimmed.replace(TUI_SESSION_STRIP_RE, ' ').replace(/\s+/g, ' ').trim()
|
|
||||||
|
|
||||||
const modelValueForConfigSet = (arg: string) => {
|
const modelValueForConfigSet = (arg: string) => {
|
||||||
const trimmed = arg.trim()
|
const trimmed = arg.trim()
|
||||||
@@ -313,6 +312,7 @@ export const sessionCommands: SlashCommand[] = [
|
|||||||
run: (arg, ctx) => {
|
run: (arg, ctx) => {
|
||||||
const mode = arg.trim().toLowerCase()
|
const mode = arg.trim().toLowerCase()
|
||||||
const valid = new Set(['', 'status', 'normal', 'fast', 'on', 'off', 'toggle'])
|
const valid = new Set(['', 'status', 'normal', 'fast', 'on', 'off', 'toggle'])
|
||||||
|
|
||||||
if (!valid.has(mode)) {
|
if (!valid.has(mode)) {
|
||||||
return ctx.transcript.sys('usage: /fast [normal|fast|status]')
|
return ctx.transcript.sys('usage: /fast [normal|fast|status]')
|
||||||
}
|
}
|
||||||
@@ -356,6 +356,7 @@ export const sessionCommands: SlashCommand[] = [
|
|||||||
run: (arg, ctx) => {
|
run: (arg, ctx) => {
|
||||||
const mode = arg.trim().toLowerCase()
|
const mode = arg.trim().toLowerCase()
|
||||||
const valid = new Set(['', 'status', 'queue', 'steer', 'interrupt'])
|
const valid = new Set(['', 'status', 'queue', 'steer', 'interrupt'])
|
||||||
|
|
||||||
if (!valid.has(mode)) {
|
if (!valid.has(mode)) {
|
||||||
return ctx.transcript.sys('usage: /busy [queue|steer|interrupt|status]')
|
return ctx.transcript.sys('usage: /busy [queue|steer|interrupt|status]')
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,9 +112,7 @@ export function ModelPicker({ gw, onCancel, onSelect, sessionId, t }: ModelPicke
|
|||||||
const model = models[modelIdx]
|
const model = models[modelIdx]
|
||||||
|
|
||||||
if (provider && model) {
|
if (provider && model) {
|
||||||
onSelect(
|
onSelect(`${model} --provider ${provider.slug}${persistGlobal ? ' --global' : ` ${TUI_SESSION_MODEL_FLAG}`}`)
|
||||||
`${model} --provider ${provider.slug}${persistGlobal ? ' --global' : ` ${TUI_SESSION_MODEL_FLAG}`}`
|
|
||||||
)
|
|
||||||
} else {
|
} else {
|
||||||
setStage('provider')
|
setStage('provider')
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user