- Added missing <verify> element to Plan 06-05 - Created Plan 06-07 for help system gap - Created Plan 06-08 for exit command gap - Now addresses all 4 gaps identified by checker
156 lines
5.1 KiB
Markdown
156 lines
5.1 KiB
Markdown
---
|
|
phase: 06-cli-interface
|
|
plan: 08
|
|
type: execute
|
|
wave: 1
|
|
depends_on: []
|
|
files_modified: [src/app/__main__.py]
|
|
autonomous: true
|
|
gap_closure: true
|
|
|
|
must_haves:
|
|
truths:
|
|
- "Exit command (/exit, /quit, or Ctrl+D) properly terminates the CLI application"
|
|
artifacts:
|
|
- path: "src/app/__main__.py"
|
|
provides: "CLI exit command handling"
|
|
contains: "exit command implementation with graceful shutdown"
|
|
key_links:
|
|
- from: "src/app/__main__.py"
|
|
to: "exit command"
|
|
via: "CLI command handler for /exit, /quit, and EOF"
|
|
pattern: "def.*exit|/exit|/quit|sys\.exit"
|
|
---
|
|
|
|
<objective>
|
|
Fix CLI exit command to properly terminate the application with graceful shutdown
|
|
|
|
Purpose: Address the gap where exit command doesn't work, leaving users unable to cleanly exit the CLI interface
|
|
Output: Working exit commands (/exit, /quit, Ctrl+D) that properly terminate the CLI application
|
|
</objective>
|
|
|
|
<execution_context>
|
|
@~/.opencode/get-shit-done/workflows/execute-plan.md
|
|
@~/.opencode/get-shit-done/templates/summary.md
|
|
</execution_context>
|
|
|
|
<context>
|
|
@.planning/PROJECT.md
|
|
@.planning/ROADMAP.md
|
|
@.planning/STATE.md
|
|
|
|
# Gap closure context from checker feedback
|
|
# Missing: Exit command doesn't work
|
|
|
|
# Previous CLI command implementations
|
|
@.planning/phases/06-cli-interface/06-01-SUMMARY.md
|
|
@.planning/phases/06-cli-interface/06-02-SUMMARY.md
|
|
@.planning/phases/06-cli-interface/06-04-SUMMARY.md
|
|
</context>
|
|
|
|
<tasks>
|
|
|
|
<task type="auto">
|
|
<name>Fix CLI exit command implementation</name>
|
|
<files>src/app/__main__.py</files>
|
|
<action>
|
|
Fix the exit command functionality in the CLI by implementing proper exit handling:
|
|
|
|
1. **Add exit command detection** - Implement detection for exit commands:
|
|
- Recognize /exit, /quit, and exit commands in CLI input
|
|
- Handle EOF (Ctrl+D) gracefully in the input loop
|
|
- Ensure exit commands are processed before message sending
|
|
|
|
2. **Implement graceful shutdown** - Add proper exit sequence:
|
|
- Save current session before exiting (if applicable)
|
|
- Display a farewell message to the user
|
|
- Clean up any resources or background threads
|
|
- Exit with appropriate status code (0 for clean exit)
|
|
|
|
3. **Handle multiple exit methods** - Support various ways to exit:
|
|
- /exit command - Explicit exit command
|
|
- /quit command - Alternative exit command
|
|
- exit command - Simple exit command
|
|
- Ctrl+D (EOF) - Standard terminal exit
|
|
- Ctrl+C (KeyboardInterrupt) - Emergency exit with cleanup
|
|
|
|
4. **Integrate with existing CLI loop** - Ensure exit handling:
|
|
- Works within the main CLI input loop
|
|
- Doesn't interfere with normal message processing
|
|
- Properly breaks out of nested loops if any
|
|
- Handles exit during any CLI state (conversation, help, etc.)
|
|
|
|
5. **Add exit confirmation (optional)** - Consider adding:
|
|
- Confirmation prompt for unsaved work
|
|
- Warning if there are pending operations
|
|
- Option to cancel exit if needed
|
|
|
|
Gap reason: "Exit command doesn't work"
|
|
Users need a reliable way to exit the CLI application cleanly without forcing termination or hanging.
|
|
</action>
|
|
<verify>
|
|
# Test exit command implementation
|
|
python -c "
|
|
import sys
|
|
sys.path.insert(0, 'src')
|
|
|
|
# Check if exit command logic exists
|
|
with open('src/app/__main__.py', 'r') as f:
|
|
content = f.read()
|
|
|
|
# Look for exit-related patterns
|
|
exit_patterns = [
|
|
'def.*exit',
|
|
'/exit',
|
|
'/quit',
|
|
'sys\\.exit',
|
|
'break',
|
|
'KeyboardInterrupt'
|
|
]
|
|
|
|
found_exit = any(pattern in content for pattern in exit_patterns)
|
|
|
|
if found_exit:
|
|
print('✓ Exit command implementation found')
|
|
else:
|
|
print('✗ Exit command implementation missing')
|
|
exit(1)
|
|
|
|
# Check for graceful shutdown patterns
|
|
if 'farewell' in content.lower() or 'goodbye' in content.lower():
|
|
print('✓ Exit message implementation found')
|
|
else:
|
|
print('⚠ Exit message may be missing')
|
|
"
|
|
</verify>
|
|
<done>
|
|
CLI now has working exit commands (/exit, /quit, Ctrl+D) that properly terminate the application with graceful shutdown and farewell messages
|
|
</done>
|
|
</task>
|
|
|
|
</tasks>
|
|
|
|
<verification>
|
|
Test the exit functionality by:
|
|
1. Start the CLI application
|
|
2. Type /exit and verify the application terminates cleanly
|
|
3. Restart and type /quit to verify alternative exit command works
|
|
4. Restart and press Ctrl+D to verify EOF handling works
|
|
5. Restart and press Ctrl+C to verify interrupt handling works
|
|
6. Verify farewell messages are displayed and session is saved
|
|
|
|
Expected: All exit methods properly terminate the CLI application with clean shutdown and user feedback
|
|
</verification>
|
|
|
|
<success_criteria>
|
|
- /exit command terminates the CLI application cleanly
|
|
- /quit command works as alternative exit method
|
|
- Ctrl+D (EOF) properly exits the application
|
|
- Ctrl+C (KeyboardInterrupt) is handled gracefully
|
|
- Farewell message is displayed before exit
|
|
- Session is saved before exiting (if applicable)
|
|
</success_criteria>
|
|
|
|
<output>
|
|
After completion, create `.planning/phases/06-cli-interface/06-08-SUMMARY.md`
|
|
</output> |