Files
gh-tiboxtibo-custom-claude-…/commands/toduba-interactive.md
2025-11-30 09:01:56 +08:00

13 KiB

allowed-tools, argument-hint, description
allowed-tools argument-hint description
Read
Write
Edit
Bash
Task
[--step-by-step] [--auto-pause] [--verbose] Modalità interattiva con esecuzione step-by-step e controllo utente

Toduba Interactive Mode - Esecuzione Interattiva 🎮

Obiettivo

Fornire un'esecuzione controllata step-by-step con possibilità di pause, resume, undo e controllo completo del flusso.

Argomenti

  • --step-by-step: Richiede conferma ad ogni step
  • --auto-pause: Pausa automatica su warning/error
  • --verbose: Output dettagliato per ogni operazione
  • --checkpoint: Crea checkpoint ad ogni step major

Argomenti ricevuti: $ARGUMENTS

Interactive Session Manager

class InteractiveSession {
  private steps: Step[] = [];
  private currentStep: number = 0;
  private paused: boolean = false;
  private history: StepResult[] = [];
  private checkpoints: Checkpoint[] = [];

  async start(task: Task) {
    console.log('🎮 TODUBA INTERACTIVE MODE');
    console.log('━━━━━━━━━━━━━━━━━━━━━━━━━');
    console.log('');
    console.log('Controls:');
    console.log('  [Enter] - Continue');
    console.log('  [p]     - Pause');
    console.log('  [s]     - Skip step');
    console.log('  [u]     - Undo last');
    console.log('  [r]     - Resume all');
    console.log('  [q]     - Quit');
    console.log('');

    this.initializeSteps(task);
    await this.executeInteractive();
  }
}

Step-by-Step Execution Flow

Visual Progress Display

┌─────────────────────────────────────────────────────────┐
│ 🎮 INTERACTIVE EXECUTION                               │
├─────────────────────────────────────────────────────────┤
│                                                         │
│ Task: Create user authentication API                   │
│ Mode: Step-by-step                                    │
│ Progress: [████████░░░░░░░░] 40% (4/10 steps)        │
│                                                         │
│ ┌─ Current Step ──────────────────────────────────┐   │
│ │ Step 4: Creating user model                     │   │
│ │ Agent: toduba-backend-engineer                  │   │
│ │ Action: Write file models/User.js               │   │
│ │ Status: ⏸️ Awaiting confirmation                │   │
│ └─────────────────────────────────────────────────┘   │
│                                                         │
│ Previous: ✅ Database connection setup              │
│ Next: Create authentication middleware              │
│                                                         │
│ [Enter] Continue | [p] Pause | [u] Undo | [q] Quit   │
└─────────────────────────────────────────────────────────┘

Step Structure

interface Step {
  id: string;
  name: string;
  description: string;
  agent: string;
  action: Action;
  dependencies: string[];
  canUndo: boolean;
  critical: boolean;
  estimatedTime: number;
}

interface Action {
  type: 'create' | 'modify' | 'delete' | 'execute';
  target: string;
  details: any;
}

Interactive Controls Implementation

Pause/Resume System

const handleUserInput = async (input) => {
  switch(input.toLowerCase()) {
    case 'p':
    case 'pause':
      await pauseExecution();
      break;

    case 'r':
    case 'resume':
      await resumeExecution();
      break;

    case 's':
    case 'skip':
      await skipCurrentStep();
      break;

    case 'u':
    case 'undo':
      await undoLastStep();
      break;

    case 'q':
    case 'quit':
      await quitInteractive();
      break;

    case '':
    case 'enter':
      await continueExecution();
      break;

    case 'h':
    case 'help':
      showInteractiveHelp();
      break;

    default:
      console.log('Unknown command. Press [h] for help.');
  }
};

Undo Mechanism

