mirror of
https://github.com/wu736139669/hapi.git
synced 2026-11-08 01:43:07 +00:00
* feat: settings toggle for AGENT_NOTIFY_SUMMARY contract injection Add a hub-persisted, default-off Settings control so operators can opt agents into emitting the trailing AGENT_NOTIFY_SUMMARY line. Propagate the resolved flag on CLI session bootstrap and inject at call time for Claude, Codex, OpenCode, and Grok (Cursor still unsupported). Closes #1375 Co-authored-by: Cursor <cursoragent@cursor.com> * fix: lock hub settings RMW and restore abort deliveryMode Serialize settings.json updates with the shared .lock protocol and unique temp files so the new hub toggle cannot clobber CLI/relay fields under concurrency. Also supply deliveryMode on abort send-error restore so web typecheck (and CI) pass. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(web): wrap SettingsGeneralPage tests with QueryClientProvider The hub-settings toggle uses TanStack Query; the settings page suite was rendering without a QueryClient and blew up CI. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(web): defer summary-contract toggle until settings load Avoid rendering an interactive false switch while the hub GET is still in flight, which could overwrite an enabled preference on early click. Co-authored-by: Cursor <cursoragent@cursor.com> * fix(web): clarify Grok coverage for summary-contract toggle Local Grok has no instruction inject path; settings copy now matches remote-only Grok support (and still excludes Cursor). Co-authored-by: Cursor <cursoragent@cursor.com> --------- Co-authored-by: Cursor <cursoragent@cursor.com>
37 lines
2.6 KiB
TypeScript
37 lines
2.6 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,
|
|
hubSettings: ['hub-settings'] 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,
|
|
}
|