mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
Bump export schema to v2 with scratchlist text and attachment metadata so operators keep notes when they export-then-delete. Markdown gets a Scratchlist section; attachment bytes stay out of the JSON. Co-authored-by: Cursor <cursoragent@cursor.com>
29 lines
1.1 KiB
TypeScript
29 lines
1.1 KiB
TypeScript
import { z } from 'zod'
|
|
import { DecryptedMessageSchema, ScratchlistEntrySchema, SessionSchema } from './schemas'
|
|
|
|
/**
|
|
* Session export schema version.
|
|
*
|
|
* v1: session + messages only (#793 / #808)
|
|
* v2: adds scratchlist text + attachment metadata (#1235). Attachment
|
|
* bytes are intentionally omitted - metadata (id/filename/mime/size/path)
|
|
* is enough for cold archive; download URLs only work while the session
|
|
* still exists on the hub.
|
|
*/
|
|
export const HAPI_SESSION_EXPORT_SCHEMA_VERSION = 2
|
|
export const SESSION_EXPORT_MESSAGE_LIMIT = 20_000
|
|
|
|
export const HapiSessionExportSchema = z.object({
|
|
schemaVersion: z.literal(HAPI_SESSION_EXPORT_SCHEMA_VERSION),
|
|
exportedAt: z.number().int().nonnegative(),
|
|
session: SessionSchema,
|
|
messages: z.array(DecryptedMessageSchema),
|
|
scratchlist: z.array(ScratchlistEntrySchema)
|
|
})
|
|
|
|
export type HapiSessionExport = z.infer<typeof HapiSessionExportSchema>
|
|
|
|
export type HapiSessionExportResult =
|
|
| { type: 'success'; payload: HapiSessionExport }
|
|
| { type: 'too-large'; count: number; limit: number }
|