generated from nhcarrigan/template
fix: handle permission requests better perhaps
This commit is contained in:
Generated
+1
-1
@@ -1636,7 +1636,7 @@ checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
|||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hikari-desktop"
|
name = "hikari-desktop"
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"chrono",
|
"chrono",
|
||||||
"dirs 5.0.1",
|
"dirs 5.0.1",
|
||||||
|
|||||||
@@ -37,6 +37,12 @@ async function changeDirectory(path: string): Promise<void> {
|
|||||||
// Capture conversation history before disconnecting
|
// Capture conversation history before disconnecting
|
||||||
const conversationHistory = claudeStore.getConversationHistory();
|
const conversationHistory = claudeStore.getConversationHistory();
|
||||||
|
|
||||||
|
// Get currently granted tools and config auto-granted tools
|
||||||
|
const activeConversation = get(conversationsStore.activeConversation);
|
||||||
|
const grantedTools = activeConversation ? Array.from(activeConversation.grantedTools) : [];
|
||||||
|
const config = configStore.getConfig();
|
||||||
|
const allAllowedTools = [...new Set([...grantedTools, ...config.auto_granted_tools])];
|
||||||
|
|
||||||
await invoke("stop_claude", { conversationId });
|
await invoke("stop_claude", { conversationId });
|
||||||
|
|
||||||
// Wait for clean shutdown
|
// Wait for clean shutdown
|
||||||
@@ -50,12 +56,11 @@ async function changeDirectory(path: string): Promise<void> {
|
|||||||
conversationId,
|
conversationId,
|
||||||
options: {
|
options: {
|
||||||
working_dir: validatedPath,
|
working_dir: validatedPath,
|
||||||
|
allowed_tools: allAllowedTools,
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
// Update Discord RPC when reconnecting after directory change
|
// Update Discord RPC when reconnecting after directory change
|
||||||
const config = configStore.getConfig();
|
|
||||||
const activeConversation = get(conversationsStore.activeConversation);
|
|
||||||
if (activeConversation) {
|
if (activeConversation) {
|
||||||
await updateDiscordRpc(
|
await updateDiscordRpc(
|
||||||
activeConversation.name,
|
activeConversation.name,
|
||||||
|
|||||||
@@ -1,22 +1,17 @@
|
|||||||
<script lang="ts">
|
<script lang="ts">
|
||||||
import { invoke } from "@tauri-apps/api/core";
|
import { invoke } from "@tauri-apps/api/core";
|
||||||
import { get } from "svelte/store";
|
import { get } from "svelte/store";
|
||||||
import { claudeStore, hasPermissionPending } from "$lib/stores/claude";
|
import { claudeStore } from "$lib/stores/claude";
|
||||||
import { characterState } from "$lib/stores/character";
|
import { characterState } from "$lib/stores/character";
|
||||||
import type { PermissionRequest } from "$lib/types/messages";
|
import type { PermissionRequest } from "$lib/types/messages";
|
||||||
import { updateDiscordRpc } from "$lib/tauri";
|
import { updateDiscordRpc } from "$lib/tauri";
|
||||||
import { conversationsStore } from "$lib/stores/conversations";
|
import { conversationsStore } from "$lib/stores/conversations";
|
||||||
import { configStore } from "$lib/stores/config";
|
import { configStore } from "$lib/stores/config";
|
||||||
|
|
||||||
let isVisible = $state(false);
|
|
||||||
let permission: PermissionRequest | null = $state(null);
|
let permission: PermissionRequest | null = $state(null);
|
||||||
let grantedToolsList: string[] = $state([]);
|
let grantedToolsList: string[] = $state([]);
|
||||||
let workingDirectory = $state("");
|
let workingDirectory = $state("");
|
||||||
|
|
||||||
hasPermissionPending.subscribe((pending) => {
|
|
||||||
isVisible = pending;
|
|
||||||
});
|
|
||||||
|
|
||||||
claudeStore.pendingPermission.subscribe((perm) => {
|
claudeStore.pendingPermission.subscribe((perm) => {
|
||||||
permission = perm;
|
permission = perm;
|
||||||
if (perm) {
|
if (perm) {
|
||||||
@@ -125,7 +120,7 @@ Please continue where we left off and retry that action now that you have permis
|
|||||||
}
|
}
|
||||||
|
|
||||||
function handleKeydown(event: KeyboardEvent) {
|
function handleKeydown(event: KeyboardEvent) {
|
||||||
if (!isVisible || !permission) return;
|
if (!permission) return;
|
||||||
|
|
||||||
if (event.key === "Enter") {
|
if (event.key === "Enter") {
|
||||||
event.preventDefault();
|
event.preventDefault();
|
||||||
@@ -139,7 +134,7 @@ Please continue where we left off and retry that action now that you have permis
|
|||||||
|
|
||||||
<svelte:window onkeydown={handleKeydown} />
|
<svelte:window onkeydown={handleKeydown} />
|
||||||
|
|
||||||
{#if isVisible && permission}
|
{#if permission}
|
||||||
<div
|
<div
|
||||||
class="permission-overlay fixed inset-0 bg-black/70 flex items-center justify-center z-50 backdrop-blur-sm"
|
class="permission-overlay fixed inset-0 bg-black/70 flex items-center justify-center z-50 backdrop-blur-sm"
|
||||||
>
|
>
|
||||||
|
|||||||
@@ -190,6 +190,9 @@
|
|||||||
throw new Error("No active conversation");
|
throw new Error("No active conversation");
|
||||||
}
|
}
|
||||||
await invoke("stop_claude", { conversationId });
|
await invoke("stop_claude", { conversationId });
|
||||||
|
|
||||||
|
// Clear granted permissions when user explicitly disconnects
|
||||||
|
claudeStore.revokeAllTools();
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
console.error("Failed to stop Claude:", error);
|
console.error("Failed to stop Claude:", error);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user