async undoLastStep() {
  if (this.history.length === 0) {
    console.log('❌ No steps to undo');
    return;
  }

  const lastStep = this.history.pop();
  console.log(`↩️ Undoing: ${lastStep.step.name}`);

  // Show what will be undone
  console.log('');
  console.log('This will revert:');
  lastStep.changes.forEach(change => {
    console.log(`  • ${change.type}: ${change.file}`);
  });

  const confirm = await promptUser('Confirm undo? (y/n): ');

  if (confirm === 'y') {
    // Revert changes
    await this.revertStep(lastStep);
    this.currentStep--;
    console.log('✅ Step undone successfully');
  } else {
    this.history.push(lastStep);
    console.log('❌ Undo cancelled');
  }
}

Checkpoint System

class CheckpointManager {
  async createCheckpoint(name: string, metadata: any) {
    const checkpoint = {
      id: `checkpoint-${Date.now()}`,
      name,
      timestamp: new Date(),
      step: this.currentStep,
      files: await this.captureFileState(),
      metadata
    };

    // Save current state
    await this.saveCheckpoint(checkpoint);

    console.log(`💾 Checkpoint created: ${checkpoint.name}`);
    return checkpoint.id;
  }

  async restoreCheckpoint(checkpointId: string) {
    console.log(`🔄 Restoring checkpoint: ${checkpointId}`);

    const checkpoint = await this.loadCheckpoint(checkpointId);

    // Show changes
    console.log('');
    console.log('This will restore to:');
    console.log(`  Step: ${checkpoint.step}`);
    console.log(`  Time: ${checkpoint.timestamp}`);
    console.log(`  Files: ${checkpoint.files.length}`);

    const confirm = await promptUser('Proceed? (y/n): ');

    if (confirm === 'y') {
      await this.applyCheckpoint(checkpoint);
      console.log('✅ Checkpoint restored');
    }
  }
}

Step Details Preview

async previewStep(step: Step) {
  console.clear();
  console.log('┌─────────────────────────────────────────┐');
  console.log('│ 📋 STEP PREVIEW                         │');
  console.log('├─────────────────────────────────────────┤');
  console.log(`│ Step ${step.id}: ${step.name}`);
  console.log('├─────────────────────────────────────────┤');
  console.log('│');
  console.log(`│ Description:`);
  console.log(`│   ${step.description}`);
  console.log('│');
  console.log(`│ Will be executed by:`);
  console.log(`│   🤖 ${step.agent}`);
  console.log('│');
  console.log(`│ Actions to perform:`);

  step.actions.forEach(action => {
    console.log(`│   • ${action.type}: ${action.target}`);
  });

  console.log('│');
  console.log(`│ Estimated time: ${step.estimatedTime}s`);
  console.log('│');

  if (step.critical) {
    console.log('│ ⚠️  CRITICAL STEP - Cannot be skipped');
  }

  console.log('│');
  console.log('└─────────────────────────────────────────┘');
  console.log('');

  return await promptUser('[Enter] Execute | [s] Skip | [m] Modify: ');
}

Breakpoint System

class BreakpointManager {
  private breakpoints: Breakpoint[] = [];

  addBreakpoint(condition: string | Function) {
    this.breakpoints.push({
      id: `bp-${Date.now()}`,
      condition,
      hits: 0
    });
  }

  async checkBreakpoints(context: ExecutionContext) {
    for (const bp of this.breakpoints) {
      if (await this.evaluateBreakpoint(bp, context)) {
        console.log(`🔴 Breakpoint hit: ${bp.id}`);
        await this.handleBreakpoint(bp, context);
      }
    }
  }

  async handleBreakpoint(bp: Breakpoint, context: ExecutionContext) {
    console.log('');
    console.log('━━━ BREAKPOINT ━━━');
    console.log(`Location: ${context.step.name}`);
    console.log(`Condition: ${bp.condition}`);
    console.log(`Hits: ${++bp.hits}`);
    console.log('');

    // Show context
    console.log('Context:');
    console.log(JSON.stringify(context.variables, null, 2));

    // Interactive debugger
    let debugging = true;
    while (debugging) {
      const cmd = await promptUser('debug> ');

      switch(cmd) {
        case 'c':
        case 'continue':
          debugging = false;
          break;

        case 'i':
        case 'inspect':
          await this.inspectContext(context);
          break;

        case 'n':
        case 'next':
          await this.stepOver();
          debugging = false;
          break;

        case 'q':
        case 'quit':
          process.exit(0);
      }
    }
  }
}

