feat(FN-1368): add milestone and slice interview sessions

- Create milestone-slice-interview.ts module for AI-guided milestone/slice planning
- Add interview session types (milestone_interview, slice_interview) to AiSessionStore
- Wire up server rehydration and automatic session cleanup
- Add milestone/slice interview routes to mission router with SSE streaming
- Extend MissionStore to persist planningNotes and verification fields
- Add comprehensive tests for milestone-slice interview engine
This commit is contained in:
gsxdsm
2026-04-10 02:06:23 -07:00
parent 925bb2c43b
commit fb8e77290b
9 changed files with 2833 additions and 5 deletions

View File

@@ -35,6 +35,10 @@ import {
setAiSessionStore as setMissionAiSessionStore,
rehydrateFromStore as rehydrateMissionSessions,
} from "./mission-interview.js";
import {
setAiSessionStore as setMilestoneSliceAiSessionStore,
rehydrateFromStore as rehydrateMilestoneSliceSessions,
} from "./milestone-slice-interview.js";
import { ChatManager } from "./chat.js";
const __dirname = dirname(fileURLToPath(import.meta.url));
@@ -379,15 +383,17 @@ export function createServer(store: TaskStore, options?: ServerOptions): ReturnT
setPlanningAiSessionStore(aiSessionStore);
setSubtaskAiSessionStore(aiSessionStore);
setMissionAiSessionStore(aiSessionStore);
setMilestoneSliceAiSessionStore(aiSessionStore);
const planningRehydratedCount = rehydratePlanningSessions(aiSessionStore);
const subtaskRehydratedCount = rehydrateSubtaskSessions(aiSessionStore);
const missionRehydratedCount = rehydrateMissionSessions(aiSessionStore);
const milestoneSliceRehydratedCount = rehydrateMilestoneSliceSessions(aiSessionStore);
const totalRehydrated =
planningRehydratedCount + subtaskRehydratedCount + missionRehydratedCount;
planningRehydratedCount + subtaskRehydratedCount + missionRehydratedCount + milestoneSliceRehydratedCount;
if (totalRehydrated > 0) {
console.log(
`[server] Rehydrated ${planningRehydratedCount} planning, ${subtaskRehydratedCount} subtask, ${missionRehydratedCount} mission sessions from SQLite`,
`[server] Rehydrated ${planningRehydratedCount} planning, ${subtaskRehydratedCount} subtask, ${missionRehydratedCount} mission, ${milestoneSliceRehydratedCount} milestone/slice sessions from SQLite`,
);
}