mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
feat: add git worktree session support with improved UI
Implement comprehensive worktree session support allowing users to spawn sessions in temporary git worktrees. Includes backend worktree management, full-stack integration, and refined UI for session type selection. Backend: - Add worktree creation/removal utilities with branch management - Track worktree metadata (basePath, branch, name, path) in session metadata - Automatic cleanup of worktrees when sessions fail or exit - Enhanced error handling with stderr tail logging UI improvements: - Redesign session type toggle with improved alignment and spacing - Move worktree description inline with label for cleaner layout - Add branch name input field that appears when worktree mode selected - Auto-focus on worktree input when switching modes - Reduce gap between radio options from gap-3 to gap-1.5 - Update descriptive text and placeholders for clarity Integration: - Thread worktree parameters through API client, RPC handlers, and daemon - Add worktreeEnv utility to read worktree info from environment - Update session spawning to support both simple and worktree modes
This commit is contained in:
@@ -24,6 +24,7 @@ import { registerKillSessionHandler } from './registerKillSessionHandler';
|
||||
import { runtimePath } from '../projectPath';
|
||||
import { resolve } from 'node:path';
|
||||
import type { Session } from './session';
|
||||
import { readWorktreeEnv } from '@/utils/worktreeEnv';
|
||||
|
||||
export interface StartOptions {
|
||||
model?: string
|
||||
@@ -73,6 +74,7 @@ export async function runClaude(options: StartOptions = {}): Promise<void> {
|
||||
metadata: initialMachineMetadata
|
||||
});
|
||||
|
||||
const worktreeInfo = readWorktreeEnv();
|
||||
let metadata: Metadata = {
|
||||
path: workingDirectory,
|
||||
host: os.hostname(),
|
||||
@@ -89,7 +91,8 @@ export async function runClaude(options: StartOptions = {}): Promise<void> {
|
||||
// Initialize lifecycle state
|
||||
lifecycleState: 'running',
|
||||
lifecycleStateSince: Date.now(),
|
||||
flavor: 'claude'
|
||||
flavor: 'claude',
|
||||
worktree: worktreeInfo ?? undefined
|
||||
};
|
||||
const response = await api.getOrCreateSession({ tag: sessionTag, metadata, state });
|
||||
logger.debug(`Session created: ${response.id}`);
|
||||
|
||||
Reference in New Issue
Block a user