feat: ship v0.6.0 with cockpit, knowledge base, and chapter bridge

Deliver P5 writer workflow: writing cockpit, manual knowledge CRUD with review, chapter bridge with optional AI, publish status, and stock buffer reminders.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
2026-07-06 23:03:11 +08:00
parent 78f046890d
commit b33d2e7b34
45 changed files with 2389 additions and 29 deletions
+47 -1
View File
@@ -33,7 +33,14 @@ import type {
SnapshotType,
UpdateChapterParams,
Volume,
WordFreqResult
WordFreqResult,
KnowledgeEntry,
CreateKnowledgeInput,
KnowledgeStatus,
KnowledgeType,
CockpitSummary,
ChapterBridgeResult,
PublishStatus
} from './types'
export interface ElectronAPI {
@@ -77,6 +84,11 @@ export interface ElectronAPI {
targetVolumeId: string,
targetIndex: number
) => Promise<IpcResult<Chapter>>
setPublishStatus: (
bookId: string,
chapterId: string,
publishStatus: PublishStatus
) => Promise<IpcResult<Chapter>>
}
outline: {
list: (bookId: string) => Promise<IpcResult<OutlineItem[]>>
@@ -307,6 +319,40 @@ export interface ElectronAPI {
handoffInteractive: (bookId: string, flowId: string) => Promise<IpcResult<InteractiveFlow>>
abort: (flowId: string) => Promise<IpcResult<void>>
}
knowledge: {
list: (
bookId: string,
filter?: { status?: KnowledgeStatus; type?: KnowledgeType; forgottenOnly?: boolean }
) => Promise<IpcResult<KnowledgeEntry[]>>
create: (bookId: string, input: CreateKnowledgeInput) => Promise<IpcResult<KnowledgeEntry>>
update: (
bookId: string,
id: string,
patch: Partial<CreateKnowledgeInput & { status: KnowledgeStatus }>
) => Promise<IpcResult<KnowledgeEntry>>
delete: (bookId: string, id: string) => Promise<IpcResult<void>>
approve: (bookId: string, id: string) => Promise<IpcResult<KnowledgeEntry>>
reject: (bookId: string, id: string) => Promise<IpcResult<KnowledgeEntry>>
batchApprove: (bookId: string, ids: string[]) => Promise<IpcResult<number>>
createFromBookmark: (bookId: string, bookmarkId: string) => Promise<IpcResult<KnowledgeEntry>>
stats: (
bookId: string
) => Promise<IpcResult<{ buried: number; resolved: number; forgotten: number }>>
}
cockpit: {
getSummary: (bookId: string, volumeId?: string) => Promise<IpcResult<CockpitSummary>>
markSeen: (bookId: string) => Promise<IpcResult<void>>
shouldShowOnOpen: (bookId: string) => Promise<IpcResult<boolean>>
}
bridge: {
get: (
bookId: string,
chapterId: string,
withAi?: boolean
) => Promise<IpcResult<ChapterBridgeResult>>
dismiss: (bookId: string, chapterId: string) => Promise<IpcResult<void>>
shouldPrompt: (bookId: string, chapterId: string) => Promise<IpcResult<boolean>>
}
wordfreq: {
analyze: (
bookId: string,