케이스 이어하기 UI와 공통 탭·이미지 복구를 반영

This commit is contained in:
Yun Chan 2026-09-01 11:45:23 +09:00
parent 72353ecd82
commit f1b80676c1
38 changed files with 3581 additions and 455 deletions

View file

@ -728,7 +728,8 @@ export interface paths {
* @description 회기 전체 deep-loop 재평가(슈퍼바이저 rationale/critique + 개선점 + 대안발화).
*
* 저장된 마스킹 축어록을 evaluator.evaluate_session 으로 평가한다.
* 엔진 장애는 503 으로 변환(평가는 비치명적이지만 트리거는 사용자 명시 요청이라 에러 노출).
* 엔진 장애는 503으로 변환한다. provider 예외 원문은 durable 기록에만 남기고 HTTP에는
* 안전한 안내만 반환한다.
*/
post: operations["reevaluate_session_eval_sessions__session_id__reevaluate_post"];
delete?: never;
@ -1667,6 +1668,46 @@ export interface paths {
patch?: never;
trace?: never;
};
"/sessions/cases": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* List Learner Cases
* @description Return complete case-local progress for one NPC, not a capped history slice.
*/
get: operations["list_learner_cases_sessions_cases_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/sessions/cases/{case_id}/memory": {
parameters: {
query?: never;
header?: never;
path?: never;
cookie?: never;
};
/**
* Get Learner Case Memory Preview
* @description Load only the learner-safe compact memory when its foldout is opened.
*/
get: operations["get_learner_case_memory_preview_sessions_cases__case_id__memory_get"];
put?: never;
post?: never;
delete?: never;
options?: never;
head?: never;
patch?: never;
trace?: never;
};
"/sessions/dashboard": {
parameters: {
query?: never;
@ -4083,6 +4124,61 @@ export interface components {
/** Transfer Suites */
transfer_suites: components["schemas"]["TransferSuiteItem"][];
};
/**
* CaseMemoryPreview
* @description 접힌 learner UI에만 쓰는 최소·마스킹된 사례 기억 투영.
*/
CaseMemoryPreview: {
/** Case Digest */
case_digest?: string | null;
/** Case Id */
case_id: string;
/** Latest Session Digest */
latest_session_digest?: string | null;
/**
* Memory Available
* @default false
*/
memory_available: boolean;
/** Open Threads */
open_threads?: string[];
/** Pinned Facts */
pinned_facts?: string[];
};
/**
* CaseProgressStats
* @description 한 사례 안에서만 누적한 learner-visible 진행 수치.
*/
CaseProgressStats: {
/** Active Session Id */
active_session_id?: string | null;
/** Active Session No */
active_session_no?: number | null;
/** Active Started At */
active_started_at?: string | null;
/**
* Completed Sessions
* @default 0
*/
completed_sessions: number;
/** Last Activity At */
last_activity_at?: string | null;
/**
* Total Duration Seconds
* @default 0
*/
total_duration_seconds: number;
/**
* Total Sessions
* @default 0
*/
total_sessions: number;
/**
* Total Turns
* @default 0
*/
total_turns: number;
};
/** CatalogEntryView */
CatalogEntryView: {
/** Catalog Entry Id */
@ -5106,7 +5202,7 @@ export interface components {
};
/**
* EvaluationSummary
* @description 회기 평가 조회 응답(분포 + deep 결과 합본).
* @description 회기 평가 조회 응답(분포 + deep 결과 합본, provider 오류 원문 제외).
*/
EvaluationSummary: {
/** Deep */
@ -5120,6 +5216,7 @@ export interface components {
durable: boolean;
/** Error */
error?: string | null;
failure?: components["schemas"]["ReviewEvaluationFailure"] | null;
/** Session Id */
session_id: string;
/** Stage */
@ -5843,6 +5940,33 @@ export interface components {
/** Uncertainty */
uncertainty: number;
};
/** LearnerCaseListResponse */
LearnerCaseListResponse: {
/** Cases */
cases?: components["schemas"]["LearnerCaseSummary"][];
/**
* Source
* @default database
* @constant
* @enum {string}
*/
source: "database";
};
/** LearnerCaseSummary */
LearnerCaseSummary: {
/** Case Id */
case_id: string;
/**
* Last Session No
* @default 0
*/
last_session_no: number;
/** Persona Code */
persona_code: string;
/** Persona Name */
persona_name: string;
progress?: components["schemas"]["CaseProgressStats"];
};
/** LearnerDashboardAchievement */
LearnerDashboardAchievement: {
/** Detail */
@ -6117,6 +6241,11 @@ export interface components {
archived: boolean;
/** Archived At */
archived_at?: string | null;
/**
* Case Id
* @default
*/
case_id: string;
/** Client Turn Count */
client_turn_count: number;
/** Ended At */
@ -8899,6 +9028,19 @@ export interface components {
/** Persona */
persona: string;
};
/**
* ReviewEvaluationFailure
* @description 교수자용 deep-loop 실패 분류. 원문 예외·축어록은 절대 응답에 넣지 않는다.
*/
ReviewEvaluationFailure: {
/**
* Code
* @enum {string}
*/
code: "timeout" | "engine_unavailable" | "legacy_argv_limit" | "prompt_too_large" | "invalid_structured_output" | "missing_evaluation" | "unknown";
/** Retryable */
retryable: boolean;
};
/** ReviewFirstSessionChecklist */
ReviewFirstSessionChecklist: {
/**
@ -9546,6 +9688,7 @@ export interface components {
durationLabel: string;
/** Durationseconds */
durationSeconds: number;
evaluationFailure?: components["schemas"]["ReviewEvaluationFailure"] | null;
firstSessionChecklist?: components["schemas"]["ReviewFirstSessionChecklist"] | null;
/** Goodmoments */
goodMoments?: components["schemas"]["ReviewPoint"][];
@ -9640,6 +9783,8 @@ export interface components {
};
/** SessionStartRequest */
SessionStartRequest: {
/** Case Id */
case_id?: string | null;
/** Goal Stages */
goal_stages?: ("라포" | "탐색" | "개입" | "정리")[];
/**
@ -9647,6 +9792,12 @@ export interface components {
* @example P1
*/
persona_code: string;
/**
* Start Mode
* @default continue
* @enum {string}
*/
start_mode: "continue" | "fresh";
/**
* Theory Mode
* @default humanistic
@ -9692,6 +9843,12 @@ export interface components {
* @enum {string}
*/
stage: "라포" | "탐색" | "개입" | "정리";
/**
* Start Mode
* @default continue
* @enum {string}
*/
start_mode: "continue" | "fresh";
/**
* Started At
* @default
@ -14486,6 +14643,74 @@ export interface operations {
};
};
};
list_learner_cases_sessions_cases_get: {
parameters: {
query: {
persona_code: string;
};
header?: never;
path?: never;
cookie?: {
"__Host-vignette_sid"?: string | null;
vignette_sid?: string | null;
};
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["LearnerCaseListResponse"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
get_learner_case_memory_preview_sessions_cases__case_id__memory_get: {
parameters: {
query?: never;
header?: never;
path: {
case_id: string;
};
cookie?: {
"__Host-vignette_sid"?: string | null;
vignette_sid?: string | null;
};
};
requestBody?: never;
responses: {
/** @description Successful Response */
200: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["CaseMemoryPreview"];
};
};
/** @description Validation Error */
422: {
headers: {
[name: string]: unknown;
};
content: {
"application/json": components["schemas"]["HTTPValidationError"];
};
};
};
};
learner_dashboard_sessions_dashboard_get: {
parameters: {
query?: never;