mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-10 22:20:14 +00:00
feat: post-render and Studio feedback collection via PostHog surveys (#1101)
* feat(cli): prompt for render satisfaction after successful renders * feat: add text feedback, doctor context, and Studio render feedback UI * feat(studio): replace render feedback with session-based Studio experience bar Move the feedback prompt out of RenderQueueItem (where it triggered every 5th render) into a standalone StudioFeedbackBar mounted at the bottom of the preview area. The new bar is session-gated (shows after the 5th studio session), auto-dismisses after 20s, and respects a 30-day cooldown once dismissed or submitted. Renames telemetry to trackStudioFeedback with a "studio_experience" survey ID to reflect the broader scope. * feat(studio): attach browser doctor summary to feedback events * fix(studio): use recurring interval for feedback instead of one-time cooldown * fix(cli): skip feedback prompt when an agent runtime is detected * feat(cli): add hyperframes feedback command and agent render hint - New `hyperframes feedback --rating <1-5> --comment "..."` command for submitting anonymous render satisfaction feedback via telemetry. - When an AI agent runtime is detected after a render, print a dimmed hint to stdout so the agent can optionally call the command instead of silently skipping the readline prompt. - Export getDoctorSummary from telemetry/feedback.ts to share the system-info collector between the interactive prompt and the CLI command. - Register the command in cli.ts and help.ts under Settings. * fix(studio): align feedback interval to every 15 sessions * fix: show CLI feedback on first render, Studio every 10 sessions * feat: add env flags to disable feedback prompts * feat: env flags to configure feedback prompt frequency * fix: address review — agent hint reachability, cadence gate, session debounce, deprecated API
This commit is contained in:
@@ -19,6 +19,10 @@ export interface HyperframesConfig {
|
||||
telemetryNoticeShown: boolean;
|
||||
/** Total CLI command invocations (for engagement prompts) */
|
||||
commandCount: number;
|
||||
/** Total successful renders (for feedback prompt gating) */
|
||||
renderSuccessCount: number;
|
||||
/** The renderSuccessCount at which feedback was last shown */
|
||||
lastFeedbackPromptAt: number;
|
||||
/** ISO timestamp of the last npm registry version check */
|
||||
lastUpdateCheck?: string;
|
||||
/** Latest version found on npm */
|
||||
@@ -58,6 +62,8 @@ const DEFAULT_CONFIG: HyperframesConfig = {
|
||||
anonymousId: "",
|
||||
telemetryNoticeShown: false,
|
||||
commandCount: 0,
|
||||
renderSuccessCount: 0,
|
||||
lastFeedbackPromptAt: 0,
|
||||
};
|
||||
|
||||
let cachedConfig: HyperframesConfig | null = null;
|
||||
@@ -84,6 +90,8 @@ export function readConfig(): HyperframesConfig {
|
||||
anonymousId: parsed.anonymousId || randomUUID(),
|
||||
telemetryNoticeShown: parsed.telemetryNoticeShown ?? DEFAULT_CONFIG.telemetryNoticeShown,
|
||||
commandCount: parsed.commandCount ?? DEFAULT_CONFIG.commandCount,
|
||||
renderSuccessCount: parsed.renderSuccessCount ?? DEFAULT_CONFIG.renderSuccessCount,
|
||||
lastFeedbackPromptAt: parsed.lastFeedbackPromptAt ?? DEFAULT_CONFIG.lastFeedbackPromptAt,
|
||||
lastUpdateCheck: parsed.lastUpdateCheck,
|
||||
latestVersion: parsed.latestVersion,
|
||||
pendingUpdate: parsed.pendingUpdate,
|
||||
|
||||
Reference in New Issue
Block a user