diff --git a/grid-agent-gui/app.go b/grid-agent-gui/app.go index e878970..0a15d93 100644 --- a/grid-agent-gui/app.go +++ b/grid-agent-gui/app.go @@ -268,6 +268,13 @@ func (a *App) SaveSettings(mnemonics, network, apiKey string) error { return nil } +// ClearSession clears the current agent session/history +func (a *App) ClearSession() error { + return a.initializeAgent(AgentInitOptions{ + ClearHistory: true, + }) +} + // Logout clears settings and returns to onboarding func (a *App) Logout() error { // Keep theme and profiles diff --git a/grid-agent-gui/frontend/src/components/ChatInterface.svelte b/grid-agent-gui/frontend/src/components/ChatInterface.svelte index 7ab12d9..273c4cd 100644 --- a/grid-agent-gui/frontend/src/components/ChatInterface.svelte +++ b/grid-agent-gui/frontend/src/components/ChatInterface.svelte @@ -8,6 +8,7 @@ CheckTfcmdVersion, ApproveToolExecution, RejectToolExecution, + ClearSession, } from "../../wailsjs/go/main/App.js"; import { EventsOn, BrowserOpenURL } from "../../wailsjs/runtime/runtime.js"; import { @@ -34,6 +35,7 @@ let showErrorModal = false; let showSettings = false; let showDocs = false; + let showClearModal = false; let errorMessage = ""; let isExporting = false; let isAborting = false; @@ -275,6 +277,31 @@ errorMessage = ""; } + function handleNewConversation() { + showClearModal = true; + } + + async function startNewConversation() { + showClearModal = false; + try { + await ClearSession(); + } catch (err) { + console.error("Failed to clear session:", err); + } + messagesStore.set([]); + } + + async function saveAndStartNew() { + showClearModal = false; + await handleExport(); + try { + await ClearSession(); + } catch (err) { + console.error("Failed to clear session:", err); + } + messagesStore.set([]); + } + function toggleSettings() { showSettings = !showSettings; } @@ -645,7 +672,7 @@ class="icon-btn" on:click={handleExport} title="Export Conversation" - disabled={isExporting} + disabled={isExporting || $messagesStore.length === 0} > {#if isExporting} {/if} + +{/if} + (showSettings = false)} /> (showDocs = false)} /> @@ -1058,6 +1121,15 @@ background: rgba(239, 68, 68, 0.1); } + .clear-btn { + color: var(--text-secondary); + } + + .clear-btn:hover { + color: var(--error); + background: rgba(239, 68, 68, 0.1); + } + /* Floating Input Area */ .input-area { padding: 1.5rem; diff --git a/grid-agent-gui/frontend/src/components/Docs.svelte b/grid-agent-gui/frontend/src/components/Docs.svelte index 813bf60..f8eaaa1 100644 --- a/grid-agent-gui/frontend/src/components/Docs.svelte +++ b/grid-agent-gui/frontend/src/components/Docs.svelte @@ -191,6 +191,15 @@
  • Version information and active persona
  • Optional AI-generated summary (if enabled)
  • + +
    Starting a New Conversation
    +

    The new conversation button (➕) allows you to reset the current session. Before starting a new conversation, you'll be prompted with options:

    + +

    Note: Previous session history cannot be recovered once cleared, so consider saving important discussions first.

    diff --git a/grid-agent-gui/frontend/wailsjs/go/main/App.d.ts b/grid-agent-gui/frontend/wailsjs/go/main/App.d.ts index d71268c..b2148d7 100755 --- a/grid-agent-gui/frontend/wailsjs/go/main/App.d.ts +++ b/grid-agent-gui/frontend/wailsjs/go/main/App.d.ts @@ -16,6 +16,8 @@ export function CheckForUpdates():Promise; export function CheckTfcmdVersion():Promise; +export function ClearSession():Promise; + export function DeactivateProfile():Promise; export function DeleteProfile(arg1:string):Promise; diff --git a/grid-agent-gui/frontend/wailsjs/go/main/App.js b/grid-agent-gui/frontend/wailsjs/go/main/App.js index 190d599..1ad4803 100755 --- a/grid-agent-gui/frontend/wailsjs/go/main/App.js +++ b/grid-agent-gui/frontend/wailsjs/go/main/App.js @@ -30,6 +30,10 @@ export function CheckTfcmdVersion() { return window['go']['main']['App']['CheckTfcmdVersion'](); } +export function ClearSession() { + return window['go']['main']['App']['ClearSession'](); +} + export function DeactivateProfile() { return window['go']['main']['App']['DeactivateProfile'](); }