mirror of
https://github.com/heygen-com/hyperframes.git
synced 2026-09-07 10:06:21 +00:00
Move per-command examples from the centralized `help.ts` record into each command file as `export const examples: Example[]`. help.ts now dynamically imports them at --help time. This means adding a new command and its examples happens in one file instead of two, reducing the chance of forgetting examples. Co-authored-by: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
93 lines
3.1 KiB
TypeScript
93 lines
3.1 KiB
TypeScript
import { defineCommand } from "citty";
|
|
import type { Example } from "./_examples.js";
|
|
import { c } from "../ui/colors.js";
|
|
|
|
export const examples: Example[] = [
|
|
["Check current telemetry status", "hyperframes telemetry status"],
|
|
["Disable telemetry", "hyperframes telemetry disable"],
|
|
["Enable telemetry", "hyperframes telemetry enable"],
|
|
];
|
|
import { readConfig, writeConfig, CONFIG_PATH } from "../telemetry/config.js";
|
|
|
|
function runEnable(): void {
|
|
const config = readConfig();
|
|
config.telemetryEnabled = true;
|
|
writeConfig(config);
|
|
console.log(`\n ${c.success("\u2713")} Telemetry ${c.success("enabled")}\n`);
|
|
}
|
|
|
|
function runDisable(): void {
|
|
const config = readConfig();
|
|
config.telemetryEnabled = false;
|
|
writeConfig(config);
|
|
console.log(`\n ${c.success("\u2713")} Telemetry ${c.bold("disabled")}\n`);
|
|
}
|
|
|
|
function runStatus(): void {
|
|
const config = readConfig();
|
|
const status = config.telemetryEnabled ? c.success("enabled") : c.dim("disabled");
|
|
console.log();
|
|
console.log(` ${c.dim("Status:")} ${status}`);
|
|
console.log(` ${c.dim("Config:")} ${c.accent(CONFIG_PATH)}`);
|
|
console.log(` ${c.dim("Commands:")} ${c.bold(String(config.commandCount))}`);
|
|
console.log();
|
|
console.log(` ${c.dim("Disable:")} ${c.accent("hyperframes telemetry disable")}`);
|
|
console.log(` ${c.dim("Env var:")} ${c.accent("HYPERFRAMES_NO_TELEMETRY=1")}`);
|
|
console.log();
|
|
}
|
|
|
|
export default defineCommand({
|
|
meta: { name: "telemetry", description: "Manage anonymous usage telemetry" },
|
|
args: {
|
|
subcommand: {
|
|
type: "positional",
|
|
description: "Subcommand: enable, disable, status",
|
|
required: false,
|
|
},
|
|
},
|
|
async run({ args }) {
|
|
const subcommand = args.subcommand;
|
|
|
|
if (!subcommand || subcommand === "") {
|
|
console.log(`
|
|
${c.bold("hyperframes telemetry")} ${c.dim("<subcommand>")}
|
|
|
|
Manage anonymous usage data collection.
|
|
|
|
${c.bold("SUBCOMMANDS:")}
|
|
${c.accent("status")} ${c.dim("Show current telemetry status")}
|
|
${c.accent("enable")} ${c.dim("Enable anonymous telemetry")}
|
|
${c.accent("disable")} ${c.dim("Disable anonymous telemetry")}
|
|
|
|
${c.bold("WHAT WE COLLECT:")}
|
|
${c.dim("\u2022")} Command names (init, render, preview, etc.)
|
|
${c.dim("\u2022")} Render performance (duration, fps, quality)
|
|
${c.dim("\u2022")} Template choices
|
|
${c.dim("\u2022")} OS, architecture, Node.js version, CLI version
|
|
|
|
${c.bold("WHAT WE DON'T COLLECT:")}
|
|
${c.dim("\u2022")} File paths, project names, or video content
|
|
${c.dim("\u2022")} IP addresses (discarded by our analytics provider)
|
|
${c.dim("\u2022")} Any personally identifiable information
|
|
|
|
${c.dim("You can also set")} ${c.accent("HYPERFRAMES_NO_TELEMETRY=1")} ${c.dim("to disable.")}
|
|
`);
|
|
return;
|
|
}
|
|
|
|
switch (subcommand) {
|
|
case "enable":
|
|
return runEnable();
|
|
case "disable":
|
|
return runDisable();
|
|
case "status":
|
|
return runStatus();
|
|
default:
|
|
console.error(
|
|
`${c.error("Unknown subcommand:")} ${subcommand}\n\nRun ${c.accent("hyperframes telemetry --help")} for usage.`,
|
|
);
|
|
process.exit(1);
|
|
}
|
|
},
|
|
});
|