Commit Graph

34 Commits

Author SHA1 Message Date
b057d08169 Merge pull request 'fix(pm): strengthen system prompt to prevent direct code writing' (#50) from fix/issue-48-pm-system-prompt into main 2026-03-31 16:42:56 +02:00
shokollm
c70ce1f589 fix(pm): strengthen system prompt to prevent direct code writing
- Add clearer NEVER write code constraint
- Add critical section on HOW to delegate (kugetsu start, NOT kugetsu delegate)
- Add few-shot examples including file creation task
- Updated signature footer to v3

Closes #48
2026-03-31 14:38:53 +00:00
59b8447fc3 Merge pull request 'fix: use sh -c with inline release-slot.sh for fire-and-forget delegation' (#47) from fix/issue-44-release-agent-slot into main 2026-03-31 14:53:13 +02:00
shokollm
6d5e6a7b00 Merge remote-tracking branch 'origin/main' into HEAD
# Conflicts:
#	skills/kugetsu/scripts/kugetsu
2026-03-31 12:35:09 +00:00
shokollm
d1103ab8b0 Merge remote-tracking branch 'origin/main' into fix/issue-44-release-agent-slot
# Conflicts:
#	skills/kugetsu/scripts/kugetsu
2026-03-31 11:12:39 +00:00
shokollm
1c4d076d84 fix: use sh -c with inline release-slot.sh for fire-and-forget delegation
- Changed nohup bash -c (blocked by safety scanner) to nohup sh -c
- Added ensure_dirs to create release-slot.sh inline if missing
- release-slot.sh decoupled from bash functions that don't persist in subshells
- Fixes issue #44: agent count now properly decrements after task completion
2026-03-31 11:05:22 +00:00
shokollm
eed9367f41 fix(kugetsu): source kugetsu in nohup bash subshell
Issue #44: release_agent_slot function not available in sh subshell.
Changed sh to bash and added explicit source of kugetsu script.
2026-03-31 10:04:02 +00:00
shokollm
f3fcbbb817 fix(kugetsu): source kugetsu in nohup subshell so release_agent_slot is available
Issue #44: release_agent_slot function was not available in sh subshell.
Changed sh to bash and added 'source /home/shoko/.local/bin/kugetsu' before
calling release_agent_slot so the function is properly loaded.
2026-03-31 10:03:14 +00:00
shokollm
21d9344c4b feat(kugetsu): increase MAX_CONCURRENT_AGENTS from 3 to 5
Based on testing, 5 concurrent agents provides better throughput
without overwhelming system resources.
2026-03-31 09:45:50 +00:00
shokollm
3c15d8df1d Add concurrent agent limiting to kugetsu CLI
- Add MAX_CONCURRENT_AGENTS (default: 3) to limit concurrent agents
- Implement acquire_agent_slot() and release_agent_slot() with flock
- Wrap cmd_start, cmd_continue, and cmd_delegate with slot management
- cmd_delegate holds slot until background task completes (fire-and-forget + blocking)
- Add basic concurrency tests to test suite
2026-03-31 07:26:00 +00:00
shokollm
dfc87e3da3 feat(kugetsu): implement fire-and-forget delegation
- cmd_delegate now runs in background with nohup + disown
- Output logged to ~/.kugetsu/logs/delegate-<timestamp>.log
- Added cmd_logs to view recent delegation logs
- Log rotation: logs older than 7 days auto-deleted

Issue #41: #41
2026-03-31 06:12:10 +00:00
shokollm
963e0f45f2 fix(kugetsu): remove broken session existence check
The check_opencode_session_exists() function was fundamentally broken
because 'opencode session list' does not include forked sessions,
regardless of output format (table or JSON). This caused false
'session expired' reports even when sessions were fully functional.

Changes:
- Remove session check from cmd_status() - now returns 'ok' if session registered
- Remove session check from cmd_delegate() - let opencode run fail naturally
- Remove warning from cmd_continue() - proceed regardless
- Simplify cmd_doctor() - just show registered sessions
- Update test to reflect new behavior

Issue #38: #38
2026-03-31 05:23:39 +00:00
shokollm
bc40c4f500 refactor: restructure PM role under skills/kugetsu/pm/
### Changes:

1. **Moved kugetsu-pm to skills/kugetsu/pm/SKILL.md**
   - Simplified to 79 lines (under 100 line target)
   - kugetsu v3.0 with essential PM role definition
   - PM context injected at init/start/continue time

2. **Updated kugetsu_get_pm_context()**
   - Now reads from ~/.kugetsu/pm-agent.md (user custom) first
   - Falls back to skills/kugetsu/pm/SKILL.md (default)

3. **Updated kugetsu-chat v4.0**
   - Added notification checking on status/update queries
   - When user asks "status?", "any updates?", etc., check kugetsu notify list
   - Hybrid approach: PM includes notifications + kugetsu-chat checks on status

4. **Removed old skills/kugetsu-pm/SKILL.md**
   - Replaced by skills/kugetsu/pm/SKILL.md

### Structure:
skills/kugetsu/
├── SKILL.md
├── scripts/kugetsu
├── chat/           # future: kugetsu-chat could move here
│   ├── SKILL.md
│   └── SOUL.md
└── pm/
    └── SKILL.md    # PM role definition (v3.0)
2026-03-31 02:38:41 +00:00
shokollm
3d00ddbc1b feat(phase3): add notification system and kugetsu notify command
Phase 3c implementation - Notification System:

### New kugetsu commands:
- `kugetsu notify list` - Show unread notifications from PM Agent
- `kugetsu notify clear` - Mark notifications as read

### Notification system:
- PM Agent writes task events to ~/.kugetsu/notifications.json
- Events: task_complete, task_blocked, task_assigned
- Supports issue_ref and gitea_url for linking
- Hermes/Chat Agent reads notifications on user messages

### kugetsu-pm v2.0:
- Updated documentation with notification behavior
- PM Agent monitors Gitea for task completion
- Two review modes: PM reviews immediately OR asks dev if ready
- Notification triggers documented

### File renamed:
- phase3a-setup.md → kugetsu-chat-setup.md (more descriptive)

### Hermes gateway analysis:
- Gateway is a client (connects to Telegram), not a server
- Cannot push messages directly to Telegram from external process
- Notifications stored locally for Hermes to pick up on next user message
2026-03-31 02:19:50 +00:00
shokollm
b3171ed632 feat(kugetsu): add status, delegate, doctor commands; inject PM context at init
This commit implements Phase 3b/3c architectural improvements:

### New kugetsu CLI commands:
- `kugetsu status` - Check initialization status (replaces kugetsu-helper check-status)
- `kugetsu delegate <msg>` - Send message to PM agent (new command)
- `kugetsu doctor [--fix]` - Diagnose and fix kugetsu issues

### PM Context Injection:
- kugetsu init now reads ~/.kugetsu/pm-agent.md (if exists) and injects
  it into the PM agent session at creation time
- PM context is loaded ONCE at init, not on every delegation
- This improves efficiency - kugetsu-pm content read once, not 10 times

### kugetsu-chat updated:
- Now uses `kugetsu delegate` instead of kugetsu-helper
- Now uses `kugetsu status` instead of kugetsu-helper check-status
- Simplified - no longer depends on kugetsu-helpers

### kugetsu continue:
- Removed strict issue-ref format validation
- Now accepts any session name that is tracked in index.json["issues"]
- Issue-ref format is a guideline, not a hard requirement

### Documentation updated:
- phase3a-setup.md - Updated to reflect new kugetsu commands
- kugetsu-install.sh - Simplified Phase 3a setup instructions

### Breaking changes:
- kugetsu-helpers is no longer required for Phase 3a Chat Agent
- kugetsu-chat skill v3.0 now requires kugetsu CLI with new commands
2026-03-31 01:09:12 +00:00
shokollm
227ec3a22e docs: add Phase 3a installation guide and update install script
- docs/phase3a-setup.md - Complete installation guide for Phase 3a
- skills/kugetsu/scripts/kugetsu-install.sh - Updated to reflect v2.2 changes
2026-03-30 14:25:22 +00:00
shokollm
3e12809095 fix(kugetsu): fix worktree name dash inconsistency and add worktree tests
- Fix issue_ref_to_worktree_name: use single dash for # like filename does
- Add tests for: pm-agent in index, destroy --pm-agent, worktree_path in session
- Add tests for: prune detects/removes orphaned worktrees, destroy removes worktree
- Add tests for: session file v2.2 format with worktree_path

All 28 tests pass.
2026-03-30 13:52:28 +00:00
shokollm
cf809688cf feat(kugetsu): add git worktree isolation per session
- Each issue session gets isolated git worktree to prevent workspace conflicts
- Worktree created on 'kugetsu start', removed on 'kugetsu destroy'
- Worktree path: ~/.kugetsu/worktrees/{sanitized-issue-ref}/
- Branch naming: fix/issue-{number} or fix/{identifier}
- Worktree always recreated on start (guaranteed clean state)
- 'kugetsu list' now shows worktree path
- 'kugetsu prune' also cleans orphaned worktrees
- 'kugetsu continue' runs opencode with --workdir pointing to worktree
- Update SKILL.md to v2.2 with worktree documentation

Part of issue #19 Phase 3 implementation
2026-03-30 13:45:10 +00:00
shokollm
12ad4eb3b7 feat(kugetsu): auto-create pm-agent session during init
- kugetsu init now creates both base and pm-agent sessions
- kugetsu start checks for pm-agent existence, errors if missing
- Add kugetsu destroy --pm-agent command
- Update list to show pm-agent session
- Update prune to preserve pm-agent.json
- Update SKILL.md documentation to v2.1

Part of issue #19 Phase 3 implementation
2026-03-30 13:10:47 +00:00
shokollm
c2dbb6fa8f fix(tailscale-setup): use manual repo file for Fedora due to GPG key 404
The Tailscale GPG key URL returns 404 on some systems. Creating
the repo file manually with gpgcheck=0 as a workaround.
2026-03-30 06:21:40 +00:00
shokollm
1b5cd56e66 feat(issue-17): add Tailscale VPN setup script and documentation
- Add tailscale-setup.sh:
  - Multi-distro support (Debian/Ubuntu, Fedora)
  - Automatic OS detection
  - Systemd integration for tailscaled daemon
  - User choice: AUTHKEY or headless browser login
  - Configurable device name (defaults to hostname)
  - Verification steps after setup

- Update SKILL.md:
  - Add Tailscale VPN section under Remote Access
  - Document benefits and setup commands
  - Link to full documentation

- Update docs/kugetsu-setup.md:
  - Add Tailscale section before Security Notes
  - Compare Tailscale vs port forwarding
  - Document authentication methods
  - Add post-setup usage examples
  - Include uninstall instructions
2026-03-30 05:14:17 +00:00
shokollm
3c92a12f28 feat(sshd-setup): multi-distro support and verification steps
- sshd-setup.sh: Auto-detect OS (Debian/Ubuntu/Fedora/RHEL/CentOS)
- Use appropriate package manager (apt-get vs dnf)
- Add verification steps after each major phase
- Exit with error if sshd installation fails
- Exit with error if sshd doesn't start successfully
- Add troubleshooting section in output

- kugetsu-install.sh: Add verification that kugetsu binary exists

- kugetsu-setup.md: Document multi-distro installation commands
2026-03-30 04:27:23 +00:00
shokollm
1e2d88d811 docs(kugetsu): add SSH remote access section to SKILL.md
- Add 'Remote Access via SSH (Optional)' section
- Documents automated sshd-setup.sh usage
- Explains what the setup does
- Shows remote usage examples
- Links to full docs/kugetsu-setup.md for host-side configuration
2026-03-30 03:42:13 +00:00
shokollm
7fb9b9c581 feat(issue-11): add SSH setup script and kugetsu-setup documentation
- Add sshd-setup.sh: automated SSH setup inside container
  - Checks for systemd prerequisite
  - Creates non-root user (configurable via argument, fallback to 'kugetsu')
  - Configures sshd for key-only authentication
  - Configures passwordless sudo for the user
  - Enables and starts sshd via systemd
- Add docs/kugetsu-setup.md: unified setup documentation
  - Container setup (Incus, Docker)
  - SSH setup (automated + manual steps)
  - Host-side port forwarding (Incus, firewall)
  - kugetsu installation
  - Usage guide
  - Remote access via SSH
2026-03-30 03:37:07 +00:00
shokollm
b422b33aa6 fix(kugetsu): use before/after session list to detect forked session
Compare session list before and after fork to reliably detect which
session is the newly created one. Avoids relying on parsing output
that may not contain session ID.
2026-03-29 20:25:41 +00:00
shokollm
636a41f41b fix(kugetsu): create session file before opencode fork
Create placeholder session file and add to index BEFORE running
opencode. This ensures we have a record even if opencode takes
long time or times out. Update with real session ID after fork.
2026-03-29 20:19:38 +00:00
shokollm
c51a886aa6 fix(kugetsu): capture forked session ID from opencode output
The --fork flag outputs the new session ID. Parse that instead of
relying on session list which may return wrong session when multiple
exist. Added fallback to session list parsing.
2026-03-29 20:16:51 +00:00
shokollm
f2ab637d1f fix(kugetsu): update install script with new commands 2026-03-29 20:00:17 +00:00
shokollm
e014d7bfb9 fix(kugetsu): fix bash substitution error in cmd_start
The function call inside ${} syntax was invalid. Changed to use
command substitution $(...) instead.
2026-03-29 19:53:42 +00:00
shokollm
7146e3bd92 feat(kugetsu): implement issue-driven session management
- Add kugetsu init to create base session via TUI
- Add kugetsu start/continue for issue-based task handling
- Add kugetsu list/prune/destroy for session lifecycle
- Implement directory files + index.json storage pattern
- Use issue ref format: instance/user/repo#number
- Fork from base session enables headless operation

Solves: opencode headless CLI limitation discovered in issue #14
2026-03-29 19:51:51 +00:00
shokollm
e397a64d27 feat(kugetsu): add --debug flag for real-time output capture
- Add --debug flag to start/resume for verbose opencode output
- Use stdbuf -oL to unbuffer stdout for real-time display
- Capture debug logs to ~/.kugetsu/sessions/<id>/debug.log
- Add --debug to stop/destroy for viewing logs before actions
- Position-agnostic flag parsing (--debug can appear anywhere in args)
2026-03-29 16:23:10 +00:00
shokollm
dd9a444920 feat: add destroy command and session_id validation
- Add destroy subcommand for deleting sessions
- Add destroy --all for fresh start with confirmation
- Add -y flag to skip confirmation prompts
- Add validate_session_id() to reject empty session_ids
- Remove misleading force resume error message
- Update SKILL.md to v1.1 with destroy documentation
2026-03-29 14:34:56 +00:00
shokollm
b992949314 fix: resolve test failures - all 12 tests pass
- Fix bash pipe/exit status issue with set -euo pipefail
- Change from: if ! cmd | grep -q pattern
- Change to: OUTPUT=$(cmd || true); if echo "$OUTPUT" | grep -q pattern
- Add test isolation cleanup (rm specific session, not all)
- Add 'Using provided message:' output to kugetsu resume
- Fix grep pattern: 'cannot be resumed' not 'not resumable'
2026-03-29 14:10:45 +00:00
shokollm
7edb54cd3f feat: add kugetsu session manager skill
- skills/kugetsu/SKILL.md: Agent skill documentation following agentskills.io spec
- skills/kugetsu/scripts/kugetsu: Shell wrapper for opencode session management
  - Commands: start, list [--all], resume, stop, help
  - State tracking: used → idle (graceful) or left (interrupted)
  - Auto-fill message on resume
  - Confirmation prompt when resuming used session
- skills/kugetsu/scripts/kugetsu-install.sh: Installation script for users

Implements Phase 1 of issue #11 - basic session management layer
for remote agent control without Hermes dependency.
2026-03-29 10:50:14 +00:00