Modification Mode

async modifyStep(step: Step) {
  console.log('✏️ MODIFY STEP');
  console.log('━━━━━━━━━━━━━━');
  console.log('');
  console.log('Current configuration:');
  console.log(JSON.stringify(step, null, 2));
  console.log('');
  console.log('What would you like to modify?');
  console.log('1. Change target files');
  console.log('2. Modify parameters');
  console.log('3. Change agent assignment');
  console.log('4. Skip this step');
  console.log('5. Cancel modification');

  const choice = await promptUser('Choice (1-5): ');

  switch(choice) {
    case '1':
      step.action.target = await promptUser('New target: ');
      break;
    case '2':
      await this.modifyParameters(step);
      break;
    case '3':
      step.agent = await this.selectAgent();
      break;
    case '4':
      step.skip = true;
      break;
  }

  console.log('✅ Step modified');
  return step;
}

Watch Mode Integration

class WatchModeIntegration {
  async enableWatchMode() {
    console.log('👁️ Watch mode enabled');
    console.log('Files will be monitored for changes');

    const watcher = chokidar.watch('.', {
      ignored: /node_modules|\.git/,
      persistent: true
    });

    watcher.on('change', async (path) => {
      if (this.isPaused) return;

      console.log(`\n📝 File changed: ${path}`);
      console.log('Options:');
      console.log('[r] Re-run current step');
      console.log('[c] Continue anyway');
      console.log('[p] Pause to investigate');

      const action = await promptUser('Action: ');
      await this.handleFileChange(action, path);
    });
  }
}

Summary Report

## 📊 Interactive Session Summary

**Session ID**: interactive-20241031-145632
**Duration**: 15 minutes 23 seconds
**Mode**: Step-by-step with checkpoints

### Execution Statistics
| Metric | Value |
|--------|-------|
| Total Steps | 10 |
| Completed | 8 |
| Skipped | 1 |
| Undone | 1 |
| Breakpoints Hit | 3 |
| Checkpoints | 4 |

### Step Timeline
  1. Initialize project structure (0:23)
  2. Setup database connection (1:45)
  3. Create user model (2:12)
  4. ↩️ UNDONE: Create auth middleware
  5. Create auth middleware v2 (4:33)
  6. ⏭️ SKIPPED: Add logging
  7. Create API endpoints (6:21)
  8. Add validation (8:45)
  9. Write tests (10:12)
  10. Update documentation (11:54)

### User Interactions
- Pauses: 2
- Modifications: 3
- Undo operations: 1
- Breakpoint inspections: 3

### Files Modified
- Created: 12 files
- Modified: 8 files
- Deleted: 0 files

### Checkpoints Available
1. `checkpoint-1698765392000` - After database setup
2. `checkpoint-1698765512000` - After auth implementation
3. `checkpoint-1698765634000` - After API creation
4. `checkpoint-1698765756000` - Final state

### Recommendations
- Consider automating step 6 (skipped frequently)
- Breakpoint at auth middleware hit multiple times
- Average pause duration: 45 seconds

Quick Commands

During interactive execution:

┌────────────────────────────────┐
│ ⌨️ QUICK COMMANDS             │
├────────────────────────────────┤
│ Enter   - Continue             │
│ p       - Pause                │
│ r       - Resume               │
│ s       - Skip step            │
│ u       - Undo last            │
│ m       - Modify step          │
│ b       - Set breakpoint       │
│ c       - Create checkpoint    │
│ l       - List checkpoints     │
│ i       - Inspect context      │
│ h       - Help                 │
│ q       - Quit                 │
└────────────────────────────────┘