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

@@ -147,6 +147,8 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
orderIndex: row.orderIndex,
interviewState: row.interviewState as InterviewState,
dependencies: fromJson<string[]>(row.dependencies) || [],
planningNotes: row.planningNotes || undefined,
verification: row.verification || undefined,
createdAt: row.createdAt,
updatedAt: row.updatedAt,
};
@@ -165,6 +167,8 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
orderIndex: row.orderIndex,
activatedAt: row.activatedAt || undefined,
planState: (row.planState as SlicePlanState) || "not_started",
planningNotes: row.planningNotes || undefined,
verification: row.verification || undefined,
createdAt: row.createdAt,
updatedAt: row.updatedAt,
};
@@ -959,6 +963,8 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
orderIndex = ?,
interviewState = ?,
dependencies = ?,
planningNotes = ?,
verification = ?,
updatedAt = ?
WHERE id = ?
`).run(
@@ -968,6 +974,8 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
updated.orderIndex,
updated.interviewState,
toJson(updated.dependencies),
updated.planningNotes ?? null,
updated.verification ?? null,
updated.updatedAt,
updated.id,
);
@@ -1159,6 +1167,9 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
status = ?,
orderIndex = ?,
activatedAt = ?,
planState = ?,
planningNotes = ?,
verification = ?,
updatedAt = ?
WHERE id = ?
`).run(
@@ -1167,6 +1178,9 @@ export class MissionStore extends EventEmitter<MissionStoreEvents> {
updated.status,
updated.orderIndex,
updated.activatedAt ?? null,
updated.planState,
updated.planningNotes ?? null,
updated.verification ?? null,
updated.updatedAt,
updated.id,
);