refactor: remove Claude AI copilot panel — will be replaced with embedded terminal
All checks were successful
Build & Sign Wraith / Build Windows + Sign (push) Successful in 1m10s

Gutted the copilot panel, OAuth integration, and AI service registration.
The copilot component files are left in place for future reference but
disconnected from the UI. The replacement will be an embedded local
terminal running `claude` with MCP tools for Wraith session access.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
Vantz Stockwell 2026-03-17 12:58:31 -04:00
parent e1517daf9a
commit 1d61b1faf2
2 changed files with 6 additions and 45 deletions

View File

@ -82,25 +82,8 @@
<path d="M11.5 7a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0zm-.82 4.74a6 6 0 1 1 1.06-1.06l3.04 3.04a.75.75 0 1 1-1.06 1.06l-3.04-3.04z" /> <path d="M11.5 7a4.5 4.5 0 1 1-9 0 4.5 4.5 0 0 1 9 0zm-.82 4.74a6 6 0 1 1 1.06-1.06l3.04 3.04a.75.75 0 1 1-1.06 1.06l-3.04-3.04z" />
</svg> </svg>
</button> </button>
<!-- XO Copilot toggle --> <!-- XO Copilot removed, will be replaced with embedded terminal running claude -->
<button
class="relative hover:text-[var(--wraith-text-primary)] transition-colors cursor-pointer"
:class="copilotStore.isPanelOpen ? 'text-[var(--wraith-accent-blue)]' : ''"
title="Toggle XO Copilot (Ctrl+Shift+K)"
@click="copilotStore.togglePanel()"
>
<span class="text-sm">&#x1F47B;</span>
<!-- Streaming indicator dot -->
<span
v-if="copilotStore.isStreaming"
class="absolute -top-0.5 -right-0.5 w-1.5 h-1.5 rounded-full bg-[var(--wraith-accent-blue)] animate-pulse"
/>
<!-- Subtle glow when open -->
<span
v-if="copilotStore.isPanelOpen"
class="absolute inset-0 rounded-full bg-[var(--wraith-accent-blue)] opacity-15 blur-sm"
/>
</button>
<button <button
class="hover:text-[var(--wraith-text-primary)] transition-colors cursor-pointer" class="hover:text-[var(--wraith-text-primary)] transition-colors cursor-pointer"
title="Lock vault" title="Lock vault"
@ -179,10 +162,7 @@
<SessionContainer /> <SessionContainer />
</div> </div>
<!-- Copilot Panel (slides in from right) --> <!-- Copilot Panel removed, will be replaced with embedded terminal running claude -->
<transition name="copilot-slide">
<CopilotPanel v-if="copilotStore.isPanelOpen" />
</transition>
</div> </div>
<!-- Status bar --> <!-- Status bar -->
@ -216,7 +196,7 @@ import { Call, Application } from "@wailsio/runtime";
import { useAppStore } from "@/stores/app.store"; import { useAppStore } from "@/stores/app.store";
import { useConnectionStore } from "@/stores/connection.store"; import { useConnectionStore } from "@/stores/connection.store";
import { useSessionStore } from "@/stores/session.store"; import { useSessionStore } from "@/stores/session.store";
import { useCopilotStore } from "@/stores/copilot.store"; // copilot removed will be replaced with embedded terminal running claude
import SidebarToggle from "@/components/sidebar/SidebarToggle.vue"; import SidebarToggle from "@/components/sidebar/SidebarToggle.vue";
import ConnectionTree from "@/components/sidebar/ConnectionTree.vue"; import ConnectionTree from "@/components/sidebar/ConnectionTree.vue";
import FileTree from "@/components/sftp/FileTree.vue"; import FileTree from "@/components/sftp/FileTree.vue";
@ -230,7 +210,7 @@ import ThemePicker from "@/components/common/ThemePicker.vue";
import ImportDialog from "@/components/common/ImportDialog.vue"; import ImportDialog from "@/components/common/ImportDialog.vue";
import SettingsModal from "@/components/common/SettingsModal.vue"; import SettingsModal from "@/components/common/SettingsModal.vue";
import ConnectionEditDialog from "@/components/connections/ConnectionEditDialog.vue"; import ConnectionEditDialog from "@/components/connections/ConnectionEditDialog.vue";
import CopilotPanel from "@/components/copilot/CopilotPanel.vue"; // CopilotPanel removed
const SFTP = "github.com/vstockwell/wraith/internal/sftp.SFTPService"; const SFTP = "github.com/vstockwell/wraith/internal/sftp.SFTPService";
const CONN = "github.com/vstockwell/wraith/internal/connections.ConnectionService"; const CONN = "github.com/vstockwell/wraith/internal/connections.ConnectionService";
@ -241,7 +221,7 @@ import type { FileEntry } from "@/composables/useSftp";
const appStore = useAppStore(); const appStore = useAppStore();
const connectionStore = useConnectionStore(); const connectionStore = useConnectionStore();
const sessionStore = useSessionStore(); const sessionStore = useSessionStore();
const copilotStore = useCopilotStore(); // copilotStore removed
const sidebarWidth = ref(240); const sidebarWidth = ref(240);
const sidebarTab = ref<SidebarTab>("connections"); const sidebarTab = ref<SidebarTab>("connections");
@ -395,13 +375,6 @@ async function handleQuickConnect(): Promise<void> {
/** Global keyboard shortcut handler. */ /** Global keyboard shortcut handler. */
function handleKeydown(event: KeyboardEvent): void { function handleKeydown(event: KeyboardEvent): void {
// Ctrl+Shift+K or Cmd+Shift+K toggle copilot panel
if ((event.ctrlKey || event.metaKey) && event.shiftKey && event.key === "K") {
event.preventDefault();
copilotStore.togglePanel();
return;
}
// Ctrl+K or Cmd+K open command palette // Ctrl+K or Cmd+K open command palette
if ((event.ctrlKey || event.metaKey) && event.key === "k") { if ((event.ctrlKey || event.metaKey) && event.key === "k") {
event.preventDefault(); event.preventDefault();
@ -421,15 +394,4 @@ onUnmounted(() => {
</script> </script>
<style scoped> <style scoped>
.copilot-slide-enter-active,
.copilot-slide-leave-active {
transition: width 0.3s ease, opacity 0.3s ease;
overflow: hidden;
}
.copilot-slide-enter-from,
.copilot-slide-leave-to {
width: 0px !important;
opacity: 0;
}
</style> </style>

View File

@ -40,7 +40,6 @@ func main() {
application.NewService(wraith.SSH), application.NewService(wraith.SSH),
application.NewService(wraith.SFTP), application.NewService(wraith.SFTP),
application.NewService(wraith.RDP), application.NewService(wraith.RDP),
application.NewService(wraith.AI),
application.NewService(wraith.Updater), application.NewService(wraith.Updater),
}, },
Assets: application.AssetOptions{ Assets: application.AssetOptions{