import { Type } from "typebox"; import { PluginJsonValueSchema } from "./plugins.js"; import { NonEmptyString, SessionLabelString } from "./primitives.js"; export const SessionCompactionCheckpointReasonSchema = Type.Union([ Type.Literal("manual"), Type.Literal("auto-threshold"), Type.Literal("overflow-retry"), Type.Literal("timeout-retry"), ]); export const SessionOperationEventSchema = Type.Object( { operationId: NonEmptyString, operation: Type.Literal("compact"), phase: Type.Union([Type.Literal("start"), Type.Literal("end")]), sessionKey: NonEmptyString, ts: Type.Integer({ minimum: 0 }), completed: Type.Optional(Type.Boolean()), reason: Type.Optional(Type.String()), }, { additionalProperties: false }, ); export const SessionCompactionTranscriptReferenceSchema = Type.Object( { sessionId: NonEmptyString, sessionFile: Type.Optional(NonEmptyString), leafId: Type.Optional(NonEmptyString), entryId: Type.Optional(NonEmptyString), }, { additionalProperties: false }, ); export const SessionCompactionCheckpointSchema = Type.Object( { checkpointId: NonEmptyString, sessionKey: NonEmptyString, sessionId: NonEmptyString, createdAt: Type.Integer({ minimum: 0 }), reason: SessionCompactionCheckpointReasonSchema, tokensBefore: Type.Optional(Type.Integer({ minimum: 0 })), tokensAfter: Type.Optional(Type.Integer({ minimum: 0 })), summary: Type.Optional(Type.String()), firstKeptEntryId: Type.Optional(NonEmptyString), preCompaction: SessionCompactionTranscriptReferenceSchema, postCompaction: SessionCompactionTranscriptReferenceSchema, }, { additionalProperties: false }, ); export const SessionsListParamsSchema = Type.Object( { /** * Maximum rows to return. Omitted Gateway RPC calls use a bounded default * to keep large session stores from monopolizing the event loop. */ limit: Type.Optional(Type.Integer({ minimum: 1 })), activeMinutes: Type.Optional(Type.Integer({ minimum: 1 })), includeGlobal: Type.Optional(Type.Boolean()), includeUnknown: Type.Optional(Type.Boolean()), /** * Limit returned agent-scoped rows to agents currently present in config. * Broad disk discovery remains the default for recovery/ACP consumers. */ configuredAgentsOnly: Type.Optional(Type.Boolean()), /** * Read first 8KB of each session transcript to derive title from first user message. * Performs a file read per session - use `limit` to bound result set on large stores. */ includeDerivedTitles: Type.Optional(Type.Boolean()), /** * Read last 16KB of each session transcript to extract most recent message preview. * Performs a file read per session - use `limit` to bound result set on large stores. */ includeLastMessage: Type.Optional(Type.Boolean()), label: Type.Optional(SessionLabelString), spawnedBy: Type.Optional(NonEmptyString), agentId: Type.Optional(NonEmptyString), search: Type.Optional(Type.String()), }, { additionalProperties: false }, ); export const SessionsCleanupParamsSchema = Type.Object( { agent: Type.Optional(NonEmptyString), allAgents: Type.Optional(Type.Boolean()), enforce: Type.Optional(Type.Boolean()), activeKey: Type.Optional(NonEmptyString), fixMissing: Type.Optional(Type.Boolean()), fixDmScope: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, ); export const SessionsPreviewParamsSchema = Type.Object( { keys: Type.Array(NonEmptyString, { minItems: 1 }), limit: Type.Optional(Type.Integer({ minimum: 1 })), maxChars: Type.Optional(Type.Integer({ minimum: 20 })), }, { additionalProperties: false }, ); export const SessionsDescribeParamsSchema = Type.Object( { key: NonEmptyString, includeDerivedTitles: Type.Optional(Type.Boolean()), includeLastMessage: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, ); export const SessionsResolveParamsSchema = Type.Object( { key: Type.Optional(NonEmptyString), sessionId: Type.Optional(NonEmptyString), label: Type.Optional(SessionLabelString), agentId: Type.Optional(NonEmptyString), spawnedBy: Type.Optional(NonEmptyString), includeGlobal: Type.Optional(Type.Boolean()), includeUnknown: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, ); export const SessionsCreateParamsSchema = Type.Object( { key: Type.Optional(NonEmptyString), agentId: Type.Optional(NonEmptyString), label: Type.Optional(SessionLabelString), model: Type.Optional(NonEmptyString), parentSessionKey: Type.Optional(NonEmptyString), emitCommandHooks: Type.Optional(Type.Boolean()), task: Type.Optional(Type.String()), message: Type.Optional(Type.String()), }, { additionalProperties: false }, ); export const SessionsSendParamsSchema = Type.Object( { key: NonEmptyString, message: Type.String(), thinking: Type.Optional(Type.String()), attachments: Type.Optional(Type.Array(Type.Unknown())), timeoutMs: Type.Optional(Type.Integer({ minimum: 0 })), idempotencyKey: Type.Optional(NonEmptyString), }, { additionalProperties: false }, ); export const SessionsMessagesSubscribeParamsSchema = Type.Object( { key: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsMessagesUnsubscribeParamsSchema = Type.Object( { key: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsAbortParamsSchema = Type.Object( { key: Type.Optional(NonEmptyString), runId: Type.Optional(NonEmptyString), }, { additionalProperties: false }, ); export const SessionsPatchParamsSchema = Type.Object( { key: NonEmptyString, label: Type.Optional(Type.Union([SessionLabelString, Type.Null()])), thinkingLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), fastMode: Type.Optional(Type.Union([Type.Boolean(), Type.Null()])), verboseLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), traceLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), reasoningLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), responseUsage: Type.Optional( Type.Union([ Type.Literal("off"), Type.Literal("tokens"), Type.Literal("full"), // Backward compat with older clients/stores. Type.Literal("on"), Type.Null(), ]), ), elevatedLevel: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), execHost: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), execSecurity: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), execAsk: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), execNode: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), model: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), spawnedBy: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), spawnedWorkspaceDir: Type.Optional(Type.Union([NonEmptyString, Type.Null()])), spawnDepth: Type.Optional(Type.Union([Type.Integer({ minimum: 0 }), Type.Null()])), subagentRole: Type.Optional( Type.Union([Type.Literal("orchestrator"), Type.Literal("leaf"), Type.Null()]), ), subagentControlScope: Type.Optional( Type.Union([Type.Literal("children"), Type.Literal("none"), Type.Null()]), ), inheritedToolAllow: Type.Optional(Type.Union([Type.Array(NonEmptyString), Type.Null()])), inheritedToolDeny: Type.Optional(Type.Union([Type.Array(NonEmptyString), Type.Null()])), sendPolicy: Type.Optional( Type.Union([Type.Literal("allow"), Type.Literal("deny"), Type.Null()]), ), groupActivation: Type.Optional( Type.Union([Type.Literal("mention"), Type.Literal("always"), Type.Null()]), ), }, { additionalProperties: false }, ); export const SessionsPluginPatchParamsSchema = Type.Object( { key: NonEmptyString, pluginId: NonEmptyString, namespace: NonEmptyString, value: Type.Optional(PluginJsonValueSchema), unset: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, ); export const SessionsPluginPatchResultSchema = Type.Object( { ok: Type.Literal(true), key: NonEmptyString, value: Type.Optional(PluginJsonValueSchema), }, { additionalProperties: false }, ); export const SessionsResetParamsSchema = Type.Object( { key: NonEmptyString, reason: Type.Optional(Type.Union([Type.Literal("new"), Type.Literal("reset")])), }, { additionalProperties: false }, ); export const SessionsDeleteParamsSchema = Type.Object( { key: NonEmptyString, deleteTranscript: Type.Optional(Type.Boolean()), // Internal control: when false, still unbind thread bindings but skip hook emission. emitLifecycleHooks: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, ); export const SessionsCompactParamsSchema = Type.Object( { key: NonEmptyString, maxLines: Type.Optional(Type.Integer({ minimum: 1 })), }, { additionalProperties: false }, ); export const SessionsCompactionListParamsSchema = Type.Object( { key: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsCompactionGetParamsSchema = Type.Object( { key: NonEmptyString, checkpointId: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsCompactionBranchParamsSchema = Type.Object( { key: NonEmptyString, checkpointId: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsCompactionRestoreParamsSchema = Type.Object( { key: NonEmptyString, checkpointId: NonEmptyString, }, { additionalProperties: false }, ); export const SessionsCompactionListResultSchema = Type.Object( { ok: Type.Literal(true), key: NonEmptyString, checkpoints: Type.Array(SessionCompactionCheckpointSchema), }, { additionalProperties: false }, ); export const SessionsCompactionGetResultSchema = Type.Object( { ok: Type.Literal(true), key: NonEmptyString, checkpoint: SessionCompactionCheckpointSchema, }, { additionalProperties: false }, ); export const SessionsCompactionBranchResultSchema = Type.Object( { ok: Type.Literal(true), sourceKey: NonEmptyString, key: NonEmptyString, sessionId: NonEmptyString, checkpoint: SessionCompactionCheckpointSchema, entry: Type.Object( { sessionId: NonEmptyString, updatedAt: Type.Integer({ minimum: 0 }), }, { additionalProperties: true }, ), }, { additionalProperties: false }, ); export const SessionsCompactionRestoreResultSchema = Type.Object( { ok: Type.Literal(true), key: NonEmptyString, sessionId: NonEmptyString, checkpoint: SessionCompactionCheckpointSchema, entry: Type.Object( { sessionId: NonEmptyString, updatedAt: Type.Integer({ minimum: 0 }), }, { additionalProperties: true }, ), }, { additionalProperties: false }, ); export const SessionsUsageParamsSchema = Type.Object( { /** Specific session key to analyze; if omitted returns all sessions. */ key: Type.Optional(NonEmptyString), /** Start date for range filter (YYYY-MM-DD). */ startDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })), /** End date for range filter (YYYY-MM-DD). */ endDate: Type.Optional(Type.String({ pattern: "^\\d{4}-\\d{2}-\\d{2}$" })), /** How start/end dates should be interpreted. Defaults to UTC when omitted. */ mode: Type.Optional( Type.Union([Type.Literal("utc"), Type.Literal("gateway"), Type.Literal("specific")]), ), /** Preset range for usage queries when explicit start/end dates are omitted. */ range: Type.Optional( Type.Union([ Type.Literal("7d"), Type.Literal("30d"), Type.Literal("90d"), Type.Literal("1y"), Type.Literal("all"), ]), ), /** Usage row grouping. `family` rolls up known rotated session ids for a logical key. */ groupBy: Type.Optional(Type.Union([Type.Literal("instance"), Type.Literal("family")])), /** Backward-compatible alias for requesting family grouping. */ includeHistorical: Type.Optional(Type.Boolean()), /** UTC offset to use when mode is `specific` (for example, UTC-4 or UTC+5:30). */ utcOffset: Type.Optional(Type.String({ pattern: "^UTC[+-]\\d{1,2}(?::[0-5]\\d)?$" })), /** Maximum sessions to return (default 50). */ limit: Type.Optional(Type.Integer({ minimum: 1 })), /** Include context weight breakdown (systemPromptReport). */ includeContextWeight: Type.Optional(Type.Boolean()), }, { additionalProperties: false }, );