Merge branch 'codex/personal-assistant-phase2' into codex/multi-tenant-knowledge-platform

# Conflicts:
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/domain/AihrSopDto.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrModelSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/main/java/org/dromara/aihr/service/AihrSopSeedService.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrModelSeedServiceTest.java
#	backend/ruoyi-modules/ruoyi-aihr/src/test/java/org/dromara/aihr/service/AihrSopSeedServiceTest.java
#	docs/API_INTEGRATION.md
#	docs/个人AI助理阶段二专项TechSpec.md
#	docs/个人AI助理阶段二开发推进计划.md
#	frontend/src/views/knowledge/processing.vue
#	mobile-uni/src/pages/user/sop/index.vue
#	mobile-uni/src/services/api.ts
#	mobile-uni/src/services/personal-assistant.ts
#	mobile-uni/tests/personal-assistant.test.mjs
#	scripts/demo-check.sh
#	scripts/personal-assistant-smoke.sh
This commit is contained in:
2026-07-22 08:54:04 +08:00
72 changed files with 13883 additions and 61 deletions
+50
View File
@@ -381,6 +381,56 @@ export interface SummaryCardResponse {
reminders: string[];
}
export type PersonalKnowledgeScope = 'PERSONAL' | 'ENTERPRISE';
export type PersonalItemSourceType = 'TEXT' | 'FILE' | 'URL';
export type PersonalItemStatus = 'QUEUED' | 'PARSING' | 'READY' | 'FAILED' | 'DELETING' | 'DELETED';
export interface PersonalCitation {
domain: PersonalKnowledgeScope;
sourceId: string;
itemId?: string;
fragmentId?: string;
sourceType?: PersonalItemSourceType | 'ENTERPRISE';
title: string;
excerpt: string;
capturedAt?: string;
}
export interface PersonalAskResponse {
sessionId: string;
answer: string;
citations: PersonalCitation[];
model?: string;
promptVersion?: string;
}
export interface PersonalExportOutlineSection { title: string; bullets: string[]; }
export interface PersonalExportOutlineSource { domain: PersonalKnowledgeScope; sourceId: string; itemId?: string; title: string; excerpt: string; }
export interface PersonalExportOutline {
id: string; sessionId: string; title: string; sections: PersonalExportOutlineSection[];
sources: PersonalExportOutlineSource[]; confirmed: boolean; status: string; ossId?: string;
}
export interface PersonalPublishRequest {
id: string; itemId: string; title: string; sourceType: PersonalItemSourceType; targetScope: string;
reason: string; status: 'PENDING' | 'APPROVED' | 'REJECTED'; reviewerUserId?: string;
reviewComment?: string; publishedKnowledgeId?: string; createdAt?: string;
}
export interface PersonalSpace { spaceId: string; status: string; quotaBytes: number; usedBytes: number; itemCount: number; }
export interface PersonalItem {
id: string; sourceType: PersonalItemSourceType; title: string; originalUrl?: string; mimeType?: string;
sizeBytes: number; status: PersonalItemStatus; errorCode?: string; errorMessage?: string; summary?: string;
tags?: string[]; capturedAt?: string; parsedAt?: string; ocr?: PersonalOcrProgress;
}
export interface PersonalOcrProgress {
required: boolean; status: string; totalPages: number; processedPages: number; successPages: number;
failedPages: number; failedPageNumbers: number[];
}
export interface PersonalPage<T> { rows: T[]; total: number; pageNum: number; pageSize: number; }
export interface PersonalItemCreated { itemId: string; status: PersonalItemStatus; duplicateOf?: string; }
export interface PersonalSession { id: string; title: string; defaultScope: string; updatedAt?: string; }
export interface PersonalChatMessage { id: string; role: string; content: string; citations: PersonalCitation[]; createdAt?: string; }
export interface PersonalSessionDetail { id: string; title: string; messages: PersonalChatMessage[]; }
export type PracticeRole = 'customer' | 'trainee' | 'coach';
export interface PracticeTurn {