Files
hapi/web/src/lib/query-keys.ts
T
5ff897a8bf feat: customizable push notification copy (web push)
Server-level title/body templates with {variable} placeholders for web
push notifications, configured via settings.json `notificationCopy` and
an admin-only editing section on the Notifications settings page with
live preview and variable chips. Empty templates fall back to the
hardcoded defaults; the channel also now delivers session-completion
pushes, which the existing preference toggle previously had no web push
effect for.

via [HAPI](https://hapi.run)

Co-Authored-By: HAPI <noreply@hapi.run>
Co-Authored-By: Claude <noreply@anthropic.com>
2026-08-05 11:16:08 +08:00

38 lines
2.7 KiB
TypeScript

export const queryKeys = {
sessions: ['sessions'] as const,
session: (sessionId: string) => ['session', sessionId] as const,
messages: (sessionId: string) => ['messages', sessionId] as const,
machines: ['machines'] as const,
sqliteStorage: ['sqlite-storage'] as const,
notificationPreferences: ['notification-preferences'] as const,
notificationCopy: ['notification-copy'] as const,
usageSummary: (range: string, timeZone: string) => ['usage-summary', range, timeZone] as const,
machineCodexModels: (machineId: string) => ['machine-codex-models', machineId] as const,
gitStatus: (sessionId: string) => ['git-status', sessionId] as const,
sessionFiles: (sessionId: string, query: string) => ['session-files', sessionId, query] as const,
sessionDirectory: (sessionId: string, path: string) => ['session-directory', sessionId, path] as const,
sessionFile: (sessionId: string, path: string) => ['session-file', sessionId, path] as const,
gitFileDiff: (sessionId: string, path: string, staged?: boolean) => [
'git-file-diff',
sessionId,
path,
staged ? 'staged' : 'unstaged'
] as const,
slashCommands: (sessionId: string) => ['slash-commands', sessionId] as const,
sessionCursorModels: (sessionId: string) => ['session-cursor-models', sessionId] as const,
sessionCursorChatStore: (sessionId: string) => ['session-cursor-chat-store', sessionId] as const,
sessionPiModels: (sessionId: string) => ['session-pi-models', sessionId] as const,
machineCursorModels: (machineId: string) => ['machine-cursor-models', machineId] as const,
sessionOpencodeModels: (sessionId: string) => ['session-opencode-models', sessionId] as const,
sessionOpencodeReasoningEffortOptions: (sessionId: string) => ['session-opencode-reasoning-effort-options', sessionId] as const,
machineOpencodeModelsForCwd: (machineId: string, cwd: string) => ['machine-opencode-models', machineId, cwd] as const,
machineGrokModelsForCwd: (machineId: string, cwd: string) => ['machine-grok-models', machineId, cwd] as const,
sessionGrokModels: (sessionId: string) => ['session-grok-models', sessionId] as const,
sessionCopilotModels: (sessionId: string) => ['session-copilot-models', sessionId] as const,
machineCopilotModelsForCwd: (machineId: string, cwd: string) => ['machine-copilot-models', machineId, cwd] as const,
sessionGrokReasoningEffortOptions: (sessionId: string) => ['session-grok-reasoning-effort-options', sessionId] as const,
machineAgyModels: (machineId: string) => ['machine-agy-models', machineId] as const,
skills: (sessionId: string) => ['skills', sessionId] as const,
scratchlist: (sessionId: string) => ['scratchlist', sessionId] as const,
}