fix(kugetsu): init creates base session in ~/.kugetsu-worktrees and adds context to forked sessions #114

Merged
shoko merged 1 commits from fix/session-context-and-init-worktree into main 2026-04-02 16:35:12 +02:00
Showing only changes of commit 8c639e2928 - Show all commits

View File

@@ -394,6 +394,41 @@ kugetsu_get_pm_context() {
fi 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() { kugetsu_add_notification() {
local type="$1" local type="$1"
local message="$2" local message="$2"
@@ -1088,6 +1123,11 @@ EOF
echo "Created pm-agent env file: $ENV_DIR/pm-agent.env" echo "Created pm-agent env file: $ENV_DIR/pm-agent.env"
fi 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_base=$(get_base_session_id)
local existing_pm=$(get_pm_agent_session_id) local existing_pm=$(get_pm_agent_session_id)
@@ -1107,12 +1147,19 @@ EOF
exit 1 exit 1
fi 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_files=$(ls -A "$PWD" 2>/dev/null | wc -l)
local cwd_git=$(git rev-parse --is-inside-work-tree 2>/dev/null || echo "false") local cwd_git=$(git rev-parse --is-inside-work-tree 2>/dev/null || echo "false")
if [ "$cwd_files" -gt 0 ] || [ "$cwd_git" = "true" ]; then 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 "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 "" >&2
echo "Files in current directory: $cwd_files" >&2 echo "Files in current directory: $cwd_files" >&2
if [ "$cwd_git" = "true" ]; then if [ "$cwd_git" = "true" ]; then
@@ -1258,12 +1305,18 @@ cmd_start() {
> "$fork_log" > "$fork_log"
local fork_context=$(kugetsu_get_fork_context "$issue_ref")
local full_message="${fork_context}
## YOUR TASK
$message"
fix_session_permissions fix_session_permissions
if [ "$DEBUG_MODE" = true ]; then 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 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 fi
local fork_pid=$! local fork_pid=$!