mirror of
https://github.com/wu736139669/hapi.git
synced 2026-08-05 06:24:37 +00:00
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>
38 lines
2.7 KiB
TypeScript
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,
|
|
}
|