diff --git a/hive-ag3nt/assets/agent.css b/hive-ag3nt/assets/agent.css index b83c802..a15548c 100644 --- a/hive-ag3nt/assets/agent.css +++ b/hive-ag3nt/assets/agent.css @@ -212,6 +212,27 @@ pre.diff { background: rgba(243, 139, 168, 0.1); box-shadow: 0 0 10px -2px currentColor; } +.btn-new-session { + font-family: inherit; + font-size: 0.8em; + letter-spacing: 0.08em; + background: transparent; + color: var(--amber); + border: 1px solid var(--amber); + border-radius: 999px; + padding: 0.2em 0.8em; + cursor: pointer; + text-shadow: 0 0 4px currentColor; + transition: box-shadow 0.15s ease, background 0.15s ease; +} +.btn-new-session:hover { + background: rgba(250, 179, 135, 0.1); + box-shadow: 0 0 10px -2px currentColor; +} +.btn-new-session:disabled { + opacity: 0.4; + cursor: progress; +} .state-badge { display: inline-block; padding: 0.25em 0.8em; diff --git a/hive-ag3nt/assets/app.js b/hive-ag3nt/assets/app.js index 98ea546..8f786c1 100644 --- a/hive-ag3nt/assets/app.js +++ b/hive-ag3nt/assets/app.js @@ -170,11 +170,12 @@ let termAPI = null; const SLASH_COMMANDS = [ - { name: '/help', desc: 'list slash commands' }, - { name: '/clear', desc: 'wipe the terminal panel (local-only)' }, - { name: '/cancel', desc: 'SIGINT the in-flight claude turn' }, - { name: '/compact', desc: 'compact the persistent claude session' }, - { name: '/model', desc: '/model — switch claude model for future turns' }, + { name: '/help', desc: 'list slash commands' }, + { name: '/clear', desc: 'wipe the terminal panel (local-only)' }, + { name: '/cancel', desc: 'SIGINT the in-flight claude turn' }, + { name: '/compact', desc: 'compact the persistent claude session' }, + { name: '/model', desc: '/model — switch claude model for future turns' }, + { name: '/new-session', desc: 'next turn runs without --continue (fresh claude session)' }, ]; async function postModel(name) { @@ -213,6 +214,7 @@ } const postCancelTurn = () => postSimple('/api/cancel', '/cancel'); const postCompact = () => postSimple('/api/compact', '/compact'); + const postNewSession = () => postSimple('/api/new-session', '/new-session'); function handleSlashCommand(line) { if (!termAPI) return false; @@ -236,6 +238,11 @@ case '/compact': postCompact(); return true; + case '/new-session': + if (window.confirm('arm a fresh claude session for the next turn? all prior --continue context will be dropped.')) { + postNewSession(); + } + return true; case '/model': { const parts = trimmed.split(/\s+/); if (parts.length < 2 || !parts[1]) { @@ -431,6 +438,19 @@ }); })(); + // Wire the new-session button (always visible; arms a one-shot for + // the next turn). Mildly destructive (drops --continue context) so + // we confirm before posting. + (() => { + const btn = $('new-session-btn'); + if (!btn) return; + btn.addEventListener('click', () => { + if (!window.confirm('arm a fresh claude session for the next turn? all prior --continue context will be dropped.')) return; + btn.disabled = true; + postNewSession().finally(() => { btn.disabled = false; }); + }); + })(); + // Track banner activity by reference-counting in-flight turns. A turn // can begin while the previous turn_end is still in the pipeline (rare // but happens on tight wake cycles), so we count rather than toggle. diff --git a/hive-ag3nt/assets/index.html b/hive-ag3nt/assets/index.html index bde7c6a..c1e7ae4 100644 --- a/hive-ag3nt/assets/index.html +++ b/hive-ag3nt/assets/index.html @@ -18,6 +18,8 @@ +