aios-core
Version:
Synkra AIOS: AI-Orchestrated System for Full Stack Development - Core Framework
193 lines (148 loc) • 4.28 kB
Markdown
# Session Resume Task
**Story:** 11.5 - Session State Persistence
**Version:** 1.0.0
## Purpose
Handle session resume when Bob detects an existing `.session-state.yaml` file.
Presents options to the user and executes the selected action.
## Task Definition
```yaml
task: sessionResume
responsible: Bob (pm.md)
atomic_layer: Organism
inputs:
- field: projectRoot
type: string
required: true
description: Project root directory
outputs:
- field: action
type: string
description: Selected action (continue|review|restart|discard)
- field: storyPath
type: string
description: Path to story to continue (if applicable)
```
## Execution Steps
### Step 1: Load Session State
```javascript
const { loadSessionState } = require('.aios-core/core/orchestration');
const sessionState = await loadSessionState(projectRoot);
if (!sessionState) {
return { action: 'no_session', message: 'No session state found' };
}
```
### Step 2: Check for Crash
```javascript
const { SessionState } = require('.aios-core/core/orchestration');
const manager = new SessionState(projectRoot);
await manager.loadSessionState();
const crashResult = await manager.detectCrash();
if (crashResult.isCrash) {
console.log(`⚠️ Possível crash detectado!`);
console.log(` Última atualização: ${crashResult.minutesSinceUpdate} minutos atrás`);
console.log(` Última ação: ${crashResult.lastActionType}`);
console.log(` Fase: ${crashResult.lastPhase}`);
}
```
### Step 3: Present Resume Summary
```javascript
const summary = manager.getResumeSummary();
console.log(summary);
```
**Expected Output:**
```
🔄 Sessão anterior detectada!
Epic: Projeto Bob — Interface Única e Orquestração
Progresso: 2 de 6 stories completas
Último story: 11.3 (Development Cycle Workflow)
Fase quando pausou: Implementação
O que você quer fazer?
[1] Continuar de onde parou
[2] Revisar o que foi feito
[3] Recomeçar story 11.3 do zero
[4] Iniciar novo épico (descarta sessão)
```
### Step 4: Elicit User Choice
```yaml
elicit: true
type: select
options:
- value: continue
label: "[1] Continuar de onde parou"
- value: review
label: "[2] Revisar o que foi feito"
- value: restart
label: "[3] Recomeçar story do zero"
- value: discard
label: "[4] Iniciar novo épico"
```
### Step 5: Execute Selected Action
```javascript
const { ResumeOption } = require('.aios-core/core/orchestration');
const result = await manager.handleResumeOption(selectedOption);
switch (result.action) {
case 'continue':
// Resume from last state
return {
action: 'continue',
storyPath: result.story,
phase: result.phase,
message: `Continuando story ${result.story} da fase ${result.phase}`,
};
case 'review':
// Show progress summary
const summary = result.summary;
console.log('\n📊 Resumo do Progresso:\n');
console.log(`Epic: ${summary.epic.title}`);
console.log(`Progresso: ${summary.progress.percentage}%`);
console.log(`Stories completas: ${summary.progress.storiesDone.join(', ')}`);
console.log(`Stories pendentes: ${summary.progress.storiesPending.join(', ')}`);
// Re-prompt after review
break;
case 'restart':
return {
action: 'restart',
storyPath: result.story,
message: `Recomeçando story ${result.story} do início`,
};
case 'discard':
return {
action: 'discard',
message: 'Sessão descartada. Pronto para novo épico.',
};
}
```
## Integration with pm.md
This task should be called from `pm.md` during greeting when session state is detected:
```yaml
# In pm.md greeting-builder integration
on_activation:
- check: sessionStateExists(projectRoot)
if_true:
- execute: session-resume.md
- use_result: to determine workflow continuation
```
## Error Handling
| Error | Recovery |
|-------|----------|
| Corrupted state file | Offer to discard and start fresh |
| Invalid YAML | Parse error with file path, offer discard |
| Missing required fields | Warn and offer partial recovery |
## Metadata
```yaml
story: 11.5
version: 1.0.0
dependencies:
- session-state.js
tags:
- session
- resume
- orchestration
updated_at: 2026-02-05
```