The mobile composer/footer slid over the message list when the user swiped with the keyboard up. Cause: --vv-height / --vv-offset-top were routed through React state via useMobileKeyboard, so on iOS — which fires visualViewport scroll/resize on the same frame as its keyboard animation — the .chat-thread translation lagged by one paint, visible as the composer momentarily floating over messages. Now those two vars are written imperatively in a useLayoutEffect directly to the .chat-thread DOM node on every visualViewport event, mirroring the working pattern at QuickChatFAB.tsx:1032-1052 (which already works correctly on mobile). Only --keyboard-overlap (a structural open/close signal, not per-frame) still flows through React state. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
35 lines
1.2 KiB
TypeScript
35 lines
1.2 KiB
TypeScript
/**
|
|
* Hermes binary probe helper.
|
|
*
|
|
* Mirrors the probeClaudeCli pattern from packages/dashboard/src/claude-cli-probe.ts.
|
|
* Never throws — all failures are captured as `available: false` with a reason.
|
|
*/
|
|
/**
|
|
* Result of probing for the hermes binary.
|
|
*/
|
|
export interface HermesBinaryStatus {
|
|
/** True if the binary was found and ran to completion successfully. */
|
|
available: boolean;
|
|
/** Absolute path resolved via `which`/`where`, if found. */
|
|
binaryPath?: string;
|
|
/** Version string from `hermes --version` stdout, if available. */
|
|
version?: string;
|
|
/** Human-readable failure reason when `available === false`. */
|
|
reason?: string;
|
|
/** Wall-clock duration of the probe in milliseconds. */
|
|
probeDurationMs: number;
|
|
}
|
|
/**
|
|
* Probe for the hermes binary.
|
|
*
|
|
* Runs `<binaryPath> --version` with a short timeout. Use this from
|
|
* the dashboard status endpoint to check binary presence without crashing.
|
|
*
|
|
* @param opts.binaryPath - Override the binary path (default: "hermes").
|
|
* @param opts.timeoutMs - Override probe timeout in ms (default: 2000).
|
|
*/
|
|
export declare function probeHermesBinary(opts?: {
|
|
binaryPath?: string;
|
|
timeoutMs?: number;
|
|
}): Promise<HermesBinaryStatus>;
|
|
//# sourceMappingURL=probe.d.ts.map
|