From 8c639e2928787cffcaed697068fef4f2a687cb21 Mon Sep 17 00:00:00 2001 From: shokollm <270575765+shokollm@users.noreply.github.com> Date: Thu, 2 Apr 2026 14:29:16 +0000 Subject: [PATCH] fix(kugetsu): init creates base session in ~/.kugetsu-worktrees, adds context to forked sessions, and clears logs 1. Init: cd to ~/.kugetsu-worktrees before creating base session This keeps all worktrees inside a predictable directory structure and avoids external_directory permission issues 2. Init: Clear old logs but keep repos.json, config, and env files 3. Fork context: Add kugetsu_get_fork_context() that provides: - Important working rules (stop on error, don't pivot) - Repository configuration from repos.json - Environment file location info 4. Fork message: Prepend context to user message when forking session --- skills/kugetsu/scripts/kugetsu | 63 +++++++++++++++++++++++++++++++--- 1 file changed, 58 insertions(+), 5 deletions(-) diff --git a/skills/kugetsu/scripts/kugetsu b/skills/kugetsu/scripts/kugetsu index dfe422d..b51f3af 100755 --- a/skills/kugetsu/scripts/kugetsu +++ b/skills/kugetsu/scripts/kugetsu @@ -394,6 +394,41 @@ kugetsu_get_pm_context() { fi } +kugetsu_get_fork_context() { + local issue_ref="$1" + local context="" + + context="## IMPORTANT WORKING RULES + +1. You are working on issue: $issue_ref +2. If you encounter ANY error, blocker, or cannot complete the task: + - STOP immediately + - Log what happened and why you cannot proceed + - Do NOT switch to other work or try alternative approaches +3. Do NOT work on other issues or PRs unless explicitly asked +4. Environment variables are available in ~/.kugetsu/env/ + +" + + if [ -f "$REPOS_CONFIG" ]; then + context="${context} +## REPOSITORIES CONFIG +$(cat "$REPOS_CONFIG") + +" + fi + + if [ -f "$ENV_DIR/default.env" ]; then + context="${context} +## ENVIRONMENT (available at ~/.kugetsu/env/) +Environment file exists at: $ENV_DIR/default.env +Source it with: source ~/.kugetsu/env/default.env +" + fi + + echo "$context" +} + kugetsu_add_notification() { local type="$1" local message="$2" @@ -1088,6 +1123,11 @@ EOF echo "Created pm-agent env file: $ENV_DIR/pm-agent.env" fi + if [ -d "$LOGS_DIR" ]; then + echo "Cleaning up old logs..." + rm -rf "$LOGS_DIR"/*.log 2>/dev/null || true + fi + local existing_base=$(get_base_session_id) local existing_pm=$(get_pm_agent_session_id) @@ -1107,12 +1147,19 @@ EOF exit 1 fi + local init_worktree_dir="$HOME/.kugetsu-worktrees" + mkdir -p "$init_worktree_dir" + cd "$init_worktree_dir" + echo "Initialized kugetsu worktrees directory: $init_worktree_dir" + echo "Base session will be created in this directory." + echo "" + local cwd_files=$(ls -A "$PWD" 2>/dev/null | wc -l) local cwd_git=$(git rev-parse --is-inside-work-tree 2>/dev/null || echo "false") if [ "$cwd_files" -gt 0 ] || [ "$cwd_git" = "true" ]; then - echo "Warning: Current directory is not empty: $PWD" >&2 + echo "Warning: Worktrees directory is not empty: $PWD" >&2 echo "This may cause project context to contaminate the base session." >&2 - echo "Consider running kugetsu init from an empty directory." >&2 + echo "Consider running kugetsu destroy --base -y and reinitializing." >&2 echo "" >&2 echo "Files in current directory: $cwd_files" >&2 if [ "$cwd_git" = "true" ]; then @@ -1257,13 +1304,19 @@ cmd_start() { local opencode_db="${OPENCODE_DB:-$HOME/.local/share/opencode/opencode.db}" > "$fork_log" - + + local fork_context=$(kugetsu_get_fork_context "$issue_ref") + local full_message="${fork_context} + +## YOUR TASK +$message" + fix_session_permissions if [ "$DEBUG_MODE" = true ]; then - (cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) | tee "$fork_log" & + (cd "$worktree_path" && opencode run "$full_message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) | tee "$fork_log" & else - (cd "$worktree_path" && opencode run "$message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) >> "$fork_log" & + (cd "$worktree_path" && opencode run "$full_message" --fork --session "$base_session_id" --dir "$worktree_path" 2>&1) >> "$fork_log" & fi local fork_pid=$! -- 2.49.1