fix: update keyboard shortcut abort logic
Use current session activity to determine when abort shortcuts are available Prevent abort priming when there is no active session
This commit is contained in:
@@ -97,7 +97,7 @@
|
|||||||
},
|
},
|
||||||
"packages/electron": {
|
"packages/electron": {
|
||||||
"name": "@openchamber/electron",
|
"name": "@openchamber/electron",
|
||||||
"version": "1.16.2",
|
"version": "1.16.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/web": "workspace:*",
|
"@openchamber/web": "workspace:*",
|
||||||
"electron-context-menu": "^4.1.2",
|
"electron-context-menu": "^4.1.2",
|
||||||
@@ -133,7 +133,7 @@
|
|||||||
},
|
},
|
||||||
"packages/ui": {
|
"packages/ui": {
|
||||||
"name": "@openchamber/ui",
|
"name": "@openchamber/ui",
|
||||||
"version": "1.16.2",
|
"version": "1.16.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aparajita/capacitor-secure-storage": "^8.0.0",
|
"@aparajita/capacitor-secure-storage": "^8.0.0",
|
||||||
"@base-ui/react": "^1.4.0",
|
"@base-ui/react": "^1.4.0",
|
||||||
@@ -238,7 +238,7 @@
|
|||||||
},
|
},
|
||||||
"packages/vscode": {
|
"packages/vscode": {
|
||||||
"name": "openchamber",
|
"name": "openchamber",
|
||||||
"version": "1.16.2",
|
"version": "1.16.3",
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@openchamber/ui": "workspace:*",
|
"@openchamber/ui": "workspace:*",
|
||||||
"@opencode-ai/sdk": "1.18.4",
|
"@opencode-ai/sdk": "1.18.4",
|
||||||
@@ -261,7 +261,7 @@
|
|||||||
},
|
},
|
||||||
"packages/web": {
|
"packages/web": {
|
||||||
"name": "@openchamber/web",
|
"name": "@openchamber/web",
|
||||||
"version": "1.16.2",
|
"version": "1.16.3",
|
||||||
"bin": {
|
"bin": {
|
||||||
"openchamber": "./bin/cli.js",
|
"openchamber": "./bin/cli.js",
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -5,7 +5,7 @@ import { useSelectionStore } from '@/sync/selection-store';
|
|||||||
import * as sessionActions from '@/sync/session-actions';
|
import * as sessionActions from '@/sync/session-actions';
|
||||||
import { useUIStore } from '@/stores/useUIStore';
|
import { useUIStore } from '@/stores/useUIStore';
|
||||||
import { useThemeSystem } from '@/contexts/useThemeSystem';
|
import { useThemeSystem } from '@/contexts/useThemeSystem';
|
||||||
import { useAssistantStatus } from '@/hooks/useAssistantStatus';
|
import { useCurrentSessionActivity } from '@/hooks/useSessionActivity';
|
||||||
import { createWorktreeSession } from '@/lib/worktreeSessionCreator';
|
import { createWorktreeSession } from '@/lib/worktreeSessionCreator';
|
||||||
import { useConfigStore } from '@/stores/useConfigStore';
|
import { useConfigStore } from '@/stores/useConfigStore';
|
||||||
import { canUseElectronDesktopIPC, invokeDesktop, isVSCodeRuntime } from '@/lib/desktop';
|
import { canUseElectronDesktopIPC, invokeDesktop, isVSCodeRuntime } from '@/lib/desktop';
|
||||||
@@ -43,7 +43,7 @@ export const useKeyboardShortcuts = () => {
|
|||||||
const currentDirectory = useDirectoryStore((s) => s.currentDirectory);
|
const currentDirectory = useDirectoryStore((s) => s.currentDirectory);
|
||||||
const activeProject = useProjectsStore((s) => s.getActiveProject());
|
const activeProject = useProjectsStore((s) => s.getActiveProject());
|
||||||
const { themeMode, setThemeMode } = useThemeSystem();
|
const { themeMode, setThemeMode } = useThemeSystem();
|
||||||
const { working } = useAssistantStatus();
|
const { phase: sessionPhase } = useCurrentSessionActivity();
|
||||||
const abortPrimedUntilRef = React.useRef<number | null>(null);
|
const abortPrimedUntilRef = React.useRef<number | null>(null);
|
||||||
const abortPrimedTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);
|
const abortPrimedTimeoutRef = React.useRef<ReturnType<typeof setTimeout> | null>(null);
|
||||||
const themeModeRef = React.useRef(themeMode);
|
const themeModeRef = React.useRef(themeMode);
|
||||||
@@ -569,7 +569,7 @@ export const useKeyboardShortcuts = () => {
|
|||||||
|
|
||||||
// Double-ESC abort logic - only when on chat tab with no overlays
|
// Double-ESC abort logic - only when on chat tab with no overlays
|
||||||
const sessionId = currentSessionId;
|
const sessionId = currentSessionId;
|
||||||
const canAbortNow = working.canAbort && Boolean(sessionId);
|
const canAbortNow = sessionPhase !== 'idle' && Boolean(sessionId);
|
||||||
if (!canAbortNow) {
|
if (!canAbortNow) {
|
||||||
resetAbortPriming();
|
resetAbortPriming();
|
||||||
return;
|
return;
|
||||||
@@ -631,7 +631,7 @@ export const useKeyboardShortcuts = () => {
|
|||||||
setPromptNavigatorPanelOpen,
|
setPromptNavigatorPanelOpen,
|
||||||
toggleExpandedInput,
|
toggleExpandedInput,
|
||||||
setThemeMode,
|
setThemeMode,
|
||||||
working,
|
sessionPhase,
|
||||||
armAbortPrompt,
|
armAbortPrompt,
|
||||||
resetAbortPriming,
|
resetAbortPriming,
|
||||||
currentSessionId,
|
currentSessionId,
|
||||||
|
|||||||
Reference in New Issue
Block a user