Commit Graph

143 Commits

Author SHA1 Message Date
shokollm
208dadda0e 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 14:37:36 +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
a4915a1da8 Merge pull request 'feat(kugetsu): increase MAX_CONCURRENT_AGENTS from 3 to 5' (#43) from fix/issue-37-agent-limit-5 into main 2026-03-31 14:48:53 +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
faff525bfc Merge pull request 'feat(kugetsu): implement fire-and-forget delegation (#41)' (#42) from feat/issue-41-fire-and-forget-delegation into main 2026-03-31 10:17:20 +02:00
shokollm
da52a4bd9b chore: add .gitignore and remove cached test results
Ignore __pycache__/, results/, and *.pyc files
Remove already tracked test results from git tracking
2026-03-31 08:12: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
f3bd2dca28 Merge pull request 'fix(kugetsu): remove broken session existence check (#38)' (#40) from fix/issue-38-remove-broken-session-check into main 2026-03-31 07:27:38 +02: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
ed58cc9a96 Merge pull request 'fix(kugetsu): use --format json for session existence check (#38)' (#39) from fix/issue-38-session-checking into main 2026-03-31 06:58:39 +02:00
shokollm
bfb8ee045b fix(kugetsu): use --format json for session existence check
Use opencode session list --format json with grep instead of table
output to make check_opencode_session_exists() more reliable.

This fixes issue #38 where forked sessions may not appear in the
table format output, causing false 'session expired' reports.
2026-03-31 04:56:55 +00:00
a3c24e53b9 Merge pull request 'Add parallel capacity test tool for Hermes/OpenCode' (#5) from fix/issue-3-parallel-test into main 2026-03-31 06:28:58 +02:00
shokollm
e2c9ef9ed1 docs: add capacity planning section to README 2026-03-31 04:02:03 +00:00
617702d229 Merge pull request 'docs #4: Document Hermes Communication Patterns' (#23) from docs/issue-4-hermes-communication-patterns into main 2026-03-31 05:50:55 +02:00
shokollm
5bc70dd515 feat(parallel-test): add kugetsu mode, memory limits, and cost tracking 2026-03-31 03:47:38 +00:00
shokollm
905e76e654 docs: use git.example.com as placeholder URL per review 2026-03-31 03:40:59 +00:00
shokollm
94de97ed64 docs: update README status to reflect Phase 3 implementation 2026-03-31 03:32:05 +00:00
shokollm
1092f73255 cleanup: remove unused .hermes/skills/agent-workflows 2026-03-31 03:31:07 +00:00
shokollm
cd16ce19c6 merge: resolve conflicts with main (psutil with fallback, use --dir flag) 2026-03-31 03:29:00 +00:00
shokollm
b22a7da710 security: redact exposed Gitea credentials in documentation 2026-03-31 03:25:34 +00:00
08e40e5396 Merge pull request 'feat(phase3): Full Phase 3 implementation - Chat Agent, PM Agent, and Integration' (#32) from feat/issue-19-phase3 into main 2026-03-31 04:55:21 +02:00
shokollm
9e1ff74330 test(kugetsu): add unit tests for status, delegate, doctor, notify commands
Added 10 new tests:
- kugetsu status (5 tests): uninitialized, base missing, pm-agent missing, Python None handling, session expired
- kugetsu delegate (2 tests): no message, pm-agent missing
- kugetsu doctor (1 test): basic command execution
- kugetsu notify (2 tests): list with no file, clear with no file

Total tests: 38 (all passing)
2026-03-31 02:52:31 +00:00
shokollm
93ebb55f57 refactor: remove obsolete kugetsu-helpers skill
kugetsu-helpers was a shim layer that is no longer needed since:
- kugetsu status replaces check-status
- kugetsu delegate replaces delegate-to-pm
- kugetsu doctor --fix replaces fix-permissions
- kugetsu list/start/continue cover remaining functions

All functionality is now in the kugetsu CLI directly.
2026-03-31 02:48:23 +00:00
shokollm
d35f006ed2 docs: replace git.fbrns.co with git.example.com in documentation
Sensitive URL replaced to prevent accidental exposure.
2026-03-31 02:46:42 +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
bc3cc8dd1e test(kugetsu-helpers): add unit test suite and fix None/null handling
- Add test suite at skills/kugetsu-helpers/tests/test-kugetsu-helpers.sh
- 11 unit tests covering check-status, delegate-to-pm, get-pm-session, etc.
- Fix bug: Python print(None) outputs literal "None" string, not empty
- All tests pass
2026-03-31 00:02:24 +00:00
shokollm
ef1179839d docs(phase3): update status and add testing plan 2026-03-30 23:00:34 +00:00
shokollm
6db33ea786 fix(phase3a): add fix-permissions command to kugetsu-helper
Add kugetsu_fix_pm_permissions function to fix opencode session permissions
for /tmp/kugetsu directory access. This resolves permission issues when
PM agent tries to access worktree directories.

Usage: kugetsu-helper fix-permissions
2026-03-30 15:52:29 +00:00
shokollm
a6bbd969b6 feat(phase3a): update SKILL.md and SOUL.md with stronger routing instructions
- SKILL.md: More explicit about MUST use this skill for delegation
- SOUL.md: Explicitly instruct to invoke /kugetsu-chat skill first
- Add more explicit delegation rules and error handling
2026-03-30 15:06:04 +00:00
shokollm
f8070246c8 feat(phase3a): add strong routing instructions to SOUL.md
- SOUL.md now explicitly instructs Hermes to ALWAYS use kugetsu-helper for delegation
- Clear delegation rules with examples
- Separation of casual conversation vs delegation

This is the first attempt at making Hermes route via kugetsu-helper automatically.
2026-03-30 14:56:31 +00:00
shokollm
2570a04cc6 docs #4: Document Hermes Communication Patterns
- Identify delegate_task() (max 3) vs terminal(opencode run) (no cap)
- Document Gitea as async communication hub
- PM ↔ Coding Agent communication protocols
- Practical examples for each pattern
- Issue state machine and known limitations
2026-03-30 14:38:16 +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
7c94a59bb6 fix(phase3a): separate SOUL.md personality from SKILL.md routing
- SOUL.md: only personality/voice guidance (no routing logic)
- SKILL.md: definitive routing behavior + delegation process
- Add context passing via temp file for long tasks
- Add error handling table with user-friendly messages

This aligns with Hermes docs: SOUL.md = identity, SKILL.md = behavior
2026-03-30 14:20:21 +00:00
shokollm
60181afe6a feat(phase3a): initial Chat Agent infrastructure
Phase 3a implementation - Hermes Chat Agent configuration:

- kugetsu-chat/SOUL.md - Chat Agent persona and routing logic
- kugetsu-chat/SKILL.md - Chat Agent skill documentation
- kugetsu-chat/scripts/setup - Configuration setup script
- kugetsu-pm/SKILL.md - PM Agent skill documentation
- kugetsu-helpers/SKILL.md - Helper tools for Hermes-kugetsu integration
- kugetsu-helpers/scripts/kugetsu-helpers - Shell functions for delegation

Provides:
- Intent classification (small talk, task, status, mode change)
- PM Agent delegation via terminal()
- kugetsu status checking
- Session management helpers
2026-03-30 14:07:43 +00:00
cf18c1db04 Merge pull request 'feat(kugetsu): add git worktree isolation per session' (#22) from feat/issue-19-worktree-per-session into main 2026-03-30 15:58:41 +02: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
202d8ccfbb docs: add Phase 3 chat architecture and overview documentation
- Add docs/kugetsu-chat.md:
  - Model B architecture (separate Chat/PM agents)
  - Session types (chat-agent, pm-agent, pm-agent-{repo}, issue sessions)
  - Hybrid message routing
  - PM Agent modes (notify/silent)
  - Context management (local + Gitea fetch on-demand)
  - Example flows

- Add docs/kugetsu.md:
  - Overview of kugetsu system
  - Quick start guide
  - Links to all documentation

- Update docs/kugetsu-architecture.md:
  - Add Phase 3 architecture section
  - Update success criteria
  - Add Phase 3 design decisions

- Add docs/telegram-setup.md:
  - BotFather bot creation guide
  - Security notes

- Remove ssh-keygen.sh (not needed)
2026-03-30 11:46:12 +00:00
4606c59ce8 Merge pull request 'feat(issue-17): add Tailscale VPN setup for container remote access' (#21) from feat/issue-17-tailscale-setup into main 2026-03-30 08:29:57 +02: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