@fml-inc/fml 0.0.22 → 0.0.25
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.claude-plugin/plugin.json +3 -2
- package/LICENSE +14 -0
- package/dist/{chunk-DP2ILCME.js → chunk-FS55W24B.js} +2 -2
- package/dist/{chunk-MYCITM37.js → chunk-WXDGVKXK.js} +2 -2
- package/dist/cli.js +5 -5
- package/dist/cli.js.map +1 -1
- package/dist/{esm-JQB7UAJD.js → esm-2EUDFZWP.js} +740 -546
- package/dist/esm-2EUDFZWP.js.map +1 -0
- package/dist/mcp/server.js +64 -12607
- package/dist/mcp/server.js.map +1 -1
- package/dist/{token-store-67FJZTYS.js → token-store-KQSMR6XA.js} +2 -2
- package/package.json +20 -4
- package/dist/esm-JQB7UAJD.js.map +0 -1
- /package/dist/{chunk-DP2ILCME.js.map → chunk-FS55W24B.js.map} +0 -0
- /package/dist/{chunk-MYCITM37.js.map → chunk-WXDGVKXK.js.map} +0 -0
- /package/dist/{token-store-67FJZTYS.js.map → token-store-KQSMR6XA.js.map} +0 -0
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/cli.ts","../src/commands/doctor.ts","../src/commands/install.ts","../src/banner.ts","../src/sync/client.ts","../src/commands/uninstall.ts","../src/commands/update.ts","../src/auth/oauth.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/org.ts","../src/commands/open.ts","../src/commands/status.ts","../src/commands/sync.ts","../src/commands/env.ts","../src/commands/data.ts","../src/commands/query.ts","../src/commands/automation.ts","../src/commands/memory.ts","../src/commands/analysis.ts","../src/commands/integrations.ts","../src/commands/slack.ts","../src/commands/messages.ts","../src/commands/skills.ts","../src/commands/config-snapshots.ts"],"sourcesContent":["#!/usr/bin/env node\n\ndeclare const __FML_PLUGIN_VERSION__: string;\n\nimport { ensureNativeModules } from \"./native-check.js\";\nensureNativeModules();\n\nimport { Command } from \"commander\";\nimport { initSentry, Sentry } from \"./sentry.js\";\n\nimport { handleDoctor } from \"./commands/doctor.js\";\nimport { handleInstall } from \"./commands/install.js\";\nimport { handleUninstall } from \"./commands/uninstall.js\";\nimport { handleUpdate } from \"./commands/update.js\";\nimport { handleLogin } from \"./commands/login.js\";\nimport { handleLogout } from \"./commands/logout.js\";\nimport { handleOrg } from \"./commands/org.js\";\nimport { handleOpen } from \"./commands/open.js\";\nimport { handleStatus } from \"./commands/status.js\";\nimport { handleStart, handleStop } from \"./commands/daemon.js\";\nimport {\n handleSyncAdd,\n handleSyncEdit,\n handleSyncList,\n handleSyncRemove,\n handleSyncReset,\n handleSyncSetup,\n handleSyncStatus,\n} from \"./commands/sync.js\";\nimport { handleEnvShow, handleEnvSwitch } from \"./commands/env.js\";\nimport {\n handleActivity,\n handleSearch,\n handleSessions,\n handleSpending,\n handleTimeline,\n} from \"./commands/data.js\";\nimport { handleQuery } from \"./commands/query.js\";\nimport {\n handleAutomationList,\n handleAutomationCreate,\n handleAutomationCreatePattern,\n handleAutomationUpdate,\n handleAutomationDelete,\n handleAutomationTest,\n} from \"./commands/automation.js\";\nimport {\n handleMemoryList,\n handleMemoryRead,\n handleMemoryWrite,\n handleMemoryDelete,\n} from \"./commands/memory.js\";\nimport {\n handleSearchAnalysis,\n handleRunAnalysis,\n} from \"./commands/analysis.js\";\nimport {\n handleIntegrations,\n handleEvents,\n handleResolveIdentity,\n} from \"./commands/integrations.js\";\nimport { handleSlackHistory, handleSlackMessage } from \"./commands/slack.js\";\nimport {\n handleMessagesList,\n handleMessagesContext,\n} from \"./commands/messages.js\";\nimport { handleSkillsList, handleSkillsLoad } from \"./commands/skills.js\";\nimport {\n handleConfigList,\n handleConfigDetail,\n} from \"./commands/config-snapshots.js\";\nimport { printBanner } from \"./banner.js\";\n\nawait initSentry();\n\n// Show the logo when running `fml` with no args or `fml --help`\nif (\n process.argv.length <= 2 ||\n process.argv.includes(\"--help\") ||\n process.argv.includes(\"-h\")\n) {\n printBanner();\n}\n\nconst program = new Command()\n .name(\"fml\")\n .description(\"FML agent tools for Claude Code\")\n .version(\n typeof __FML_PLUGIN_VERSION__ !== \"undefined\"\n ? __FML_PLUGIN_VERSION__\n : \"dev\",\n );\n\nprogram\n .command(\"tools\", { hidden: true })\n .description(\"List all available CLI commands (including hidden agent tools)\")\n .action(() => {\n function formatCmd(cmd: typeof program, prefix = \"\") {\n const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();\n const args = cmd.registeredArguments\n .map((a) => (a.required ? `<${a.name()}>` : `[${a.name()}]`))\n .join(\" \");\n const opts = cmd.options\n .filter(\n (o) => !o.hidden && o.long !== \"--help\" && o.long !== \"--version\",\n )\n .map((o) => (o.mandatory ? o.flags : `[${o.flags}]`))\n .join(\" \");\n const usage = [name, args, opts].filter(Boolean).join(\" \");\n return `${usage}\\n ${cmd.description()}`;\n }\n\n const lines = program.commands\n .filter((c) => c.name() !== \"tools\" && c.name() !== \"help\")\n .flatMap((c) => {\n if (c.commands.length > 0) {\n return c.commands.map((s) => formatCmd(s, c.name()));\n }\n return [formatCmd(c)];\n });\n console.log(lines.join(\"\\n\\n\"));\n });\n\nprogram\n .command(\"install\")\n .description(\"Register plugin, hooks, and daemons\")\n .action(() => handleInstall());\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove fml plugin, hooks, and optionally all data\")\n .option(\n \"--target <target>\",\n \"Target CLI: claude, gemini, codex, claude-desktop, all\",\n )\n .option(\"--purge\", \"Also remove all data, logs, and auth tokens\")\n .action((opts) => handleUninstall(opts));\n\nprogram\n .command(\"update\")\n .description(\"Update fml to the latest version\")\n .action(() => handleUpdate());\n\nprogram\n .command(\"login\")\n .description(\"Sign in to your FML account\")\n .action(() => handleLogin());\n\nprogram\n .command(\"logout\")\n .description(\"Sign out and clear stored credentials\")\n .action(() => handleLogout());\n\nprogram\n .command(\"org\")\n .description(\"Show or select organization\")\n .argument(\"[slug]\", \"Org slug to select\")\n .action((slug) => handleOrg(slug));\n\nprogram\n .command(\"status\")\n .description(\"Show current auth and daemon status\")\n .action(() => handleStatus());\n\nprogram\n .command(\"doctor\")\n .description(\"Check FML and panopticon configuration and connectivity\")\n .option(\"--json\", \"Output as JSON\")\n .action((opts) => handleDoctor(opts));\n\nprogram\n .command(\"open\")\n .description(\"Open FML dashboard in browser\")\n .option(\"--json\", \"Output URL as JSON instead of opening browser\")\n .action((opts) => handleOpen(opts));\n\nprogram\n .command(\"env\")\n .description(\"Show or switch environment (dev/prod)\")\n .argument(\"[target]\", 'Environment name (\"dev\", \"prod\") or custom Convex URL')\n .action((target?: string) => {\n if (target) handleEnvSwitch(target);\n else handleEnvShow();\n });\n\nprogram\n .command(\"start\")\n .description(\"Start panopticon server and sync\")\n .action(() => handleStart());\n\nprogram\n .command(\"stop\")\n .description(\"Stop panopticon server and sync\")\n .action(() => handleStop());\n\n// ── Sync subcommand ───────────────────────────────────────────────────────\n\nconst sync = program.command(\"sync\").description(\"Manage sync configuration\");\n\nsync\n .command(\"setup\")\n .description(\"Configure sync targets (convenience shortcut)\")\n .action(() => handleSyncSetup());\n\nsync\n .command(\"list\")\n .description(\"List all sync targets\")\n .action(() => handleSyncList());\n\nsync\n .command(\"add\")\n .description(\"Add a sync target\")\n .argument(\"<name>\", \"Unique target name\")\n .argument(\"<url>\", \"OTLP HTTP endpoint URL\")\n .option(\"--token-cmd <cmd>\", \"Shell command that returns a bearer token\")\n .option(\"--token <token>\", \"Static bearer token\")\n .action(\n (name: string, url: string, opts: { tokenCmd?: string; token?: string }) =>\n handleSyncAdd(name, url, opts),\n );\n\nsync\n .command(\"remove\")\n .description(\"Remove a sync target\")\n .argument(\"<name>\", \"Target name to remove\")\n .action((name: string) => handleSyncRemove(name));\n\nsync\n .command(\"edit\")\n .description(\"Edit a sync target\")\n .argument(\"<name>\", \"Target name to edit\")\n .option(\"--url <url>\", \"New OTLP HTTP endpoint URL\")\n .option(\"--token-cmd <cmd>\", \"New shell command for bearer token\")\n .option(\"--token <token>\", \"New static bearer token\")\n .action(\n (name: string, opts: { url?: string; tokenCmd?: string; token?: string }) =>\n handleSyncEdit(name, opts),\n );\n\nsync\n .command(\"status\")\n .description(\"Show sync config and watermarks\")\n .action(() => handleSyncStatus());\n\nsync\n .command(\"reset\")\n .description(\"Reset sync watermarks\")\n .argument(\"[name]\", \"Target name (resets all if omitted)\")\n .action((name?: string) => handleSyncReset(name));\n\n// ── Data commands ───────────────────────────────────────────────────────────\n\nprogram\n .command(\"activity\")\n .description(\"Activity summary — sessions, prompts, tools, costs\")\n .option(\"--since <duration>\", 'Time window, e.g. \"24h\", \"7d\"')\n .action((opts) => handleActivity(opts));\n\nprogram\n .command(\"sessions\")\n .description(\"List recent sessions\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--limit <n>\", \"Max sessions to return\")\n .action((opts) => handleSessions(opts));\n\nprogram\n .command(\"timeline\")\n .description(\"Get events for a session\")\n .argument(\"<session-id>\", \"Session ID\")\n .option(\"--limit <n>\", \"Max events to return\")\n .option(\"--offset <n>\", \"Events to skip\")\n .action((sessionId, opts) => handleTimeline(sessionId, opts));\n\nprogram\n .command(\"spending\")\n .description(\"AI token usage and cost breakdown\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--group-by <key>\", \"Group by: session, model, or day\")\n .action((opts) => handleSpending(opts));\n\nprogram\n .command(\"search\")\n .description(\"Search across all sessions\")\n .argument(\"<query>\", \"Text to search for\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--limit <n>\", \"Max results\")\n .action((query, opts) => handleSearch(query, opts));\n\n// ── Query command (unified integration queries) ────────────────────────────\n\nprogram\n .command(\"query\", { hidden: true })\n .description(\"Query a connected integration\")\n .argument(\n \"<provider>\",\n \"Provider name (sentry, slack, github, linear, notion, freshdesk, posthog, amplitude, meta-ads)\",\n )\n .argument(\"<endpoint>\", \"API endpoint or subcommand\")\n .option(\"--method <method>\", \"HTTP method\", \"GET\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--project-id <id>\", \"Project ID override\")\n .action((provider, endpoint, opts) => handleQuery(provider, endpoint, opts));\n\n// ── Automation subcommand ──────────────────────────────────────────────────\n\nconst automation = program\n .command(\"automation\", { hidden: true })\n .description(\"Manage automations\");\n\nautomation\n .command(\"list\")\n .description(\"List all automations\")\n .action(() => handleAutomationList());\n\nautomation\n .command(\"create-scheduled\")\n .description(\"Create a scheduled automation\")\n .requiredOption(\"--name <name>\", \"Automation name\")\n .requiredOption(\"--prompt <prompt>\", \"What to run\")\n .requiredOption(\"--frequency <freq>\", \"hourly, daily, weekly, or monthly\")\n .requiredOption(\"--hour <hour>\", \"Hour (0-23)\")\n .requiredOption(\"--minute <minute>\", \"Minute (0-59)\")\n .requiredOption(\"--timezone <tz>\", \"IANA timezone, e.g. America/Chicago\")\n .option(\"--day-of-week <day>\", \"Day of week (0=Sun..6=Sat) for weekly\")\n .option(\"--day-of-month <day>\", \"Day of month (1-31) for monthly\")\n .option(\"--max-runs <n>\", \"Max runs (1 for one-time)\")\n .action((opts) => handleAutomationCreate(opts));\n\nautomation\n .command(\"create-pattern\")\n .description(\"Create an event-triggered automation\")\n .requiredOption(\"--name <name>\", \"Automation name\")\n .requiredOption(\"--prompt <prompt>\", \"What to watch for and do\")\n .action((opts) => handleAutomationCreatePattern(opts));\n\nautomation\n .command(\"update\")\n .description(\"Update an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .option(\"--name <name>\", \"New name\")\n .option(\"--prompt <prompt>\", \"New prompt\")\n .option(\"--enabled <bool>\", \"Enable or disable (true/false)\")\n .option(\"--frequency <freq>\", \"New frequency\")\n .option(\"--hour <hour>\", \"New hour\")\n .option(\"--minute <minute>\", \"New minute\")\n .option(\"--timezone <tz>\", \"New timezone\")\n .option(\"--day-of-week <day>\", \"New day of week\")\n .option(\"--day-of-month <day>\", \"New day of month\")\n .action((id, opts) => handleAutomationUpdate(id, opts));\n\nautomation\n .command(\"delete\")\n .description(\"Delete an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .action((id) => handleAutomationDelete(id));\n\nautomation\n .command(\"test\")\n .description(\"Preview/test an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .action((id) => handleAutomationTest(id));\n\n// ── Memory subcommand ──────────────────────────────────────────────────────\n\nconst memory = program\n .command(\"memory\", { hidden: true })\n .description(\"Manage memory files\");\n\nmemory\n .command(\"list\")\n .description(\"List memory files\")\n .option(\"--scope <scope>\", \"Scope: project, org, or user\")\n .action((opts) => handleMemoryList(opts));\n\nmemory\n .command(\"read\")\n .description(\"Read a memory file\")\n .argument(\"<file-id>\", \"Memory file ID\")\n .action((fileId) => handleMemoryRead(fileId));\n\nmemory\n .command(\"write\")\n .description(\"Create or update a memory file\")\n .requiredOption(\"--title <title>\", \"File title\")\n .requiredOption(\"--content <content>\", \"File content\")\n .option(\"--scope <scope>\", \"Scope: project, org, or user\")\n .action((opts) => handleMemoryWrite(opts));\n\nmemory\n .command(\"delete\")\n .description(\"Delete a memory file\")\n .argument(\"<file-id>\", \"Memory file ID\")\n .action((fileId) => handleMemoryDelete(fileId));\n\n// ── Analysis commands ──────────────────────────────────────────────────────\n\nprogram\n .command(\"search-analysis\", { hidden: true })\n .description(\"Search codebase analysis results\")\n .argument(\"<query>\", \"Search query\")\n .option(\"--status <status>\", \"Filter by status\")\n .option(\"--limit <n>\", \"Max results\")\n .action((query, opts) => handleSearchAnalysis(query, opts));\n\nprogram\n .command(\"run-analysis\", { hidden: true })\n .description(\"Run deep codebase analysis workflows\")\n .option(\n \"--prompts <list>\",\n \"Comma-separated: security,architecture,code-quality,performance,ux,dependencies,cost,ai-architecture,ai-security\",\n )\n .action((opts) => handleRunAnalysis(opts));\n\n// ── Integration commands ───────────────────────────────────────────────────\n\nprogram\n .command(\"integrations\", { hidden: true })\n .description(\"List connected integrations\")\n .action(() => handleIntegrations());\n\nprogram\n .command(\"events\", { hidden: true })\n .description(\"Recent integration events (deploys, releases, errors)\")\n .option(\n \"--source <source>\",\n \"Filter: github, sentry, linear, amplitude, stripe\",\n )\n .option(\"--event-type <type>\", \"Filter by event type\")\n .option(\"--project-id <id>\", \"Filter by project\")\n .option(\"--since <duration>\", \"Time range: 1h, 6h, 24h, 7d, 30d\")\n .action((opts) => handleEvents(opts));\n\nprogram\n .command(\"resolve-identity\", { hidden: true })\n .description(\"Resolve external identity to FML user\")\n .argument(\"[username]\", \"External username (shorthand for --username)\")\n .option(\"--provider <p>\", \"Provider: github, linear, slack\")\n .option(\"--username <u>\", \"External username\")\n .option(\"--email <e>\", \"Email address\")\n .option(\"--external-id <id>\", \"External ID\")\n .option(\"--external-user-id <id>\", \"External user ID\")\n .action((username, opts) =>\n handleResolveIdentity(username ? { ...opts, username } : opts),\n );\n\n// ── Slack subcommand ───────────────────────────────────────────────────────\n\nconst slack = program\n .command(\"slack\", { hidden: true })\n .description(\"Slack shortcuts\");\n\nslack\n .command(\"history\")\n .description(\"Recent messages from a channel\")\n .option(\"--channel <id>\", \"Channel ID\")\n .option(\"--limit <n>\", \"Max messages\")\n .action((opts) => handleSlackHistory(opts));\n\nslack\n .command(\"message\")\n .description(\"Fetch a specific message\")\n .option(\"--permalink <url>\", \"Message permalink\")\n .option(\"--channel <id>\", \"Channel ID\")\n .option(\"--ts <timestamp>\", \"Message timestamp\")\n .option(\"--include-thread\", \"Include thread context\")\n .action((opts) => handleSlackMessage(opts));\n\n// ── Messages subcommand ────────────────────────────────────────────────────\n\nconst messages = program\n .command(\"messages\", { hidden: true })\n .description(\"Conversation messages\");\n\nmessages\n .command(\"list\")\n .description(\"List messages from a conversation\")\n .option(\"--start <timestamp>\", \"Start time (ms epoch)\")\n .option(\"--end <timestamp>\", \"End time (ms epoch)\")\n .option(\"--limit <n>\", \"Max messages\")\n .option(\"--cursor <cursor>\", \"Pagination cursor\")\n .action((opts) => handleMessagesList(opts));\n\nmessages\n .command(\"context\")\n .description(\"Get messages around a specific message\")\n .argument(\"<message-id>\", \"Message ID\")\n .option(\"--before <n>\", \"Messages before\")\n .option(\"--after <n>\", \"Messages after\")\n .action((messageId, opts) => handleMessagesContext(messageId, opts));\n\n// ── Skills subcommand ──────────────────────────────────────────────────────\n\nconst skills = program\n .command(\"skills\", { hidden: true })\n .description(\"Browse and load skills\");\n\nskills\n .command(\"list\")\n .description(\"List available skills\")\n .action(() => handleSkillsList());\n\nskills\n .command(\"load\")\n .description(\"Load a skill by ID\")\n .argument(\"<skill-id>\", \"Skill ID\")\n .action((skillId) => handleSkillsLoad(skillId));\n\n// ── Config subcommand ──────────────────────────────────────────────────────\n\nconst config = program\n .command(\"config\", { hidden: true })\n .description(\"View team config snapshots\");\n\nconfig\n .command(\"list\")\n .description(\"List config snapshots for an org\")\n .requiredOption(\"--org <slug>\", \"Organization slug\")\n .option(\"--repo <full-name>\", \"Filter by repo (owner/name)\")\n .action((opts) => handleConfigList(opts));\n\nconfig\n .command(\"detail\")\n .description(\"Get config snapshot detail\")\n .requiredOption(\"--org <slug>\", \"Organization slug\")\n .option(\"--user <username>\", \"GitHub username\")\n .option(\"--repo <full-name>\", \"Repository (owner/name)\")\n .action((opts) => handleConfigDetail(opts));\n\n// ────────────────────────────────────────────────────────────────────────────\n\nprogram.parseAsync(process.argv).catch((err) => {\n Sentry.captureException(err);\n console.error(err);\n process.exit(1);\n});\n","import ora from \"ora\";\nimport pc from \"picocolors\";\nimport { getValidToken, readTokens } from \"../auth/token-store.js\";\nimport { createApiClient } from \"../convex-client.js\";\nimport { CONVEX_URL } from \"../config.js\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { parsePanopticonRunning } from \"./daemon.js\";\nimport { loadSyncConfig } from \"@fml-inc/panopticon/sync\";\nimport { syncPending } from \"@fml-inc/panopticon/api\";\n\ninterface CheckResult {\n label: string;\n status: \"ok\" | \"warn\" | \"fail\";\n detail: string;\n}\n\nfunction reportResult(\n result: CheckResult,\n spinner: ReturnType<typeof ora> | null,\n): void {\n const text = `${result.label} — ${result.detail}`;\n if (spinner) {\n switch (result.status) {\n case \"ok\":\n spinner.succeed(text);\n break;\n case \"warn\":\n spinner.warn(text);\n break;\n case \"fail\":\n spinner.fail(text);\n break;\n }\n } else {\n const icon =\n result.status === \"ok\"\n ? pc.green(\"✓\")\n : result.status === \"warn\"\n ? pc.yellow(\"!\")\n : pc.red(\"✗\");\n console.log(` ${icon} ${result.label} — ${result.detail}`);\n }\n}\n\nexport async function handleDoctor(opts: { json?: boolean }): Promise<void> {\n const isTTY = !opts.json && process.stdout.isTTY === true;\n const checks: CheckResult[] = [];\n\n function startSpinner(label: string): ReturnType<typeof ora> | null {\n if (!isTTY) return null;\n return ora({ text: `Checking ${label}...`, indent: 2 }).start();\n }\n\n function pushAndReport(\n result: CheckResult,\n spinner: ReturnType<typeof ora> | null,\n ): void {\n checks.push(result);\n if (!opts.json) {\n reportResult(result, spinner);\n }\n }\n\n if (!opts.json && !isTTY) {\n console.log(\"\");\n }\n\n // 1. Auth check\n let token: string | null = null;\n {\n const spinner = startSpinner(\"auth\");\n token = await getValidToken();\n if (token) {\n const stored = readTokens();\n const detail = stored?.user?.email\n ? `Logged in as ${stored.user.email}`\n : \"Token present\";\n pushAndReport({ label: \"Auth\", status: \"ok\", detail }, spinner);\n } else {\n pushAndReport(\n {\n label: \"Auth\",\n status: \"fail\",\n detail: \"No token. Run `fml login`\",\n },\n spinner,\n );\n }\n }\n\n // 2. Panopticon checks (imported dynamically to avoid hard dep on published version)\n {\n const spinner = startSpinner(\"panopticon\");\n try {\n const { doctor } = await import(\"@fml-inc/panopticon/doctor\");\n const result = await doctor();\n // Close the spinner before reporting individual checks\n if (spinner) spinner.stop();\n for (const check of result.checks) {\n pushAndReport(check, null);\n }\n } catch {\n // Panopticon doctor not available — check via CLI\n const result = panopticonExec(\"status\");\n if (result.ok) {\n pushAndReport(\n { label: \"Panopticon\", status: \"ok\", detail: \"Available\" },\n spinner,\n );\n } else {\n pushAndReport(\n {\n label: \"Panopticon\",\n status: \"fail\",\n detail: \"Not found. Run `fml install`\",\n },\n spinner,\n );\n }\n }\n }\n\n // 3. Sync status (only if authenticated)\n if (token) {\n const spinner = startSpinner(\"sync\");\n try {\n const syncConfig = loadSyncConfig();\n const targets = syncConfig.targets;\n if (targets.length === 0) {\n pushAndReport(\n {\n label: \"Sync\",\n status: \"warn\",\n detail: \"No sync targets configured\",\n },\n spinner,\n );\n } else {\n // Close the spinner before reporting per-target\n if (spinner) spinner.stop();\n\n for (const target of targets) {\n try {\n const result = await syncPending(target.name);\n if (result.totalPending === 0) {\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: \"ok\",\n detail: \"Up to date\",\n },\n null,\n );\n } else {\n const parts = Object.entries(result.tables)\n .sort(([, a], [, b]) => b.pending - a.pending)\n .slice(0, 3)\n .map(([t, v]) => `${v.pending} ${t}`);\n const detail =\n parts.length < Object.keys(result.tables).length\n ? `${result.totalPending} pending (${parts.join(\", \")}, ...)`\n : `${result.totalPending} pending (${parts.join(\", \")})`;\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: result.totalPending > 1000 ? \"warn\" : \"ok\",\n detail,\n },\n null,\n );\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: \"warn\",\n detail: `Could not query watermarks (${msg})`,\n },\n null,\n );\n }\n }\n }\n } catch (err) {\n pushAndReport(\n {\n label: \"Sync\",\n status: \"warn\",\n detail: err instanceof Error ? err.message : \"Check failed\",\n },\n spinner,\n );\n }\n }\n\n // 4. Daemon checks\n {\n const spinner = startSpinner(\"panopticon daemon\");\n const isRunning = parsePanopticonRunning();\n if (isRunning) {\n pushAndReport(\n {\n label: \"Panopticon daemon\",\n status: \"ok\",\n detail: \"running\",\n },\n spinner,\n );\n } else {\n pushAndReport(\n {\n label: \"Panopticon daemon\",\n status: \"warn\",\n detail: \"Not running. Run `fml start`\",\n },\n spinner,\n );\n }\n }\n\n // 5. API reachability\n {\n const spinner = startSpinner(\"API\");\n if (token) {\n try {\n const result = await createApiClient(token).callBackend(\"ping\", {});\n if (result.ok) {\n pushAndReport(\n {\n label: \"API\",\n status: \"ok\",\n detail: `Reachable at ${CONVEX_URL}`,\n },\n spinner,\n );\n } else {\n // Backend responded but tool failed — still reachable\n pushAndReport(\n {\n label: \"API\",\n status: \"ok\",\n detail: `Reachable at ${CONVEX_URL}`,\n },\n spinner,\n );\n }\n } catch (err) {\n pushAndReport(\n {\n label: \"API\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : \"Unreachable\",\n },\n spinner,\n );\n }\n } else {\n pushAndReport(\n { label: \"API\", status: \"fail\", detail: \"Auth required\" },\n spinner,\n );\n }\n }\n\n // JSON output\n if (opts.json) {\n console.log(JSON.stringify(checks, null, 2));\n return;\n }\n\n // Summary\n console.log(\"\");\n const passed = checks.filter((c) => c.status === \"ok\").length;\n const failed = checks.filter((c) => c.status === \"fail\").length;\n const warned = checks.filter((c) => c.status === \"warn\").length;\n\n const parts: string[] = [];\n if (passed > 0) parts.push(pc.green(`${passed} passed`));\n if (warned > 0)\n parts.push(pc.yellow(`${warned} warning${warned > 1 ? \"s\" : \"\"}`));\n if (failed > 0) parts.push(pc.red(`${failed} failed`));\n\n console.log(` ${parts.join(\", \")}`);\n console.log(\"\");\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { addTarget, listTargets } from \"@fml-inc/panopticon/sync\";\nimport { printBanner } from \"../banner.js\";\nimport {\n DEFAULT_PROD_URL,\n DEFAULT_TARGET_NAME,\n writeEnvConfig,\n} from \"../config.js\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { FML_DATA_DIR, FML_LOG_DIR } from \"../dirs.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\n\nconst CLAUDE_DIR = path.join(os.homedir(), \".claude\");\nconst CLAUDE_SETTINGS_PATH = path.join(CLAUDE_DIR, \"settings.json\");\nconst MARKETPLACE_DIR = path.join(\n os.homedir(),\n \".local\",\n \"share\",\n \"claude-plugins\",\n);\n\nfunction getPluginRoot(): string {\n let dir = path.dirname(fileURLToPath(import.meta.url));\n // At runtime we're in dist/ (tsup bundles into entry point), go up one level\n dir = path.resolve(dir, \"..\");\n return dir;\n}\n\nfunction readJsonFile(filePath: string): Record<string, unknown> | null {\n try {\n return JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction writeJsonFile(filePath: string, data: Record<string, unknown>): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\\n`);\n}\n\nexport async function handleInstall(): Promise<void> {\n const pluginRoot = getPluginRoot();\n console.log(\"Installing fml...\\n\");\n\n // 1. Run panopticon install (DB, pricing, hooks, marketplace, skills, server)\n console.log(\"[1/4] Running panopticon install...\");\n const result = panopticonExec(\"install\", { timeout: 60_000 });\n if (result.ok) {\n // Indent panopticon output for readability\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.log(` ${line}`);\n }\n } else {\n console.error(\" panopticon install failed:\");\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.error(` ${line}`);\n }\n }\n console.log();\n\n // 2. Ensure fml-specific directories exist\n console.log(\"[2/4] Creating fml directories...\");\n for (const dir of [FML_DATA_DIR, FML_LOG_DIR]) {\n fs.mkdirSync(dir, { recursive: true });\n }\n console.log(` ${FML_DATA_DIR}`);\n console.log(` ${FML_LOG_DIR}\\n`);\n\n // 3. Register fml plugin in local marketplace + Claude Code settings\n console.log(\"[3/4] Setting up fml plugin...\");\n fs.mkdirSync(path.join(MARKETPLACE_DIR, \".claude-plugin\"), {\n recursive: true,\n });\n\n const manifestPath = path.join(\n MARKETPLACE_DIR,\n \".claude-plugin\",\n \"marketplace.json\",\n );\n const manifest = readJsonFile(manifestPath) ?? {\n name: \"local-plugins\",\n owner: { name: os.userInfo().username },\n plugins: [],\n };\n\n const plugins = (manifest.plugins as Array<Record<string, unknown>>) ?? [];\n if (!plugins.some((p) => p.name === \"fml\")) {\n plugins.push({\n name: \"fml\",\n source: \"./fml\",\n description: \"FML agent tools for Claude Code\",\n });\n manifest.plugins = plugins;\n }\n writeJsonFile(manifestPath, manifest);\n\n // Symlink plugin source into marketplace\n const marketplaceLink = path.join(MARKETPLACE_DIR, \"fml\");\n try {\n fs.unlinkSync(marketplaceLink);\n } catch {}\n fs.rmSync(marketplaceLink, { recursive: true, force: true });\n fs.symlinkSync(pluginRoot, marketplaceLink, \"dir\");\n console.log(` Marketplace: ${MARKETPLACE_DIR}`);\n console.log(` Plugin: ${pluginRoot}`);\n\n // Layer fml-specific settings on top for Claude Code\n const settings = (readJsonFile(CLAUDE_SETTINGS_PATH) ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n settings.extraKnownMarketplaces = settings.extraKnownMarketplaces ?? {};\n settings.extraKnownMarketplaces[\"local-plugins\"] = {\n source: { source: \"directory\", path: MARKETPLACE_DIR },\n };\n settings.enabledPlugins = settings.enabledPlugins ?? {};\n settings.enabledPlugins[\"fml@local-plugins\"] = true;\n writeJsonFile(CLAUDE_SETTINGS_PATH, settings);\n console.log(` Claude settings: ${CLAUDE_SETTINGS_PATH}\\n`);\n\n // 4. Auto-configure sync target (best-effort)\n console.log(\"[4/4] Configuring sync target...\");\n const prodSyncUrl = DEFAULT_PROD_URL.replace(\".cloud\", \".site\");\n const existingTargets = listTargets();\n const existingProd = existingTargets.find((t) => t.url === prodSyncUrl);\n if (existingProd) {\n console.log(` Production target already configured`);\n } else {\n const ghToken = resolveGitHubToken();\n if (ghToken) {\n addTarget({\n name: DEFAULT_TARGET_NAME,\n url: prodSyncUrl,\n tokenCommand: \"gh auth token\",\n });\n console.log(` Target \"${DEFAULT_TARGET_NAME}\": ${prodSyncUrl}`);\n console.log(\" Auth: gh auth token\");\n } else {\n console.log(\n \" Skipped (no GitHub token). Run `fml sync setup` later.\",\n );\n }\n }\n\n // Set active env to the default sync target\n writeEnvConfig({ active: DEFAULT_TARGET_NAME });\n\n console.log(\"\");\n printBanner();\n console.log(\"Done! Start a new coding session to activate.\\n\");\n console.log(\"\\nNext steps:\");\n console.log(\" fml login Sign in to your FML account\");\n console.log(\" fml org Select organization\");\n console.log(\" fml sync status Check sync status\");\n console.log(\" fml status Verify setup\");\n}\n","import pc from \"picocolors\";\n\nconst LOGO_LINES = [\n \" ▄██▀ ██▄██▄██ ██\",\n \" ██ ██ ██ ██ ██\",\n \"█████ ██ ██ ██\",\n \" ██ ██ ██ ████\",\n \" ▀▀ ▀▀ ▀▀ ▀▀▀▀\",\n];\n\nexport function printBanner(): void {\n console.log(\"\");\n for (let i = 0; i < LOGO_LINES.length; i++) {\n const color = i < 3 ? pc.blue : pc.cyan;\n console.log(\" \" + color(LOGO_LINES[i]));\n }\n console.log(\"\");\n}\n","import { execSync } from \"node:child_process\";\n\nconst TOKEN_TTL_MS = 5 * 60 * 1000;\n\nlet cachedGitHubToken: { value: string; expiresAt: number } | null = null;\n\nexport function resolveGitHubToken(): string | null {\n if (cachedGitHubToken && Date.now() < cachedGitHubToken.expiresAt) {\n return cachedGitHubToken.value;\n }\n\n const envToken = process.env.PANOPTICON_GITHUB_TOKEN;\n if (envToken) {\n cachedGitHubToken = {\n value: envToken,\n expiresAt: Date.now() + TOKEN_TTL_MS,\n };\n return envToken;\n }\n\n try {\n const token = execSync(\"gh auth token\", {\n encoding: \"utf-8\",\n timeout: 5000,\n }).trim();\n if (token) {\n cachedGitHubToken = {\n value: token,\n expiresAt: Date.now() + TOKEN_TTL_MS,\n };\n }\n return token || null;\n } catch {\n return null;\n }\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { FML_DATA_DIR, FML_LOG_DIR } from \"../dirs.js\";\n\nconst CLAUDE_DIR = path.join(os.homedir(), \".claude\");\nconst CLAUDE_SETTINGS_PATH = path.join(CLAUDE_DIR, \"settings.json\");\nconst MARKETPLACE_DIR = path.join(\n os.homedir(),\n \".local\",\n \"share\",\n \"claude-plugins\",\n);\n\nfunction readJsonFile(filePath: string): Record<string, unknown> | null {\n try {\n return JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction writeJsonFile(filePath: string, data: Record<string, unknown>): void {\n fs.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\\n`);\n}\n\nexport function handleUninstall(opts: {\n purge?: boolean;\n target?: string;\n}): void {\n const targetSpecific = opts.target && opts.target !== \"all\";\n\n console.log(\"Uninstalling fml...\\n\");\n\n // 1. Remove fml plugin from Claude Code settings\n if (targetSpecific) {\n console.log(\"[1/4] Skipping plugin settings (target-specific uninstall)\");\n } else {\n console.log(\"[1/4] Removing plugin from Claude Code settings...\");\n const settings = readJsonFile(CLAUDE_SETTINGS_PATH) as Record<\n string,\n Record<string, unknown>\n > | null;\n if (settings) {\n if (settings.enabledPlugins) {\n delete settings.enabledPlugins[\"fml@local-plugins\"];\n }\n if (settings.extraKnownMarketplaces) {\n delete settings.extraKnownMarketplaces[\"local-plugins\"];\n }\n writeJsonFile(CLAUDE_SETTINGS_PATH, settings);\n console.log(` Updated ${CLAUDE_SETTINGS_PATH}`);\n } else {\n console.log(\" No settings file found, skipping\");\n }\n }\n\n // 2. Remove marketplace symlink and manifest entry\n if (targetSpecific) {\n console.log(\"[2/4] Skipping marketplace (target-specific uninstall)\");\n } else {\n console.log(\"[2/4] Removing marketplace registration...\");\n const marketplaceLink = path.join(MARKETPLACE_DIR, \"fml\");\n try {\n fs.rmSync(marketplaceLink, { recursive: true, force: true });\n console.log(` Removed ${marketplaceLink}`);\n } catch {\n console.log(\" No marketplace link found, skipping\");\n }\n\n const manifestPath = path.join(\n MARKETPLACE_DIR,\n \".claude-plugin\",\n \"marketplace.json\",\n );\n const manifest = readJsonFile(manifestPath);\n if (manifest && Array.isArray(manifest.plugins)) {\n manifest.plugins = (\n manifest.plugins as Array<Record<string, unknown>>\n ).filter((p) => p.name !== \"fml\");\n writeJsonFile(manifestPath, manifest);\n console.log(` Updated ${manifestPath}`);\n }\n }\n\n // 3. Run panopticon uninstall\n console.log(\"[3/4] Running panopticon uninstall...\");\n const panoArgs = [\"uninstall\"];\n if (opts.target) panoArgs.push(\"--target\", opts.target);\n if (opts.purge) panoArgs.push(\"--purge\");\n const result = panopticonExec(...panoArgs, { timeout: 30_000 });\n if (result.ok) {\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.log(` ${line}`);\n }\n } else {\n console.error(\" panopticon uninstall failed:\");\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.error(` ${line}`);\n }\n }\n\n // 4. Remove fml data and logs (only with --purge, never for target-specific)\n if (targetSpecific) {\n console.log(\"[4/4] Skipping data removal (target-specific uninstall)\");\n } else if (opts.purge) {\n console.log(\"[4/4] Removing fml data and logs...\");\n for (const dir of [FML_DATA_DIR, FML_LOG_DIR]) {\n try {\n fs.rmSync(dir, { recursive: true, force: true });\n console.log(` Removed ${dir}`);\n } catch {\n console.log(` Could not remove ${dir}`);\n }\n }\n } else {\n console.log(\"[4/4] Keeping fml data (use --purge to remove)\");\n }\n\n console.log(\"\\nDone! FML has been uninstalled.\");\n}\n","import { execSync } from \"node:child_process\";\nimport { Sentry } from \"../sentry.js\";\n\ndeclare const __FML_PLUGIN_VERSION__: string;\n\nexport async function handleUpdate(): Promise<void> {\n const currentVersion =\n typeof __FML_PLUGIN_VERSION__ !== \"undefined\"\n ? __FML_PLUGIN_VERSION__\n : \"unknown\";\n\n console.log(`Current: ${currentVersion}`);\n console.log(\"Updating via npm...\\n\");\n\n try {\n const env = { ...process.env };\n delete env.npm_config_registry;\n\n execSync(\"npm install -g @fml-inc/fml@latest\", {\n stdio: \"inherit\",\n timeout: 120_000,\n env,\n });\n\n console.log(\"\\nUpdated. Run `fml install --skip-build` to reconfigure.\");\n } catch (err: unknown) {\n Sentry.captureException(err);\n const msg =\n err instanceof Error\n ? ((err as Error & { stderr?: Buffer }).stderr?.toString() ??\n err.message)\n : String(err);\n console.error(\"Update failed:\", msg);\n process.exit(1);\n }\n}\n","import crypto from \"node:crypto\";\nimport http from \"node:http\";\nimport { CONVEX_URL, WORKOS_API_URL, WORKOS_AUTH_URL } from \"../config.js\";\nimport { writeTokens } from \"./token-store.js\";\n\n/**\n * Fetch the WorkOS client ID from the active Convex deployment.\n * This allows each environment to use its own WorkOS configuration.\n */\nasync function fetchWorkosClientId(): Promise<string> {\n const { ConvexHttpClient } = await import(\"convex/browser\");\n const client = new ConvexHttpClient(CONVEX_URL);\n const ref =\n \"public_config:getAuthConfig\" as unknown as import(\"convex/server\").FunctionReference<\"query\">;\n const result = (await client.query(ref, {})) as {\n workosClientId: string;\n };\n return result.workosClientId;\n}\n\n/**\n * Run the WorkOS PKCE OAuth flow:\n * 1. Generate code_verifier + code_challenge\n * 2. Start local HTTP server for callback\n * 3. Open browser to WorkOS authorization URL\n * 4. Receive callback with authorization code\n * 5. Exchange code for tokens\n * 6. Store tokens\n */\nexport async function login(): Promise<{\n email: string;\n name: string;\n}> {\n // Fetch the WorkOS client ID from the active Convex deployment\n const clientId = await fetchWorkosClientId();\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = crypto.randomBytes(32).toString(\"base64url\");\n const codeChallenge = crypto\n .createHash(\"sha256\")\n .update(codeVerifier)\n .digest(\"base64url\");\n\n // Generate state for CSRF protection (defense-in-depth alongside PKCE)\n const state = crypto.randomBytes(16).toString(\"hex\");\n\n // Find a free port and start callback server (pass state for CSRF verification)\n const { port, waitForCode, close } = await startCallbackServer(state);\n\n const redirectUri = `http://localhost:${port}/callback`;\n const authUrl = new URL(`${WORKOS_AUTH_URL}/user_management/authorize`);\n authUrl.searchParams.set(\"client_id\", clientId);\n authUrl.searchParams.set(\"redirect_uri\", redirectUri);\n authUrl.searchParams.set(\"response_type\", \"code\");\n authUrl.searchParams.set(\"code_challenge\", codeChallenge);\n authUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authUrl.searchParams.set(\"provider\", \"authkit\");\n authUrl.searchParams.set(\"state\", state);\n\n // Open browser\n const open = (await import(\"open\")).default;\n await open(authUrl.toString());\n\n console.log(\"\\nOpening browser for login...\");\n console.log(`If it doesn't open, visit: ${authUrl.toString()}\\n`);\n\n // Wait for the callback\n const code = await waitForCode();\n close();\n\n // Exchange code for tokens\n const tokenResponse = await fetch(\n `${WORKOS_API_URL}/user_management/authenticate`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"authorization_code\",\n client_id: clientId,\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n }),\n },\n );\n\n if (!tokenResponse.ok) {\n const error = await tokenResponse.text();\n throw new Error(`Token exchange failed: ${error}`);\n }\n\n const data = (await tokenResponse.json()) as {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n user: {\n id: string;\n email: string;\n first_name?: string;\n last_name?: string;\n };\n };\n\n const userName = [data.user.first_name, data.user.last_name]\n .filter(Boolean)\n .join(\" \");\n\n writeTokens({\n accessToken: data.access_token,\n refreshToken: data.refresh_token,\n expiresAt: Date.now() + (data.expires_in ?? 300) * 1000,\n user: {\n id: data.user.id,\n email: data.user.email,\n name: userName,\n },\n workosClientId: clientId,\n });\n\n return { email: data.user.email, name: userName };\n}\n\nfunction startCallbackServer(expectedState: string): Promise<{\n port: number;\n waitForCode: () => Promise<string>;\n close: () => void;\n}> {\n return new Promise((resolve, reject) => {\n let resolveCode: (code: string) => void;\n let rejectCode: (err: Error) => void;\n\n const codePromise = new Promise<string>((res, rej) => {\n resolveCode = res;\n rejectCode = rej;\n });\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost`);\n\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const error = url.searchParams.get(\"error\");\n const returnedState = url.searchParams.get(\"state\");\n\n // Verify state parameter to prevent CSRF\n if (returnedState !== expectedState) {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login failed</h1><p>Invalid state parameter. You can close this tab.</p></body></html>\",\n );\n rejectCode(new Error(\"OAuth state mismatch — possible CSRF attack\"));\n return;\n }\n\n if (error) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login failed</h1><p>You can close this tab.</p></body></html>\",\n );\n rejectCode(new Error(`OAuth error: ${error}`));\n return;\n }\n\n if (code) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login successful!</h1><p>You can close this tab and return to the terminal.</p></body></html>\",\n );\n resolveCode(code);\n return;\n }\n\n res.writeHead(400);\n res.end(\"Missing code parameter\");\n return;\n }\n\n res.writeHead(404);\n res.end(\"Not found\");\n });\n\n // Listen on a random available port\n server.listen(0, \"127.0.0.1\", () => {\n const addr = server.address();\n if (!addr || typeof addr === \"string\") {\n reject(new Error(\"Failed to start callback server\"));\n return;\n }\n\n resolve({\n port: addr.port,\n waitForCode: () => codePromise,\n close: () => server.close(),\n });\n });\n\n server.on(\"error\", reject);\n\n // Timeout after 5 minutes\n setTimeout(\n () => {\n rejectCode(new Error(\"Login timed out (5 minutes)\"));\n server.close();\n },\n 5 * 60 * 1000,\n );\n });\n}\n","import type { FunctionReference } from \"convex/server\";\nimport { login } from \"../auth/oauth.js\";\nimport { getValidToken, setSelectedOrg } from \"../auth/token-store.js\";\nimport { createApiClient } from \"../convex-client.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\nimport { CONVEX_URL, getActiveEnv } from \"../config.js\";\nimport { Sentry } from \"../sentry.js\";\n\n/**\n * After login, link the user's GitHub identity to their FML account\n * so that sync data (authenticated via GitHub token) can be attributed.\n */\nasync function linkGitHubIdentity(): Promise<void> {\n const token = resolveGitHubToken();\n if (!token) {\n console.warn(\"[fml] No GitHub token available — skipping identity link\");\n return;\n }\n\n try {\n const response = await fetch(\"https://api.github.com/user\", {\n headers: {\n Authorization: `Bearer ${token}`,\n Accept: \"application/vnd.github+json\",\n },\n });\n if (!response.ok) {\n console.warn(\n `[fml] GitHub API returned ${response.status} — skipping identity link`,\n );\n return;\n }\n\n const user = (await response.json()) as {\n login: string;\n id: number;\n email: string | null;\n };\n\n const fmlToken = await getValidToken();\n if (!fmlToken) {\n console.warn(\"[fml] No FML token available — skipping identity link\");\n return;\n }\n\n if (!CONVEX_URL) {\n console.warn(\n \"[fml] No Convex URL configured — skipping identity link (run fml install first)\",\n );\n return;\n }\n\n const { ConvexHttpClient } = await import(\"convex/browser\");\n const client = new ConvexHttpClient(CONVEX_URL);\n client.setAuth(fmlToken);\n\n const ref =\n \"user/panopticon:linkGitHubIdentity\" as unknown as FunctionReference<\"mutation\">;\n await client.mutation(ref, {\n githubUsername: user.login,\n githubId: user.id,\n githubEmail: user.email ?? undefined,\n });\n\n console.log(`Linked GitHub account: ${user.login}`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[fml] Failed to link GitHub identity: ${msg}`);\n }\n}\n\n// Config snapshots are now synced automatically via panopticon sync —\n// no manual upload needed after login.\n\n/**\n * After login, select and persist the user's org.\n * Single-org users get auto-selected; multi-org users get the first org\n * (can be changed later via `fml org`).\n */\nasync function selectOrg(): Promise<void> {\n try {\n const token = await getValidToken();\n if (!token) return;\n\n const api = createApiClient(token);\n const orgs = await api.queryOrgs();\n if (orgs.length === 0) return;\n\n const org = orgs[0];\n const slug = org.slug ?? org.name;\n setSelectedOrg(slug);\n console.log(`Selected org: ${org.name} (${slug})`);\n } catch {\n // Non-fatal — org selection can happen later via `fml org`\n }\n}\n\nexport async function handleLogin(): Promise<void> {\n const { name: envName } = getActiveEnv();\n\n // Skip OAuth if already authenticated — still run post-login tasks\n const existingToken = await getValidToken();\n if (existingToken) {\n const { readTokens } = await import(\"../auth/token-store.js\");\n const stored = readTokens();\n console.log(\n `Already logged in as ${stored?.user.name} (${stored?.user.email}) on ${envName}.`,\n );\n\n await linkGitHubIdentity();\n await selectOrg();\n\n console.log(\"You're all set! Restart Claude Code to use FML tools.\");\n process.exit(0);\n }\n\n console.log(`Signing in to FML (${envName})...`);\n try {\n const { email, name } = await login();\n console.log(`\\nLogged in as ${name} (${email})`);\n\n await linkGitHubIdentity();\n await selectOrg();\n\n console.log(\"You're all set! Restart Claude Code to use FML tools.\");\n process.exit(0);\n } catch (err: unknown) {\n Sentry.captureException(err);\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`Login failed: ${msg}`);\n process.exit(1);\n }\n}\n","import fs from \"node:fs\";\nimport { AUTH_STORE_PATH } from \"../config.js\";\n\nexport function handleLogout(): void {\n try {\n fs.unlinkSync(AUTH_STORE_PATH);\n } catch {\n // File doesn't exist, that's fine\n }\n console.log(\"Logged out. Stored credentials cleared.\");\n}\n","import { createApiClient } from \"../convex-client.js\";\nimport {\n getSelectedOrg,\n getValidToken,\n setSelectedOrg,\n} from \"../auth/token-store.js\";\n\nexport async function handleOrg(slug?: string): Promise<void> {\n const token = await getValidToken();\n if (!token) {\n console.error(\"Not logged in. Run `fml login` first.\");\n process.exit(1);\n }\n\n const api = createApiClient(token);\n const orgs = await api.queryOrgs();\n\n if (orgs.length === 0) {\n console.error(\"No organizations found.\");\n process.exit(1);\n }\n\n const current = getSelectedOrg();\n\n // No slug provided — show current selection and available orgs\n if (!slug) {\n console.log(\"Organizations:\\n\");\n for (const org of orgs) {\n const orgSlug = org.slug ?? org.name;\n const marker = orgSlug === current ? \" (selected)\" : \"\";\n console.log(` ${orgSlug}${marker}`);\n }\n if (!current) {\n console.log(\"\\nNo org selected. Run `fml org <slug>` to select one.\");\n }\n return;\n }\n\n // Slug provided — select it\n const match = orgs.find(\n (o) => (o.slug ?? o.name) === slug || o.name === slug,\n );\n if (!match) {\n console.error(\n `Organization \"${slug}\" not found. Available: ${orgs.map((o) => o.slug ?? o.name).join(\", \")}`,\n );\n process.exit(1);\n }\n\n const matchSlug = match.slug ?? match.name;\n setSelectedOrg(matchSlug);\n console.log(`Selected org: ${match.name} (${matchSlug})`);\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nconst APP_BASE_URL = \"https://app.fml.app\";\n\nexport async function handleOpen(opts: { json?: boolean }): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login` first.\");\n process.exit(1);\n }\n\n let slug: string;\n try {\n const orgs = await api.queryOrgs();\n if (orgs.length === 0) {\n console.error(\"No organizations found.\");\n process.exit(1);\n }\n slug = orgs[0].slug ?? orgs[0].name;\n } catch {\n console.error(\"Could not fetch organizations. Opening base URL.\");\n slug = \"\";\n }\n\n const url = slug ? `${APP_BASE_URL}/${slug}` : APP_BASE_URL;\n\n if (opts.json) {\n console.log(JSON.stringify({ url }));\n } else {\n const openBrowser = (await import(\"open\")).default;\n await openBrowser(url);\n }\n}\n","import { getValidToken, readTokens } from \"../auth/token-store.js\";\nimport { getActiveEnv } from \"../config.js\";\n\nexport async function handleStatus(): Promise<void> {\n const { name, convexUrl } = getActiveEnv();\n console.log(`Environment: ${name}`);\n console.log(` Convex: ${convexUrl}\\n`);\n\n const tokens = readTokens();\n\n if (!tokens) {\n console.log(\"Not authenticated. Run `fml login` to sign in.\");\n return;\n }\n\n const tokenValid = await getValidToken();\n\n console.log(\"Authentication:\");\n console.log(` User: ${tokens.user.name} (${tokens.user.email})`);\n console.log(\n ` Token: ${tokenValid ? \"valid\" : \"expired (needs refresh/re-login)\"}`,\n );\n console.log(` Org: ${tokens.orgSlug ?? \"(none — run `fml org <slug>`)\"}`);\n}\n","import { CONVEX_URL, DEFAULT_TARGET_NAME } from \"../config.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\nimport {\n addTarget,\n removeTarget,\n listTargets,\n loadSyncConfig,\n saveSyncConfig,\n} from \"@fml-inc/panopticon/sync\";\nimport { syncPending, syncReset } from \"@fml-inc/panopticon/api\";\n\nconst FML_SYNC_URL = CONVEX_URL.replace(\".cloud\", \".site\");\n\n// ── Setup (convenience shortcut) ────────────────────────────────────────────\n\nexport async function handleSyncSetup(): Promise<void> {\n console.log(\"FML Sync Setup\\n\");\n\n const token = resolveGitHubToken();\n if (!token) {\n console.error(\n \"No GitHub token found. Set PANOPTICON_GITHUB_TOKEN or install gh CLI.\",\n );\n process.exit(1);\n }\n console.log(\"GitHub token: found\");\n\n addTarget({\n name: DEFAULT_TARGET_NAME,\n url: FML_SYNC_URL,\n tokenCommand: \"gh auth token\",\n });\n\n console.log(`\\nSync target \"${DEFAULT_TARGET_NAME}\" configured:`);\n console.log(` URL: ${FML_SYNC_URL}`);\n console.log(` Auth: gh auth token (refreshed every 5 min)`);\n console.log(`\\nRestart panopticon to activate: fml stop && fml start`);\n}\n\n// ── List ─────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncList(): Promise<void> {\n const targets = listTargets();\n\n if (targets.length === 0) {\n console.log(\n \"No sync targets configured. Run `fml sync setup` or `fml sync add`.\",\n );\n return;\n }\n\n console.log(\"Sync targets:\\n\");\n for (const t of targets) {\n const auth = t.token\n ? \"static token\"\n : t.tokenCommand\n ? `command: ${t.tokenCommand}`\n : \"none\";\n console.log(` ${t.name}`);\n console.log(` URL: ${t.url}`);\n console.log(` Auth: ${auth}`);\n }\n}\n\n// ── Add ──────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncAdd(\n name: string,\n url: string,\n opts: { tokenCmd?: string; token?: string },\n): Promise<void> {\n const existing = listTargets();\n if (existing.some((t) => t.name === name)) {\n console.error(\n `Target \"${name}\" already exists. Use \\`fml sync edit\\` to modify it.`,\n );\n process.exit(1);\n }\n\n addTarget({\n name,\n url,\n tokenCommand: opts.tokenCmd,\n token: opts.token,\n });\n\n console.log(`Sync target \"${name}\" added:`);\n console.log(` URL: ${url}`);\n if (opts.tokenCmd) console.log(` Auth: command: ${opts.tokenCmd}`);\n else if (opts.token) console.log(\" Auth: static token\");\n else console.log(\" Auth: none\");\n console.log(\"\\nRestart panopticon to activate: fml stop && fml start\");\n}\n\n// ── Remove ───────────────────────────────────────────────────────────────────\n\nexport async function handleSyncRemove(name: string): Promise<void> {\n const removed = removeTarget(name);\n if (removed) {\n console.log(`Sync target \"${name}\" removed.`);\n console.log(\"Restart panopticon to apply: fml stop && fml start\");\n } else {\n console.error(`Target \"${name}\" not found.`);\n process.exit(1);\n }\n}\n\n// ── Edit ─────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncEdit(\n name: string,\n opts: { url?: string; tokenCmd?: string; token?: string },\n): Promise<void> {\n const config = loadSyncConfig();\n const target = config.targets.find((t) => t.name === name);\n if (!target) {\n console.error(`Target \"${name}\" not found.`);\n process.exit(1);\n }\n\n if (opts.url) target.url = opts.url;\n if (opts.tokenCmd) {\n target.tokenCommand = opts.tokenCmd;\n delete target.token;\n }\n if (opts.token) {\n target.token = opts.token;\n delete target.tokenCommand;\n }\n\n saveSyncConfig(config);\n console.log(`Sync target \"${name}\" updated:`);\n console.log(` URL: ${target.url}`);\n const auth = target.token\n ? \"static token\"\n : target.tokenCommand\n ? `command: ${target.tokenCommand}`\n : \"none\";\n console.log(` Auth: ${auth}`);\n console.log(\"\\nRestart panopticon to apply: fml stop && fml start\");\n}\n\n// ── Status ───────────────────────────────────────────────────────────────────\n\nexport async function handleSyncStatus(): Promise<void> {\n const targets = listTargets();\n\n if (targets.length === 0) {\n console.log(\"No sync targets configured. Run `fml sync setup` first.\");\n return;\n }\n\n for (const target of targets) {\n const auth = target.token\n ? \"static token\"\n : target.tokenCommand\n ? `command: ${target.tokenCommand}`\n : \"none\";\n console.log(`${target.name}:`);\n console.log(` URL: ${target.url}`);\n console.log(` Auth: ${auth}`);\n\n try {\n const result = await syncPending(target.name);\n if (result.totalPending === 0) {\n console.log(\" Status: up to date\");\n } else {\n console.log(` Pending: ${result.totalPending} total`);\n for (const [table, info] of Object.entries(result.tables)) {\n console.log(\n ` ${table}: ${info.pending} pending (${info.synced} / ${info.total})`,\n );\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(` Status: unavailable (${msg})`);\n }\n console.log();\n }\n}\n\n// ── Reset ────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncReset(targetName?: string): Promise<void> {\n await syncReset(targetName ?? DEFAULT_TARGET_NAME);\n console.log(\n `Sync watermarks for \"${targetName ?? DEFAULT_TARGET_NAME}\" reset to 0.`,\n );\n}\n","import { listTargets } from \"@fml-inc/panopticon/sync\";\nimport { getActiveEnv, writeEnvConfig } from \"../config.js\";\nimport { handleStop, handleStart } from \"./daemon.js\";\n\n/**\n * Show the active environment.\n */\nexport function handleEnvShow(): void {\n const { name, convexUrl } = getActiveEnv();\n console.log(`Environment: ${name}`);\n console.log(` Convex URL: ${convexUrl}`);\n}\n\n/**\n * Switch to a sync target as the active environment.\n * Automatically restarts daemons so the new URL takes effect.\n */\nexport async function handleEnvSwitch(target: string): Promise<void> {\n const targets = listTargets();\n const match = targets.find((t) => t.name === target);\n if (!match) {\n console.error(`Sync target \"${target}\" not found. Available targets:`);\n for (const t of targets) {\n console.error(` ${t.name} ${t.url}`);\n }\n console.error(\"\\nAdd a target with `fml sync add`.\");\n process.exit(1);\n }\n\n writeEnvConfig({ active: target });\n const convexUrl = match.url.replace(\".convex.site\", \".convex.cloud\");\n console.log(`Switched to ${target}: ${convexUrl}`);\n\n console.log(\"\\nRestarting daemons...\");\n handleStop();\n await handleStart();\n console.log(\n \"MCP server will pick up the change on next Claude Code session.\",\n );\n}\n","/**\n * CLI wrappers for remote FML backend data queries.\n * Each command queries the FML Convex backend via the authenticated API client.\n */\n\nimport { getAuthenticatedClient } from \"../convex-client.js\";\n\nasync function queryBackend(\n toolName: string,\n args: Record<string, unknown>,\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login` to sign in.\");\n process.exit(1);\n }\n const result = await api.callBackend(toolName, args);\n if (!result.ok) {\n console.error(result.error ?? \"Unknown error\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleActivity(opts: { since?: string }): Promise<void> {\n await queryBackend(\"get-engineering-activity\", {\n timeRange: opts.since ?? \"24h\",\n });\n}\n\nexport async function handleSessions(opts: {\n since?: string;\n limit?: string;\n}): Promise<void> {\n await queryBackend(\"list-engineering-sessions\", {\n timeRange: opts.since ?? \"24h\",\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n}\n\nexport async function handleTimeline(\n sessionId: string,\n opts: { limit?: string; offset?: string },\n): Promise<void> {\n await queryBackend(\"get-session-timeline\", {\n sessionId,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n });\n}\n\nexport async function handleSpending(opts: {\n since?: string;\n groupBy?: string;\n}): Promise<void> {\n await queryBackend(\"get-ai-spending\", {\n timeRange: opts.since ?? \"7d\",\n groupBy: opts.groupBy,\n });\n}\n\nexport async function handleSearch(\n query: string,\n opts: { since?: string; limit?: string },\n): Promise<void> {\n await queryBackend(\"search-engineering-sessions\", {\n query,\n timeRange: opts.since ?? \"7d\",\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n}\n","/**\n * Unified provider query command.\n * Routes requests to the appropriate backend tool based on provider and endpoint.\n */\n\nimport { getAuthenticatedClient } from \"../convex-client.js\";\n\nconst GENERIC_PROVIDERS = [\n \"sentry\",\n \"slack\",\n \"github\",\n \"linear\",\n \"notion\",\n \"freshdesk\",\n];\n\nconst POSTHOG_ENDPOINTS: Record<string, string> = {\n insights: \"query-posthog-insights\",\n events: \"query-posthog-events\",\n recordings: \"query-posthog-recordings\",\n \"feature-flags\": \"query-posthog-feature-flags\",\n experiments: \"query-posthog-experiments\",\n surveys: \"query-posthog-surveys\",\n hogql: \"run-posthog-hogql\",\n cohorts: \"query-posthog-cohorts\",\n};\n\nconst AMPLITUDE_ENDPOINTS: Record<string, string> = {\n events: \"query-amplitude-events\",\n funnel: \"query-amplitude-funnel\",\n retention: \"query-amplitude-retention\",\n chart: \"get-amplitude-chart\",\n \"list-events\": \"list-amplitude-events\",\n};\n\nconst META_ADS_ENDPOINTS: Record<string, string> = {\n accounts: \"list-meta-ad-accounts\",\n campaigns: \"list-meta-campaigns\",\n insights: \"get-meta-ad-insights\",\n \"ad-sets\": \"list-meta-ad-sets\",\n};\n\nfunction parseBody(body?: string): Record<string, unknown> {\n if (!body) return {};\n try {\n return JSON.parse(body) as Record<string, unknown>;\n } catch {\n console.error(\"Invalid JSON in --body argument.\");\n process.exit(1);\n }\n}\n\nexport async function handleQuery(\n provider: string,\n endpoint: string,\n opts: { method?: string; body?: string; projectId?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n\n const parsedBody = parseBody(opts.body);\n let toolName: string;\n let args: Record<string, unknown>;\n\n if (GENERIC_PROVIDERS.includes(provider)) {\n toolName = `integration-${provider}`;\n args = {\n endpoint,\n method: opts.method || \"GET\",\n body: parsedBody,\n projectId: opts.projectId,\n };\n } else if (provider === \"posthog\") {\n toolName = POSTHOG_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown posthog endpoint: ${endpoint}. Valid: ${Object.keys(POSTHOG_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n args = { ...parsedBody };\n } else if (provider === \"amplitude\") {\n toolName = AMPLITUDE_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown amplitude endpoint: ${endpoint}. Valid: ${Object.keys(AMPLITUDE_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n // list-events takes no args — --body is ignored for this endpoint\n args = endpoint === \"list-events\" ? {} : { ...parsedBody };\n } else if (provider === \"meta-ads\") {\n toolName = META_ADS_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown meta-ads endpoint: ${endpoint}. Valid: ${Object.keys(META_ADS_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n // accounts takes no args — --body is ignored for this endpoint\n args = endpoint === \"accounts\" ? {} : { ...parsedBody };\n } else {\n console.error(\n `Unknown provider: ${provider}. Valid: ${[...GENERIC_PROVIDERS, \"posthog\", \"amplitude\", \"meta-ads\"].join(\", \")}`,\n );\n process.exit(1);\n }\n\n const result = await api.callBackend(toolName, args);\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleAutomationList(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-automations\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationCreate(opts: {\n name: string;\n prompt: string;\n frequency: string;\n hour: string;\n minute: string;\n timezone: string;\n dayOfWeek?: string;\n dayOfMonth?: string;\n maxRuns?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"create-automation\", {\n name: opts.name,\n prompt: opts.prompt,\n frequency: opts.frequency,\n hour: parseInt(opts.hour, 10),\n minute: parseInt(opts.minute, 10),\n timezone: opts.timezone,\n dayOfWeek: opts.dayOfWeek ? parseInt(opts.dayOfWeek, 10) : undefined,\n dayOfMonth: opts.dayOfMonth ? parseInt(opts.dayOfMonth, 10) : undefined,\n maxRuns: opts.maxRuns ? parseInt(opts.maxRuns, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationCreatePattern(opts: {\n name: string;\n prompt: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"create-pattern-automation\", {\n name: opts.name,\n prompt: opts.prompt,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationUpdate(\n id: string,\n opts: {\n name?: string;\n prompt?: string;\n enabled?: string;\n frequency?: string;\n hour?: string;\n minute?: string;\n timezone?: string;\n dayOfWeek?: string;\n dayOfMonth?: string;\n },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"update-automation\", {\n automationId: id,\n name: opts.name,\n prompt: opts.prompt,\n enabled:\n opts.enabled !== undefined\n ? (() => {\n if (opts.enabled !== \"true\" && opts.enabled !== \"false\") {\n console.error(\n `Invalid --enabled value: \"${opts.enabled}\". Use \"true\" or \"false\".`,\n );\n process.exit(1);\n }\n return opts.enabled === \"true\";\n })()\n : undefined,\n frequency: opts.frequency,\n hour: opts.hour ? parseInt(opts.hour, 10) : undefined,\n minute: opts.minute ? parseInt(opts.minute, 10) : undefined,\n timezone: opts.timezone,\n dayOfWeek: opts.dayOfWeek ? parseInt(opts.dayOfWeek, 10) : undefined,\n dayOfMonth: opts.dayOfMonth ? parseInt(opts.dayOfMonth, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationDelete(id: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"delete-automation\", {\n automationId: id,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationTest(id: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"test-automation\", {\n automationId: id,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleMemoryList(opts: {\n scope?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-memory-files\", {\n scope: opts.scope,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryRead(fileId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"read-memory-file\", { fileId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryWrite(opts: {\n title: string;\n content: string;\n scope?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"write-memory-file\", {\n title: opts.title,\n content: opts.content,\n scope: opts.scope,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryDelete(fileId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"delete-memory-file\", { fileId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSearchAnalysis(\n query: string,\n opts: { status?: string; limit?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"search-analysis\", {\n query,\n status: opts.status,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleRunAnalysis(opts: {\n prompts?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"run-analysis-workflow\", {\n selectedPromptKeys: opts.prompts?.split(\",\"),\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleIntegrations(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-integrations\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleEvents(opts: {\n source?: string;\n eventType?: string;\n projectId?: string;\n since?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-integration-events\", {\n source: opts.source,\n eventType: opts.eventType,\n projectId: opts.projectId,\n timeRange: opts.since,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleResolveIdentity(opts: {\n provider?: string;\n username?: string;\n email?: string;\n externalId?: string;\n externalUserId?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"resolve-identities\", {\n provider: opts.provider,\n externalUsername: opts.username,\n normalizedEmail: opts.email,\n externalId: opts.externalId,\n externalUserId: opts.externalUserId,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSlackHistory(opts: {\n channel?: string;\n limit?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-slack-channel-history\", {\n channelId: opts.channel,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleSlackMessage(opts: {\n permalink?: string;\n channel?: string;\n ts?: string;\n includeThread?: boolean;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-slack-message\", {\n permalink: opts.permalink,\n channelId: opts.channel,\n messageTs: opts.ts,\n includeThreadContext: opts.includeThread,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleMessagesList(opts: {\n start?: string;\n end?: string;\n limit?: string;\n cursor?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-messages\", {\n startTime: opts.start ? parseInt(opts.start, 10) : undefined,\n endTime: opts.end ? parseInt(opts.end, 10) : undefined,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n cursor: opts.cursor,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMessagesContext(\n messageId: string,\n opts: { before?: string; after?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-messages-with-context\", {\n messageId,\n before: opts.before ? parseInt(opts.before, 10) : undefined,\n after: opts.after ? parseInt(opts.after, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSkillsList(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-skills\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleSkillsLoad(skillId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"load-skill\", { skillId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleConfigList(opts: {\n org: string;\n repo?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n try {\n const result = opts.repo\n ? await api.listRepoConfigSnapshots(opts.org, opts.repo)\n : await api.listUserConfigSnapshots(opts.org);\n console.log(JSON.stringify(result, null, 2));\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\nexport async function handleConfigDetail(opts: {\n org: string;\n user?: string;\n repo?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n try {\n const result = opts.repo\n ? await api.getRepoConfigDetail(opts.org, opts.repo)\n : opts.user\n ? await api.getUserConfigDetail(opts.org, opts.user)\n : null;\n if (!result) {\n console.error(\"Provide --user or --repo\");\n process.exit(1);\n }\n console.log(JSON.stringify(result, null, 2));\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["parts","pc","fs","os","path","CLAUDE_DIR","path","os","CLAUDE_SETTINGS_PATH","MARKETPLACE_DIR","readJsonFile","fs","writeJsonFile","execSync","execSync","readTokens","fs","fs","addTarget","listTargets","loadSyncConfig","syncPending","config","listTargets","listTargets"]}
|
|
1
|
+
{"version":3,"sources":["../src/cli.ts","../src/commands/doctor.ts","../src/commands/install.ts","../src/banner.ts","../src/sync/client.ts","../src/commands/uninstall.ts","../src/commands/update.ts","../src/auth/oauth.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/org.ts","../src/commands/open.ts","../src/commands/status.ts","../src/commands/sync.ts","../src/commands/env.ts","../src/commands/data.ts","../src/commands/query.ts","../src/commands/automation.ts","../src/commands/memory.ts","../src/commands/analysis.ts","../src/commands/integrations.ts","../src/commands/slack.ts","../src/commands/messages.ts","../src/commands/skills.ts","../src/commands/config-snapshots.ts"],"sourcesContent":["#!/usr/bin/env node\n\ndeclare const __FML_PLUGIN_VERSION__: string;\n\nimport { ensureNativeModules } from \"./native-check.js\";\nensureNativeModules();\n\nimport { Command } from \"commander\";\nimport { initSentry, Sentry } from \"./sentry.js\";\n\nimport { handleDoctor } from \"./commands/doctor.js\";\nimport { handleInstall } from \"./commands/install.js\";\nimport { handleUninstall } from \"./commands/uninstall.js\";\nimport { handleUpdate } from \"./commands/update.js\";\nimport { handleLogin } from \"./commands/login.js\";\nimport { handleLogout } from \"./commands/logout.js\";\nimport { handleOrg } from \"./commands/org.js\";\nimport { handleOpen } from \"./commands/open.js\";\nimport { handleStatus } from \"./commands/status.js\";\nimport { handleStart, handleStop } from \"./commands/daemon.js\";\nimport {\n handleSyncAdd,\n handleSyncEdit,\n handleSyncList,\n handleSyncRemove,\n handleSyncReset,\n handleSyncSetup,\n handleSyncStatus,\n} from \"./commands/sync.js\";\nimport { handleEnvShow, handleEnvSwitch } from \"./commands/env.js\";\nimport {\n handleActivity,\n handleSearch,\n handleSessions,\n handleSpending,\n handleTimeline,\n} from \"./commands/data.js\";\nimport { handleQuery } from \"./commands/query.js\";\nimport {\n handleAutomationList,\n handleAutomationCreate,\n handleAutomationCreatePattern,\n handleAutomationUpdate,\n handleAutomationDelete,\n handleAutomationTest,\n} from \"./commands/automation.js\";\nimport {\n handleMemoryList,\n handleMemoryRead,\n handleMemoryWrite,\n handleMemoryDelete,\n} from \"./commands/memory.js\";\nimport {\n handleSearchAnalysis,\n handleRunAnalysis,\n} from \"./commands/analysis.js\";\nimport {\n handleIntegrations,\n handleEvents,\n handleResolveIdentity,\n} from \"./commands/integrations.js\";\nimport { handleSlackHistory, handleSlackMessage } from \"./commands/slack.js\";\nimport {\n handleMessagesList,\n handleMessagesContext,\n} from \"./commands/messages.js\";\nimport { handleSkillsList, handleSkillsLoad } from \"./commands/skills.js\";\nimport {\n handleConfigList,\n handleConfigDetail,\n} from \"./commands/config-snapshots.js\";\nimport { printBanner } from \"./banner.js\";\n\nawait initSentry();\n\n// Show the logo when running `fml` with no args or `fml --help`\nif (\n process.argv.length <= 2 ||\n process.argv.includes(\"--help\") ||\n process.argv.includes(\"-h\")\n) {\n printBanner();\n}\n\nconst program = new Command()\n .name(\"fml\")\n .description(\"FML agent tools for Claude Code\")\n .version(\n typeof __FML_PLUGIN_VERSION__ !== \"undefined\"\n ? __FML_PLUGIN_VERSION__\n : \"dev\",\n );\n\nprogram\n .command(\"tools\", { hidden: true })\n .description(\"List all available CLI commands (including hidden agent tools)\")\n .action(() => {\n function formatCmd(cmd: typeof program, prefix = \"\") {\n const name = prefix ? `${prefix} ${cmd.name()}` : cmd.name();\n const args = cmd.registeredArguments\n .map((a) => (a.required ? `<${a.name()}>` : `[${a.name()}]`))\n .join(\" \");\n const opts = cmd.options\n .filter(\n (o) => !o.hidden && o.long !== \"--help\" && o.long !== \"--version\",\n )\n .map((o) => (o.mandatory ? o.flags : `[${o.flags}]`))\n .join(\" \");\n const usage = [name, args, opts].filter(Boolean).join(\" \");\n return `${usage}\\n ${cmd.description()}`;\n }\n\n const lines = program.commands\n .filter((c) => c.name() !== \"tools\" && c.name() !== \"help\")\n .flatMap((c) => {\n if (c.commands.length > 0) {\n return c.commands.map((s) => formatCmd(s, c.name()));\n }\n return [formatCmd(c)];\n });\n console.log(lines.join(\"\\n\\n\"));\n });\n\nprogram\n .command(\"install\")\n .description(\"Register plugin, hooks, and daemons\")\n .action(() => handleInstall());\n\nprogram\n .command(\"uninstall\")\n .description(\"Remove fml plugin, hooks, and optionally all data\")\n .option(\n \"--target <target>\",\n \"Target CLI: claude, gemini, codex, claude-desktop, all\",\n )\n .option(\"--purge\", \"Also remove all data, logs, and auth tokens\")\n .action((opts) => handleUninstall(opts));\n\nprogram\n .command(\"update\")\n .description(\"Update fml to the latest version\")\n .action(() => handleUpdate());\n\nprogram\n .command(\"login\")\n .description(\"Sign in to your FML account\")\n .action(() => handleLogin());\n\nprogram\n .command(\"logout\")\n .description(\"Sign out and clear stored credentials\")\n .action(() => handleLogout());\n\nprogram\n .command(\"org\")\n .description(\"Show or select organization\")\n .argument(\"[slug]\", \"Org slug to select\")\n .action((slug) => handleOrg(slug));\n\nprogram\n .command(\"status\")\n .description(\"Show current auth and daemon status\")\n .action(() => handleStatus());\n\nprogram\n .command(\"doctor\")\n .description(\"Check FML and panopticon configuration and connectivity\")\n .option(\"--json\", \"Output as JSON\")\n .action((opts) => handleDoctor(opts));\n\nprogram\n .command(\"open\")\n .description(\"Open FML dashboard in browser\")\n .option(\"--json\", \"Output URL as JSON instead of opening browser\")\n .action((opts) => handleOpen(opts));\n\nprogram\n .command(\"env\")\n .description(\"Show or switch environment (dev/prod)\")\n .argument(\"[target]\", 'Environment name (\"dev\", \"prod\") or custom Convex URL')\n .action((target?: string) => {\n if (target) handleEnvSwitch(target);\n else handleEnvShow();\n });\n\nprogram\n .command(\"start\")\n .description(\"Start panopticon server and sync\")\n .action(() => handleStart());\n\nprogram\n .command(\"stop\")\n .description(\"Stop panopticon server and sync\")\n .action(() => handleStop());\n\n// ── Sync subcommand ───────────────────────────────────────────────────────\n\nconst sync = program.command(\"sync\").description(\"Manage sync configuration\");\n\nsync\n .command(\"setup\")\n .description(\"Configure sync targets (convenience shortcut)\")\n .action(() => handleSyncSetup());\n\nsync\n .command(\"list\")\n .description(\"List all sync targets\")\n .action(() => handleSyncList());\n\nsync\n .command(\"add\")\n .description(\"Add a sync target\")\n .argument(\"<name>\", \"Unique target name\")\n .argument(\"<url>\", \"OTLP HTTP endpoint URL\")\n .option(\"--token-cmd <cmd>\", \"Shell command that returns a bearer token\")\n .option(\"--token <token>\", \"Static bearer token\")\n .action(\n (name: string, url: string, opts: { tokenCmd?: string; token?: string }) =>\n handleSyncAdd(name, url, opts),\n );\n\nsync\n .command(\"remove\")\n .description(\"Remove a sync target\")\n .argument(\"<name>\", \"Target name to remove\")\n .action((name: string) => handleSyncRemove(name));\n\nsync\n .command(\"edit\")\n .description(\"Edit a sync target\")\n .argument(\"<name>\", \"Target name to edit\")\n .option(\"--url <url>\", \"New OTLP HTTP endpoint URL\")\n .option(\"--token-cmd <cmd>\", \"New shell command for bearer token\")\n .option(\"--token <token>\", \"New static bearer token\")\n .action(\n (name: string, opts: { url?: string; tokenCmd?: string; token?: string }) =>\n handleSyncEdit(name, opts),\n );\n\nsync\n .command(\"status\")\n .description(\"Show sync config and watermarks\")\n .action(() => handleSyncStatus());\n\nsync\n .command(\"reset\")\n .description(\"Reset sync watermarks\")\n .argument(\"[name]\", \"Target name (resets all if omitted)\")\n .action((name?: string) => handleSyncReset(name));\n\n// ── Data commands ───────────────────────────────────────────────────────────\n\nprogram\n .command(\"activity\")\n .description(\"Activity summary — sessions, prompts, tools, costs\")\n .option(\"--since <duration>\", 'Time window, e.g. \"24h\", \"7d\"')\n .action((opts) => handleActivity(opts));\n\nprogram\n .command(\"sessions\")\n .description(\"List recent sessions\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--limit <n>\", \"Max sessions to return\")\n .action((opts) => handleSessions(opts));\n\nprogram\n .command(\"timeline\")\n .description(\"Get events for a session\")\n .argument(\"<session-id>\", \"Session ID\")\n .option(\"--limit <n>\", \"Max events to return\")\n .option(\"--offset <n>\", \"Events to skip\")\n .action((sessionId, opts) => handleTimeline(sessionId, opts));\n\nprogram\n .command(\"spending\")\n .description(\"AI token usage and cost breakdown\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--group-by <key>\", \"Group by: session, model, or day\")\n .action((opts) => handleSpending(opts));\n\nprogram\n .command(\"search\")\n .description(\"Search across all sessions\")\n .argument(\"<query>\", \"Text to search for\")\n .option(\"--since <duration>\", 'Time filter, e.g. \"24h\", \"7d\"')\n .option(\"--limit <n>\", \"Max results\")\n .action((query, opts) => handleSearch(query, opts));\n\n// ── Query command (unified integration queries) ────────────────────────────\n\nprogram\n .command(\"query\", { hidden: true })\n .description(\"Query a connected integration\")\n .argument(\n \"<provider>\",\n \"Provider name (sentry, slack, github, linear, notion, freshdesk, posthog, amplitude, meta-ads)\",\n )\n .argument(\"<endpoint>\", \"API endpoint or subcommand\")\n .option(\"--method <method>\", \"HTTP method\", \"GET\")\n .option(\"--body <json>\", \"Request body as JSON string\")\n .option(\"--project-id <id>\", \"Project ID override\")\n .action((provider, endpoint, opts) => handleQuery(provider, endpoint, opts));\n\n// ── Automation subcommand ──────────────────────────────────────────────────\n\nconst automation = program\n .command(\"automation\", { hidden: true })\n .description(\"Manage automations\");\n\nautomation\n .command(\"list\")\n .description(\"List all automations\")\n .action(() => handleAutomationList());\n\nautomation\n .command(\"create-scheduled\")\n .description(\"Create a scheduled automation\")\n .requiredOption(\"--name <name>\", \"Automation name\")\n .requiredOption(\"--prompt <prompt>\", \"What to run\")\n .requiredOption(\"--frequency <freq>\", \"hourly, daily, weekly, or monthly\")\n .requiredOption(\"--hour <hour>\", \"Hour (0-23)\")\n .requiredOption(\"--minute <minute>\", \"Minute (0-59)\")\n .requiredOption(\"--timezone <tz>\", \"IANA timezone, e.g. America/Chicago\")\n .option(\"--day-of-week <day>\", \"Day of week (0=Sun..6=Sat) for weekly\")\n .option(\"--day-of-month <day>\", \"Day of month (1-31) for monthly\")\n .option(\"--max-runs <n>\", \"Max runs (1 for one-time)\")\n .action((opts) => handleAutomationCreate(opts));\n\nautomation\n .command(\"create-pattern\")\n .description(\"Create an event-triggered automation\")\n .requiredOption(\"--name <name>\", \"Automation name\")\n .requiredOption(\"--prompt <prompt>\", \"What to watch for and do\")\n .action((opts) => handleAutomationCreatePattern(opts));\n\nautomation\n .command(\"update\")\n .description(\"Update an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .option(\"--name <name>\", \"New name\")\n .option(\"--prompt <prompt>\", \"New prompt\")\n .option(\"--enabled <bool>\", \"Enable or disable (true/false)\")\n .option(\"--frequency <freq>\", \"New frequency\")\n .option(\"--hour <hour>\", \"New hour\")\n .option(\"--minute <minute>\", \"New minute\")\n .option(\"--timezone <tz>\", \"New timezone\")\n .option(\"--day-of-week <day>\", \"New day of week\")\n .option(\"--day-of-month <day>\", \"New day of month\")\n .action((id, opts) => handleAutomationUpdate(id, opts));\n\nautomation\n .command(\"delete\")\n .description(\"Delete an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .action((id) => handleAutomationDelete(id));\n\nautomation\n .command(\"test\")\n .description(\"Preview/test an automation\")\n .argument(\"<id>\", \"Automation ID\")\n .action((id) => handleAutomationTest(id));\n\n// ── Memory subcommand ──────────────────────────────────────────────────────\n\nconst memory = program\n .command(\"memory\", { hidden: true })\n .description(\"Manage memory files\");\n\nmemory\n .command(\"list\")\n .description(\"List memory files\")\n .option(\"--scope <scope>\", \"Scope: project, org, or user\")\n .action((opts) => handleMemoryList(opts));\n\nmemory\n .command(\"read\")\n .description(\"Read a memory file\")\n .argument(\"<file-id>\", \"Memory file ID\")\n .action((fileId) => handleMemoryRead(fileId));\n\nmemory\n .command(\"write\")\n .description(\"Create or update a memory file\")\n .requiredOption(\"--title <title>\", \"File title\")\n .requiredOption(\"--content <content>\", \"File content\")\n .option(\"--scope <scope>\", \"Scope: project, org, or user\")\n .action((opts) => handleMemoryWrite(opts));\n\nmemory\n .command(\"delete\")\n .description(\"Delete a memory file\")\n .argument(\"<file-id>\", \"Memory file ID\")\n .action((fileId) => handleMemoryDelete(fileId));\n\n// ── Analysis commands ──────────────────────────────────────────────────────\n\nprogram\n .command(\"search-analysis\", { hidden: true })\n .description(\"Search codebase analysis results\")\n .argument(\"<query>\", \"Search query\")\n .option(\"--status <status>\", \"Filter by status\")\n .option(\"--limit <n>\", \"Max results\")\n .action((query, opts) => handleSearchAnalysis(query, opts));\n\nprogram\n .command(\"run-analysis\", { hidden: true })\n .description(\"Run deep codebase analysis workflows\")\n .option(\n \"--prompts <list>\",\n \"Comma-separated: security,architecture,code-quality,performance,ux,dependencies,cost,ai-architecture,ai-security\",\n )\n .action((opts) => handleRunAnalysis(opts));\n\n// ── Integration commands ───────────────────────────────────────────────────\n\nprogram\n .command(\"integrations\", { hidden: true })\n .description(\"List connected integrations\")\n .action(() => handleIntegrations());\n\nprogram\n .command(\"events\", { hidden: true })\n .description(\"Recent integration events (deploys, releases, errors)\")\n .option(\n \"--source <source>\",\n \"Filter: github, sentry, linear, amplitude, stripe\",\n )\n .option(\"--event-type <type>\", \"Filter by event type\")\n .option(\"--project-id <id>\", \"Filter by project\")\n .option(\"--since <duration>\", \"Time range: 1h, 6h, 24h, 7d, 30d\")\n .action((opts) => handleEvents(opts));\n\nprogram\n .command(\"resolve-identity\", { hidden: true })\n .description(\"Resolve external identity to FML user\")\n .argument(\"[username]\", \"External username (shorthand for --username)\")\n .option(\"--provider <p>\", \"Provider: github, linear, slack\")\n .option(\"--username <u>\", \"External username\")\n .option(\"--email <e>\", \"Email address\")\n .option(\"--external-id <id>\", \"External ID\")\n .option(\"--external-user-id <id>\", \"External user ID\")\n .action((username, opts) =>\n handleResolveIdentity(username ? { ...opts, username } : opts),\n );\n\n// ── Slack subcommand ───────────────────────────────────────────────────────\n\nconst slack = program\n .command(\"slack\", { hidden: true })\n .description(\"Slack shortcuts\");\n\nslack\n .command(\"history\")\n .description(\"Recent messages from a channel\")\n .option(\"--channel <id>\", \"Channel ID\")\n .option(\"--limit <n>\", \"Max messages\")\n .action((opts) => handleSlackHistory(opts));\n\nslack\n .command(\"message\")\n .description(\"Fetch a specific message\")\n .option(\"--permalink <url>\", \"Message permalink\")\n .option(\"--channel <id>\", \"Channel ID\")\n .option(\"--ts <timestamp>\", \"Message timestamp\")\n .option(\"--include-thread\", \"Include thread context\")\n .action((opts) => handleSlackMessage(opts));\n\n// ── Messages subcommand ────────────────────────────────────────────────────\n\nconst messages = program\n .command(\"messages\", { hidden: true })\n .description(\"Conversation messages\");\n\nmessages\n .command(\"list\")\n .description(\"List messages from a conversation\")\n .option(\"--start <timestamp>\", \"Start time (ms epoch)\")\n .option(\"--end <timestamp>\", \"End time (ms epoch)\")\n .option(\"--limit <n>\", \"Max messages\")\n .option(\"--cursor <cursor>\", \"Pagination cursor\")\n .action((opts) => handleMessagesList(opts));\n\nmessages\n .command(\"context\")\n .description(\"Get messages around a specific message\")\n .argument(\"<message-id>\", \"Message ID\")\n .option(\"--before <n>\", \"Messages before\")\n .option(\"--after <n>\", \"Messages after\")\n .action((messageId, opts) => handleMessagesContext(messageId, opts));\n\n// ── Skills subcommand ──────────────────────────────────────────────────────\n\nconst skills = program\n .command(\"skills\", { hidden: true })\n .description(\"Browse and load skills\");\n\nskills\n .command(\"list\")\n .description(\"List available skills\")\n .action(() => handleSkillsList());\n\nskills\n .command(\"load\")\n .description(\"Load a skill by ID\")\n .argument(\"<skill-id>\", \"Skill ID\")\n .action((skillId) => handleSkillsLoad(skillId));\n\n// ── Config subcommand ──────────────────────────────────────────────────────\n\nconst config = program\n .command(\"config\", { hidden: true })\n .description(\"View team config snapshots\");\n\nconfig\n .command(\"list\")\n .description(\"List config snapshots for an org\")\n .requiredOption(\"--org <slug>\", \"Organization slug\")\n .option(\"--repo <full-name>\", \"Filter by repo (owner/name)\")\n .action((opts) => handleConfigList(opts));\n\nconfig\n .command(\"detail\")\n .description(\"Get config snapshot detail\")\n .requiredOption(\"--org <slug>\", \"Organization slug\")\n .option(\"--user <username>\", \"GitHub username\")\n .option(\"--repo <full-name>\", \"Repository (owner/name)\")\n .action((opts) => handleConfigDetail(opts));\n\n// ────────────────────────────────────────────────────────────────────────────\n\nprogram.parseAsync(process.argv).catch((err) => {\n Sentry.captureException(err);\n console.error(err);\n process.exit(1);\n});\n","import ora from \"ora\";\nimport pc from \"picocolors\";\nimport { getValidToken, readTokens } from \"../auth/token-store.js\";\nimport { createApiClient } from \"../convex-client.js\";\nimport { CONVEX_URL } from \"../config.js\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { parsePanopticonRunning } from \"./daemon.js\";\nimport { loadSyncConfig } from \"@fml-inc/panopticon/sync\";\nimport { syncPending } from \"@fml-inc/panopticon/api\";\n\ninterface CheckResult {\n label: string;\n status: \"ok\" | \"warn\" | \"fail\";\n detail: string;\n}\n\nfunction reportResult(\n result: CheckResult,\n spinner: ReturnType<typeof ora> | null,\n): void {\n const text = `${result.label} — ${result.detail}`;\n if (spinner) {\n switch (result.status) {\n case \"ok\":\n spinner.succeed(text);\n break;\n case \"warn\":\n spinner.warn(text);\n break;\n case \"fail\":\n spinner.fail(text);\n break;\n }\n } else {\n const icon =\n result.status === \"ok\"\n ? pc.green(\"✓\")\n : result.status === \"warn\"\n ? pc.yellow(\"!\")\n : pc.red(\"✗\");\n console.log(` ${icon} ${result.label} — ${result.detail}`);\n }\n}\n\nexport async function handleDoctor(opts: { json?: boolean }): Promise<void> {\n const isTTY = !opts.json && process.stdout.isTTY === true;\n const checks: CheckResult[] = [];\n\n function startSpinner(label: string): ReturnType<typeof ora> | null {\n if (!isTTY) return null;\n return ora({ text: `Checking ${label}...`, indent: 2 }).start();\n }\n\n function pushAndReport(\n result: CheckResult,\n spinner: ReturnType<typeof ora> | null,\n ): void {\n checks.push(result);\n if (!opts.json) {\n reportResult(result, spinner);\n }\n }\n\n if (!opts.json && !isTTY) {\n console.log(\"\");\n }\n\n // 1. Auth check\n let token: string | null = null;\n {\n const spinner = startSpinner(\"auth\");\n token = await getValidToken();\n if (token) {\n const stored = readTokens();\n const detail = stored?.user?.email\n ? `Logged in as ${stored.user.email}`\n : \"Token present\";\n pushAndReport({ label: \"Auth\", status: \"ok\", detail }, spinner);\n } else {\n pushAndReport(\n {\n label: \"Auth\",\n status: \"fail\",\n detail: \"No token. Run `fml login`\",\n },\n spinner,\n );\n }\n }\n\n // 2. Panopticon checks (imported dynamically to avoid hard dep on published version)\n {\n const spinner = startSpinner(\"panopticon\");\n try {\n const { doctor } = await import(\"@fml-inc/panopticon/doctor\");\n const result = await doctor();\n // Close the spinner before reporting individual checks\n if (spinner) spinner.stop();\n for (const check of result.checks) {\n pushAndReport(check, null);\n }\n } catch {\n // Panopticon doctor not available — check via CLI\n const result = panopticonExec(\"status\");\n if (result.ok) {\n pushAndReport(\n { label: \"Panopticon\", status: \"ok\", detail: \"Available\" },\n spinner,\n );\n } else {\n pushAndReport(\n {\n label: \"Panopticon\",\n status: \"fail\",\n detail: \"Not found. Run `fml install`\",\n },\n spinner,\n );\n }\n }\n }\n\n // 3. Sync status (only if authenticated)\n if (token) {\n const spinner = startSpinner(\"sync\");\n try {\n const syncConfig = loadSyncConfig();\n const targets = syncConfig.targets;\n if (targets.length === 0) {\n pushAndReport(\n {\n label: \"Sync\",\n status: \"warn\",\n detail: \"No sync targets configured\",\n },\n spinner,\n );\n } else {\n // Close the spinner before reporting per-target\n if (spinner) spinner.stop();\n\n for (const target of targets) {\n try {\n const result = await syncPending(target.name);\n if (result.totalPending === 0) {\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: \"ok\",\n detail: \"Up to date\",\n },\n null,\n );\n } else {\n const parts = Object.entries(result.tables)\n .sort(([, a], [, b]) => b.pending - a.pending)\n .slice(0, 3)\n .map(([t, v]) => `${v.pending} ${t}`);\n const detail =\n parts.length < Object.keys(result.tables).length\n ? `${result.totalPending} pending (${parts.join(\", \")}, ...)`\n : `${result.totalPending} pending (${parts.join(\", \")})`;\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: result.totalPending > 1000 ? \"warn\" : \"ok\",\n detail,\n },\n null,\n );\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n pushAndReport(\n {\n label: `Sync → ${target.name}`,\n status: \"warn\",\n detail: `Could not query watermarks (${msg})`,\n },\n null,\n );\n }\n }\n }\n } catch (err) {\n pushAndReport(\n {\n label: \"Sync\",\n status: \"warn\",\n detail: err instanceof Error ? err.message : \"Check failed\",\n },\n spinner,\n );\n }\n }\n\n // 4. Daemon checks\n {\n const spinner = startSpinner(\"panopticon daemon\");\n const isRunning = parsePanopticonRunning();\n if (isRunning) {\n pushAndReport(\n {\n label: \"Panopticon daemon\",\n status: \"ok\",\n detail: \"running\",\n },\n spinner,\n );\n } else {\n pushAndReport(\n {\n label: \"Panopticon daemon\",\n status: \"warn\",\n detail: \"Not running. Run `fml start`\",\n },\n spinner,\n );\n }\n }\n\n // 5. API reachability\n {\n const spinner = startSpinner(\"API\");\n if (token) {\n try {\n const result = await createApiClient(token).callBackend(\"ping\", {});\n if (result.ok) {\n pushAndReport(\n {\n label: \"API\",\n status: \"ok\",\n detail: `Reachable at ${CONVEX_URL}`,\n },\n spinner,\n );\n } else {\n // Backend responded but tool failed — still reachable\n pushAndReport(\n {\n label: \"API\",\n status: \"ok\",\n detail: `Reachable at ${CONVEX_URL}`,\n },\n spinner,\n );\n }\n } catch (err) {\n pushAndReport(\n {\n label: \"API\",\n status: \"fail\",\n detail: err instanceof Error ? err.message : \"Unreachable\",\n },\n spinner,\n );\n }\n } else {\n pushAndReport(\n { label: \"API\", status: \"fail\", detail: \"Auth required\" },\n spinner,\n );\n }\n }\n\n // JSON output\n if (opts.json) {\n console.log(JSON.stringify(checks, null, 2));\n return;\n }\n\n // Summary\n console.log(\"\");\n const passed = checks.filter((c) => c.status === \"ok\").length;\n const failed = checks.filter((c) => c.status === \"fail\").length;\n const warned = checks.filter((c) => c.status === \"warn\").length;\n\n const parts: string[] = [];\n if (passed > 0) parts.push(pc.green(`${passed} passed`));\n if (warned > 0)\n parts.push(pc.yellow(`${warned} warning${warned > 1 ? \"s\" : \"\"}`));\n if (failed > 0) parts.push(pc.red(`${failed} failed`));\n\n console.log(` ${parts.join(\", \")}`);\n console.log(\"\");\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { addTarget, listTargets } from \"@fml-inc/panopticon/sync\";\nimport { printBanner } from \"../banner.js\";\nimport {\n DEFAULT_PROD_URL,\n DEFAULT_TARGET_NAME,\n writeEnvConfig,\n} from \"../config.js\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { FML_DATA_DIR, FML_LOG_DIR } from \"../dirs.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\n\nconst CLAUDE_DIR = path.join(os.homedir(), \".claude\");\nconst CLAUDE_SETTINGS_PATH = path.join(CLAUDE_DIR, \"settings.json\");\nconst MARKETPLACE_DIR = path.join(\n os.homedir(),\n \".local\",\n \"share\",\n \"claude-plugins\",\n);\n\nfunction getPluginRoot(): string {\n let dir = path.dirname(fileURLToPath(import.meta.url));\n // At runtime we're in dist/ (tsup bundles into entry point), go up one level\n dir = path.resolve(dir, \"..\");\n return dir;\n}\n\nfunction readJsonFile(filePath: string): Record<string, unknown> | null {\n try {\n return JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction writeJsonFile(filePath: string, data: Record<string, unknown>): void {\n fs.mkdirSync(path.dirname(filePath), { recursive: true });\n fs.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\\n`);\n}\n\nexport async function handleInstall(): Promise<void> {\n const pluginRoot = getPluginRoot();\n console.log(\"Installing fml...\\n\");\n\n // 1. Run panopticon install (DB, pricing, hooks, marketplace, skills, server)\n console.log(\"[1/4] Running panopticon install...\");\n const result = panopticonExec(\"install\", { timeout: 60_000 });\n if (result.ok) {\n // Indent panopticon output for readability\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.log(` ${line}`);\n }\n } else {\n console.error(\" panopticon install failed:\");\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.error(` ${line}`);\n }\n }\n console.log();\n\n // 2. Ensure fml-specific directories exist\n console.log(\"[2/4] Creating fml directories...\");\n for (const dir of [FML_DATA_DIR, FML_LOG_DIR]) {\n fs.mkdirSync(dir, { recursive: true });\n }\n console.log(` ${FML_DATA_DIR}`);\n console.log(` ${FML_LOG_DIR}\\n`);\n\n // 3. Register fml plugin in local marketplace + Claude Code settings\n console.log(\"[3/4] Setting up fml plugin...\");\n fs.mkdirSync(path.join(MARKETPLACE_DIR, \".claude-plugin\"), {\n recursive: true,\n });\n\n const manifestPath = path.join(\n MARKETPLACE_DIR,\n \".claude-plugin\",\n \"marketplace.json\",\n );\n const manifest = readJsonFile(manifestPath) ?? {\n name: \"local-plugins\",\n owner: { name: os.userInfo().username },\n plugins: [],\n };\n\n const plugins = (manifest.plugins as Array<Record<string, unknown>>) ?? [];\n if (!plugins.some((p) => p.name === \"fml\")) {\n plugins.push({\n name: \"fml\",\n source: \"./fml\",\n description: \"FML agent tools for Claude Code\",\n });\n manifest.plugins = plugins;\n }\n writeJsonFile(manifestPath, manifest);\n\n // Symlink plugin source into marketplace\n const marketplaceLink = path.join(MARKETPLACE_DIR, \"fml\");\n try {\n fs.unlinkSync(marketplaceLink);\n } catch {}\n fs.rmSync(marketplaceLink, { recursive: true, force: true });\n fs.symlinkSync(pluginRoot, marketplaceLink, \"dir\");\n console.log(` Marketplace: ${MARKETPLACE_DIR}`);\n console.log(` Plugin: ${pluginRoot}`);\n\n // Layer fml-specific settings on top for Claude Code\n const settings = (readJsonFile(CLAUDE_SETTINGS_PATH) ?? {}) as Record<\n string,\n Record<string, unknown>\n >;\n settings.extraKnownMarketplaces = settings.extraKnownMarketplaces ?? {};\n settings.extraKnownMarketplaces[\"local-plugins\"] = {\n source: { source: \"directory\", path: MARKETPLACE_DIR },\n };\n settings.enabledPlugins = settings.enabledPlugins ?? {};\n settings.enabledPlugins[\"fml@local-plugins\"] = true;\n writeJsonFile(CLAUDE_SETTINGS_PATH, settings);\n console.log(` Claude settings: ${CLAUDE_SETTINGS_PATH}\\n`);\n\n // 4. Auto-configure sync target (best-effort)\n console.log(\"[4/4] Configuring sync target...\");\n const prodSyncUrl = DEFAULT_PROD_URL.replace(\".cloud\", \".site\");\n const existingTargets = listTargets();\n const existingProd = existingTargets.find((t) => t.url === prodSyncUrl);\n if (existingProd) {\n console.log(` Production target already configured`);\n } else {\n const ghToken = resolveGitHubToken();\n if (ghToken) {\n addTarget({\n name: DEFAULT_TARGET_NAME,\n url: prodSyncUrl,\n tokenCommand: \"gh auth token\",\n });\n console.log(` Target \"${DEFAULT_TARGET_NAME}\": ${prodSyncUrl}`);\n console.log(\" Auth: gh auth token\");\n } else {\n console.log(\n \" Skipped (no GitHub token). Run `fml sync setup` later.\",\n );\n }\n }\n\n // Set active env to the default sync target\n writeEnvConfig({ active: DEFAULT_TARGET_NAME });\n\n console.log(\"\");\n printBanner();\n console.log(\"Done! Start a new coding session to activate.\\n\");\n console.log(\"\\nNext steps:\");\n console.log(\" fml login Sign in to your FML account\");\n console.log(\" fml org Select organization\");\n console.log(\" fml sync status Check sync status\");\n console.log(\" fml status Verify setup\");\n}\n","import pc from \"picocolors\";\n\nconst LOGO_LINES = [\n \" ▄██▀ ██▄██▄██ ██\",\n \" ██ ██ ██ ██ ██\",\n \"█████ ██ ██ ██\",\n \" ██ ██ ██ ████\",\n \" ▀▀ ▀▀ ▀▀ ▀▀▀▀\",\n];\n\nexport function printBanner(): void {\n console.log(\"\");\n for (let i = 0; i < LOGO_LINES.length; i++) {\n const color = i < 3 ? pc.blue : pc.cyan;\n console.log(\" \" + color(LOGO_LINES[i]));\n }\n console.log(\"\");\n}\n","import { execSync } from \"node:child_process\";\n\nconst TOKEN_TTL_MS = 5 * 60 * 1000;\n\nlet cachedGitHubToken: { value: string; expiresAt: number } | null = null;\n\nexport function resolveGitHubToken(): string | null {\n if (cachedGitHubToken && Date.now() < cachedGitHubToken.expiresAt) {\n return cachedGitHubToken.value;\n }\n\n const envToken = process.env.PANOPTICON_GITHUB_TOKEN;\n if (envToken) {\n cachedGitHubToken = {\n value: envToken,\n expiresAt: Date.now() + TOKEN_TTL_MS,\n };\n return envToken;\n }\n\n try {\n const token = execSync(\"gh auth token\", {\n encoding: \"utf-8\",\n timeout: 5000,\n }).trim();\n if (token) {\n cachedGitHubToken = {\n value: token,\n expiresAt: Date.now() + TOKEN_TTL_MS,\n };\n }\n return token || null;\n } catch {\n return null;\n }\n}\n","import fs from \"node:fs\";\nimport os from \"node:os\";\nimport path from \"node:path\";\nimport { panopticonExec } from \"../daemon-utils.js\";\nimport { FML_DATA_DIR, FML_LOG_DIR } from \"../dirs.js\";\n\nconst CLAUDE_DIR = path.join(os.homedir(), \".claude\");\nconst CLAUDE_SETTINGS_PATH = path.join(CLAUDE_DIR, \"settings.json\");\nconst MARKETPLACE_DIR = path.join(\n os.homedir(),\n \".local\",\n \"share\",\n \"claude-plugins\",\n);\n\nfunction readJsonFile(filePath: string): Record<string, unknown> | null {\n try {\n return JSON.parse(fs.readFileSync(filePath, \"utf-8\"));\n } catch {\n return null;\n }\n}\n\nfunction writeJsonFile(filePath: string, data: Record<string, unknown>): void {\n fs.writeFileSync(filePath, `${JSON.stringify(data, null, 2)}\\n`);\n}\n\nexport function handleUninstall(opts: {\n purge?: boolean;\n target?: string;\n}): void {\n const targetSpecific = opts.target && opts.target !== \"all\";\n\n console.log(\"Uninstalling fml...\\n\");\n\n // 1. Remove fml plugin from Claude Code settings\n if (targetSpecific) {\n console.log(\"[1/4] Skipping plugin settings (target-specific uninstall)\");\n } else {\n console.log(\"[1/4] Removing plugin from Claude Code settings...\");\n const settings = readJsonFile(CLAUDE_SETTINGS_PATH) as Record<\n string,\n Record<string, unknown>\n > | null;\n if (settings) {\n if (settings.enabledPlugins) {\n delete settings.enabledPlugins[\"fml@local-plugins\"];\n }\n if (settings.extraKnownMarketplaces) {\n delete settings.extraKnownMarketplaces[\"local-plugins\"];\n }\n writeJsonFile(CLAUDE_SETTINGS_PATH, settings);\n console.log(` Updated ${CLAUDE_SETTINGS_PATH}`);\n } else {\n console.log(\" No settings file found, skipping\");\n }\n }\n\n // 2. Remove marketplace symlink and manifest entry\n if (targetSpecific) {\n console.log(\"[2/4] Skipping marketplace (target-specific uninstall)\");\n } else {\n console.log(\"[2/4] Removing marketplace registration...\");\n const marketplaceLink = path.join(MARKETPLACE_DIR, \"fml\");\n try {\n fs.rmSync(marketplaceLink, { recursive: true, force: true });\n console.log(` Removed ${marketplaceLink}`);\n } catch {\n console.log(\" No marketplace link found, skipping\");\n }\n\n const manifestPath = path.join(\n MARKETPLACE_DIR,\n \".claude-plugin\",\n \"marketplace.json\",\n );\n const manifest = readJsonFile(manifestPath);\n if (manifest && Array.isArray(manifest.plugins)) {\n manifest.plugins = (\n manifest.plugins as Array<Record<string, unknown>>\n ).filter((p) => p.name !== \"fml\");\n writeJsonFile(manifestPath, manifest);\n console.log(` Updated ${manifestPath}`);\n }\n }\n\n // 3. Run panopticon uninstall\n console.log(\"[3/4] Running panopticon uninstall...\");\n const panoArgs = [\"uninstall\"];\n if (opts.target) panoArgs.push(\"--target\", opts.target);\n if (opts.purge) panoArgs.push(\"--purge\");\n const result = panopticonExec(...panoArgs, { timeout: 30_000 });\n if (result.ok) {\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.log(` ${line}`);\n }\n } else {\n console.error(\" panopticon uninstall failed:\");\n for (const line of result.stdout.trim().split(\"\\n\")) {\n console.error(` ${line}`);\n }\n }\n\n // 4. Remove fml data and logs (only with --purge, never for target-specific)\n if (targetSpecific) {\n console.log(\"[4/4] Skipping data removal (target-specific uninstall)\");\n } else if (opts.purge) {\n console.log(\"[4/4] Removing fml data and logs...\");\n for (const dir of [FML_DATA_DIR, FML_LOG_DIR]) {\n try {\n fs.rmSync(dir, { recursive: true, force: true });\n console.log(` Removed ${dir}`);\n } catch {\n console.log(` Could not remove ${dir}`);\n }\n }\n } else {\n console.log(\"[4/4] Keeping fml data (use --purge to remove)\");\n }\n\n console.log(\"\\nDone! FML has been uninstalled.\");\n}\n","import { execSync } from \"node:child_process\";\nimport { Sentry } from \"../sentry.js\";\n\ndeclare const __FML_PLUGIN_VERSION__: string;\n\nexport async function handleUpdate(): Promise<void> {\n const currentVersion =\n typeof __FML_PLUGIN_VERSION__ !== \"undefined\"\n ? __FML_PLUGIN_VERSION__\n : \"unknown\";\n\n console.log(`Current: ${currentVersion}`);\n console.log(\"Updating via npm...\\n\");\n\n try {\n const env = { ...process.env };\n delete env.npm_config_registry;\n\n execSync(\"npm install -g @fml-inc/fml@latest\", {\n stdio: \"inherit\",\n timeout: 120_000,\n env,\n });\n\n console.log(\"\\nUpdated. Run `fml install --skip-build` to reconfigure.\");\n } catch (err: unknown) {\n Sentry.captureException(err);\n const msg =\n err instanceof Error\n ? ((err as Error & { stderr?: Buffer }).stderr?.toString() ??\n err.message)\n : String(err);\n console.error(\"Update failed:\", msg);\n process.exit(1);\n }\n}\n","import crypto from \"node:crypto\";\nimport http from \"node:http\";\nimport { CONVEX_URL, WORKOS_API_URL, WORKOS_AUTH_URL } from \"../config.js\";\nimport { writeTokens } from \"./token-store.js\";\n\n/**\n * Fetch the WorkOS client ID from the active Convex deployment.\n * This allows each environment to use its own WorkOS configuration.\n */\nasync function fetchWorkosClientId(): Promise<string> {\n const { ConvexHttpClient } = await import(\"convex/browser\");\n const client = new ConvexHttpClient(CONVEX_URL);\n const ref =\n \"public_config:getAuthConfig\" as unknown as import(\"convex/server\").FunctionReference<\"query\">;\n const result = (await client.query(ref, {})) as {\n workosClientId: string;\n };\n return result.workosClientId;\n}\n\n/**\n * Run the WorkOS PKCE OAuth flow:\n * 1. Generate code_verifier + code_challenge\n * 2. Start local HTTP server for callback\n * 3. Open browser to WorkOS authorization URL\n * 4. Receive callback with authorization code\n * 5. Exchange code for tokens\n * 6. Store tokens\n */\nexport async function login(): Promise<{\n email: string;\n name: string;\n}> {\n // Fetch the WorkOS client ID from the active Convex deployment\n const clientId = await fetchWorkosClientId();\n\n // Generate PKCE code verifier and challenge\n const codeVerifier = crypto.randomBytes(32).toString(\"base64url\");\n const codeChallenge = crypto\n .createHash(\"sha256\")\n .update(codeVerifier)\n .digest(\"base64url\");\n\n // Generate state for CSRF protection (defense-in-depth alongside PKCE)\n const state = crypto.randomBytes(16).toString(\"hex\");\n\n // Find a free port and start callback server (pass state for CSRF verification)\n const { port, waitForCode, close } = await startCallbackServer(state);\n\n const redirectUri = `http://localhost:${port}/callback`;\n const authUrl = new URL(`${WORKOS_AUTH_URL}/user_management/authorize`);\n authUrl.searchParams.set(\"client_id\", clientId);\n authUrl.searchParams.set(\"redirect_uri\", redirectUri);\n authUrl.searchParams.set(\"response_type\", \"code\");\n authUrl.searchParams.set(\"code_challenge\", codeChallenge);\n authUrl.searchParams.set(\"code_challenge_method\", \"S256\");\n authUrl.searchParams.set(\"provider\", \"authkit\");\n authUrl.searchParams.set(\"state\", state);\n\n // Open browser\n const open = (await import(\"open\")).default;\n await open(authUrl.toString());\n\n console.log(\"\\nOpening browser for login...\");\n console.log(`If it doesn't open, visit: ${authUrl.toString()}\\n`);\n\n // Wait for the callback\n const code = await waitForCode();\n close();\n\n // Exchange code for tokens\n const tokenResponse = await fetch(\n `${WORKOS_API_URL}/user_management/authenticate`,\n {\n method: \"POST\",\n headers: { \"Content-Type\": \"application/json\" },\n body: JSON.stringify({\n grant_type: \"authorization_code\",\n client_id: clientId,\n code,\n code_verifier: codeVerifier,\n redirect_uri: redirectUri,\n }),\n },\n );\n\n if (!tokenResponse.ok) {\n const error = await tokenResponse.text();\n throw new Error(`Token exchange failed: ${error}`);\n }\n\n const data = (await tokenResponse.json()) as {\n access_token: string;\n refresh_token: string;\n expires_in: number;\n user: {\n id: string;\n email: string;\n first_name?: string;\n last_name?: string;\n };\n };\n\n const userName = [data.user.first_name, data.user.last_name]\n .filter(Boolean)\n .join(\" \");\n\n writeTokens({\n accessToken: data.access_token,\n refreshToken: data.refresh_token,\n expiresAt: Date.now() + (data.expires_in ?? 300) * 1000,\n user: {\n id: data.user.id,\n email: data.user.email,\n name: userName,\n },\n workosClientId: clientId,\n });\n\n return { email: data.user.email, name: userName };\n}\n\nfunction startCallbackServer(expectedState: string): Promise<{\n port: number;\n waitForCode: () => Promise<string>;\n close: () => void;\n}> {\n return new Promise((resolve, reject) => {\n let resolveCode: (code: string) => void;\n let rejectCode: (err: Error) => void;\n\n const codePromise = new Promise<string>((res, rej) => {\n resolveCode = res;\n rejectCode = rej;\n });\n\n const server = http.createServer((req, res) => {\n const url = new URL(req.url ?? \"/\", `http://localhost`);\n\n if (url.pathname === \"/callback\") {\n const code = url.searchParams.get(\"code\");\n const error = url.searchParams.get(\"error\");\n const returnedState = url.searchParams.get(\"state\");\n\n // Verify state parameter to prevent CSRF\n if (returnedState !== expectedState) {\n res.writeHead(400, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login failed</h1><p>Invalid state parameter. You can close this tab.</p></body></html>\",\n );\n rejectCode(new Error(\"OAuth state mismatch — possible CSRF attack\"));\n return;\n }\n\n if (error) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login failed</h1><p>You can close this tab.</p></body></html>\",\n );\n rejectCode(new Error(`OAuth error: ${error}`));\n return;\n }\n\n if (code) {\n res.writeHead(200, { \"Content-Type\": \"text/html\" });\n res.end(\n \"<html><body><h1>Login successful!</h1><p>You can close this tab and return to the terminal.</p></body></html>\",\n );\n resolveCode(code);\n return;\n }\n\n res.writeHead(400);\n res.end(\"Missing code parameter\");\n return;\n }\n\n res.writeHead(404);\n res.end(\"Not found\");\n });\n\n // Listen on a random available port\n server.listen(0, \"127.0.0.1\", () => {\n const addr = server.address();\n if (!addr || typeof addr === \"string\") {\n reject(new Error(\"Failed to start callback server\"));\n return;\n }\n\n resolve({\n port: addr.port,\n waitForCode: () => codePromise,\n close: () => server.close(),\n });\n });\n\n server.on(\"error\", reject);\n\n // Timeout after 5 minutes\n setTimeout(\n () => {\n rejectCode(new Error(\"Login timed out (5 minutes)\"));\n server.close();\n },\n 5 * 60 * 1000,\n );\n });\n}\n","import type { FunctionReference } from \"convex/server\";\nimport { login } from \"../auth/oauth.js\";\nimport { getValidToken, setSelectedOrg } from \"../auth/token-store.js\";\nimport { createApiClient } from \"../convex-client.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\nimport { CONVEX_URL, getActiveEnv } from \"../config.js\";\nimport { Sentry } from \"../sentry.js\";\n\n/**\n * After login, link the user's GitHub identity to their FML account\n * so that sync data (authenticated via GitHub token) can be attributed.\n */\nasync function linkGitHubIdentity(): Promise<void> {\n const token = resolveGitHubToken();\n if (!token) {\n console.warn(\"[fml] No GitHub token available — skipping identity link\");\n return;\n }\n\n try {\n const response = await fetch(\"https://api.github.com/user\", {\n headers: {\n Authorization: `Bearer ${token}`,\n Accept: \"application/vnd.github+json\",\n },\n });\n if (!response.ok) {\n console.warn(\n `[fml] GitHub API returned ${response.status} — skipping identity link`,\n );\n return;\n }\n\n const user = (await response.json()) as {\n login: string;\n id: number;\n email: string | null;\n };\n\n const fmlToken = await getValidToken();\n if (!fmlToken) {\n console.warn(\"[fml] No FML token available — skipping identity link\");\n return;\n }\n\n if (!CONVEX_URL) {\n console.warn(\n \"[fml] No Convex URL configured — skipping identity link (run fml install first)\",\n );\n return;\n }\n\n const { ConvexHttpClient } = await import(\"convex/browser\");\n const client = new ConvexHttpClient(CONVEX_URL);\n client.setAuth(fmlToken);\n\n const ref =\n \"user/panopticon:linkGitHubIdentity\" as unknown as FunctionReference<\"mutation\">;\n await client.mutation(ref, {\n githubUsername: user.login,\n githubId: user.id,\n githubEmail: user.email ?? undefined,\n });\n\n console.log(`Linked GitHub account: ${user.login}`);\n } catch (err: unknown) {\n const msg = err instanceof Error ? err.message : String(err);\n console.warn(`[fml] Failed to link GitHub identity: ${msg}`);\n }\n}\n\n// Config snapshots are now synced automatically via panopticon sync —\n// no manual upload needed after login.\n\n/**\n * After login, select and persist the user's org.\n * Single-org users get auto-selected; multi-org users get the first org\n * (can be changed later via `fml org`).\n */\nasync function selectOrg(): Promise<void> {\n try {\n const token = await getValidToken();\n if (!token) return;\n\n const api = createApiClient(token);\n const orgs = await api.queryOrgs();\n if (orgs.length === 0) return;\n\n const org = orgs[0];\n const slug = org.slug ?? org.name;\n setSelectedOrg(slug);\n console.log(`Selected org: ${org.name} (${slug})`);\n } catch {\n // Non-fatal — org selection can happen later via `fml org`\n }\n}\n\nexport async function handleLogin(): Promise<void> {\n const { name: envName } = getActiveEnv();\n\n // Skip OAuth if already authenticated — still run post-login tasks\n const existingToken = await getValidToken();\n if (existingToken) {\n const { readTokens } = await import(\"../auth/token-store.js\");\n const stored = readTokens();\n console.log(\n `Already logged in as ${stored?.user.name} (${stored?.user.email}) on ${envName}.`,\n );\n\n await linkGitHubIdentity();\n await selectOrg();\n\n console.log(\"You're all set! Restart Claude Code to use FML tools.\");\n process.exit(0);\n }\n\n console.log(`Signing in to FML (${envName})...`);\n try {\n const { email, name } = await login();\n console.log(`\\nLogged in as ${name} (${email})`);\n\n await linkGitHubIdentity();\n await selectOrg();\n\n console.log(\"You're all set! Restart Claude Code to use FML tools.\");\n process.exit(0);\n } catch (err: unknown) {\n Sentry.captureException(err);\n const msg = err instanceof Error ? err.message : String(err);\n console.error(`Login failed: ${msg}`);\n process.exit(1);\n }\n}\n","import fs from \"node:fs\";\nimport { AUTH_STORE_PATH } from \"../config.js\";\n\nexport function handleLogout(): void {\n try {\n fs.unlinkSync(AUTH_STORE_PATH);\n } catch {\n // File doesn't exist, that's fine\n }\n console.log(\"Logged out. Stored credentials cleared.\");\n}\n","import { createApiClient } from \"../convex-client.js\";\nimport {\n getSelectedOrg,\n getValidToken,\n setSelectedOrg,\n} from \"../auth/token-store.js\";\n\nexport async function handleOrg(slug?: string): Promise<void> {\n const token = await getValidToken();\n if (!token) {\n console.error(\"Not logged in. Run `fml login` first.\");\n process.exit(1);\n }\n\n const api = createApiClient(token);\n const orgs = await api.queryOrgs();\n\n if (orgs.length === 0) {\n console.error(\"No organizations found.\");\n process.exit(1);\n }\n\n const current = getSelectedOrg();\n\n // No slug provided — show current selection and available orgs\n if (!slug) {\n console.log(\"Organizations:\\n\");\n for (const org of orgs) {\n const orgSlug = org.slug ?? org.name;\n const marker = orgSlug === current ? \" (selected)\" : \"\";\n console.log(` ${orgSlug}${marker}`);\n }\n if (!current) {\n console.log(\"\\nNo org selected. Run `fml org <slug>` to select one.\");\n }\n return;\n }\n\n // Slug provided — select it\n const match = orgs.find(\n (o) => (o.slug ?? o.name) === slug || o.name === slug,\n );\n if (!match) {\n console.error(\n `Organization \"${slug}\" not found. Available: ${orgs.map((o) => o.slug ?? o.name).join(\", \")}`,\n );\n process.exit(1);\n }\n\n const matchSlug = match.slug ?? match.name;\n setSelectedOrg(matchSlug);\n console.log(`Selected org: ${match.name} (${matchSlug})`);\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nconst APP_BASE_URL = \"https://app.fml.app\";\n\nexport async function handleOpen(opts: { json?: boolean }): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login` first.\");\n process.exit(1);\n }\n\n let slug: string;\n try {\n const orgs = await api.queryOrgs();\n if (orgs.length === 0) {\n console.error(\"No organizations found.\");\n process.exit(1);\n }\n slug = orgs[0].slug ?? orgs[0].name;\n } catch {\n console.error(\"Could not fetch organizations. Opening base URL.\");\n slug = \"\";\n }\n\n const url = slug ? `${APP_BASE_URL}/${slug}` : APP_BASE_URL;\n\n if (opts.json) {\n console.log(JSON.stringify({ url }));\n } else {\n const openBrowser = (await import(\"open\")).default;\n await openBrowser(url);\n }\n}\n","import { getValidToken, readTokens } from \"../auth/token-store.js\";\nimport { getActiveEnv } from \"../config.js\";\n\nexport async function handleStatus(): Promise<void> {\n const { name, convexUrl } = getActiveEnv();\n console.log(`Environment: ${name}`);\n console.log(` Convex: ${convexUrl}\\n`);\n\n const tokens = readTokens();\n\n if (!tokens) {\n console.log(\"Not authenticated. Run `fml login` to sign in.\");\n return;\n }\n\n const tokenValid = await getValidToken();\n\n console.log(\"Authentication:\");\n console.log(` User: ${tokens.user.name} (${tokens.user.email})`);\n console.log(\n ` Token: ${tokenValid ? \"valid\" : \"expired (needs refresh/re-login)\"}`,\n );\n console.log(` Org: ${tokens.orgSlug ?? \"(none — run `fml org <slug>`)\"}`);\n}\n","import { CONVEX_URL, DEFAULT_TARGET_NAME } from \"../config.js\";\nimport { resolveGitHubToken } from \"../sync/client.js\";\nimport {\n addTarget,\n removeTarget,\n listTargets,\n loadSyncConfig,\n saveSyncConfig,\n} from \"@fml-inc/panopticon/sync\";\nimport { syncPending, syncReset } from \"@fml-inc/panopticon/api\";\n\nconst FML_SYNC_URL = CONVEX_URL.replace(\".cloud\", \".site\");\n\n// ── Setup (convenience shortcut) ────────────────────────────────────────────\n\nexport async function handleSyncSetup(): Promise<void> {\n console.log(\"FML Sync Setup\\n\");\n\n const token = resolveGitHubToken();\n if (!token) {\n console.error(\n \"No GitHub token found. Set PANOPTICON_GITHUB_TOKEN or install gh CLI.\",\n );\n process.exit(1);\n }\n console.log(\"GitHub token: found\");\n\n addTarget({\n name: DEFAULT_TARGET_NAME,\n url: FML_SYNC_URL,\n tokenCommand: \"gh auth token\",\n });\n\n console.log(`\\nSync target \"${DEFAULT_TARGET_NAME}\" configured:`);\n console.log(` URL: ${FML_SYNC_URL}`);\n console.log(` Auth: gh auth token (refreshed every 5 min)`);\n console.log(`\\nRestart panopticon to activate: fml stop && fml start`);\n}\n\n// ── List ─────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncList(): Promise<void> {\n const targets = listTargets();\n\n if (targets.length === 0) {\n console.log(\n \"No sync targets configured. Run `fml sync setup` or `fml sync add`.\",\n );\n return;\n }\n\n console.log(\"Sync targets:\\n\");\n for (const t of targets) {\n const auth = t.token\n ? \"static token\"\n : t.tokenCommand\n ? `command: ${t.tokenCommand}`\n : \"none\";\n console.log(` ${t.name}`);\n console.log(` URL: ${t.url}`);\n console.log(` Auth: ${auth}`);\n }\n}\n\n// ── Add ──────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncAdd(\n name: string,\n url: string,\n opts: { tokenCmd?: string; token?: string },\n): Promise<void> {\n const existing = listTargets();\n if (existing.some((t) => t.name === name)) {\n console.error(\n `Target \"${name}\" already exists. Use \\`fml sync edit\\` to modify it.`,\n );\n process.exit(1);\n }\n\n addTarget({\n name,\n url,\n tokenCommand: opts.tokenCmd,\n token: opts.token,\n });\n\n console.log(`Sync target \"${name}\" added:`);\n console.log(` URL: ${url}`);\n if (opts.tokenCmd) console.log(` Auth: command: ${opts.tokenCmd}`);\n else if (opts.token) console.log(\" Auth: static token\");\n else console.log(\" Auth: none\");\n console.log(\"\\nRestart panopticon to activate: fml stop && fml start\");\n}\n\n// ── Remove ───────────────────────────────────────────────────────────────────\n\nexport async function handleSyncRemove(name: string): Promise<void> {\n const removed = removeTarget(name);\n if (removed) {\n console.log(`Sync target \"${name}\" removed.`);\n console.log(\"Restart panopticon to apply: fml stop && fml start\");\n } else {\n console.error(`Target \"${name}\" not found.`);\n process.exit(1);\n }\n}\n\n// ── Edit ─────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncEdit(\n name: string,\n opts: { url?: string; tokenCmd?: string; token?: string },\n): Promise<void> {\n const config = loadSyncConfig();\n const target = config.targets.find((t) => t.name === name);\n if (!target) {\n console.error(`Target \"${name}\" not found.`);\n process.exit(1);\n }\n\n if (opts.url) target.url = opts.url;\n if (opts.tokenCmd) {\n target.tokenCommand = opts.tokenCmd;\n delete target.token;\n }\n if (opts.token) {\n target.token = opts.token;\n delete target.tokenCommand;\n }\n\n saveSyncConfig(config);\n console.log(`Sync target \"${name}\" updated:`);\n console.log(` URL: ${target.url}`);\n const auth = target.token\n ? \"static token\"\n : target.tokenCommand\n ? `command: ${target.tokenCommand}`\n : \"none\";\n console.log(` Auth: ${auth}`);\n console.log(\"\\nRestart panopticon to apply: fml stop && fml start\");\n}\n\n// ── Status ───────────────────────────────────────────────────────────────────\n\nexport async function handleSyncStatus(): Promise<void> {\n const targets = listTargets();\n\n if (targets.length === 0) {\n console.log(\"No sync targets configured. Run `fml sync setup` first.\");\n return;\n }\n\n for (const target of targets) {\n const auth = target.token\n ? \"static token\"\n : target.tokenCommand\n ? `command: ${target.tokenCommand}`\n : \"none\";\n console.log(`${target.name}:`);\n console.log(` URL: ${target.url}`);\n console.log(` Auth: ${auth}`);\n\n try {\n const result = await syncPending(target.name);\n if (result.totalPending === 0) {\n console.log(\" Status: up to date\");\n } else {\n console.log(` Pending: ${result.totalPending} total`);\n for (const [table, info] of Object.entries(result.tables)) {\n console.log(\n ` ${table}: ${info.pending} pending (${info.synced} / ${info.total})`,\n );\n }\n }\n } catch (err) {\n const msg = err instanceof Error ? err.message : String(err);\n console.log(` Status: unavailable (${msg})`);\n }\n console.log();\n }\n}\n\n// ── Reset ────────────────────────────────────────────────────────────────────\n\nexport async function handleSyncReset(targetName?: string): Promise<void> {\n await syncReset(targetName ?? DEFAULT_TARGET_NAME);\n console.log(\n `Sync watermarks for \"${targetName ?? DEFAULT_TARGET_NAME}\" reset to 0.`,\n );\n}\n","import { listTargets } from \"@fml-inc/panopticon/sync\";\nimport { getActiveEnv, writeEnvConfig } from \"../config.js\";\nimport { handleStop, handleStart } from \"./daemon.js\";\n\n/**\n * Show the active environment.\n */\nexport function handleEnvShow(): void {\n const { name, convexUrl } = getActiveEnv();\n console.log(`Environment: ${name}`);\n console.log(` Convex URL: ${convexUrl}`);\n}\n\n/**\n * Switch to a sync target as the active environment.\n * Automatically restarts daemons so the new URL takes effect.\n */\nexport async function handleEnvSwitch(target: string): Promise<void> {\n const targets = listTargets();\n const match = targets.find((t) => t.name === target);\n if (!match) {\n console.error(`Sync target \"${target}\" not found. Available targets:`);\n for (const t of targets) {\n console.error(` ${t.name} ${t.url}`);\n }\n console.error(\"\\nAdd a target with `fml sync add`.\");\n process.exit(1);\n }\n\n writeEnvConfig({ active: target });\n const convexUrl = match.url.replace(\".convex.site\", \".convex.cloud\");\n console.log(`Switched to ${target}: ${convexUrl}`);\n\n console.log(\"\\nRestarting daemons...\");\n handleStop();\n await handleStart();\n console.log(\n \"MCP server will pick up the change on next Claude Code session.\",\n );\n}\n","/**\n * CLI wrappers for remote FML backend data queries.\n * Each command queries the FML Convex backend via the authenticated API client.\n */\n\nimport { getAuthenticatedClient } from \"../convex-client.js\";\n\nasync function queryBackend(\n toolName: string,\n args: Record<string, unknown>,\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login` to sign in.\");\n process.exit(1);\n }\n const result = await api.callBackend(toolName, args);\n if (!result.ok) {\n console.error(result.error ?? \"Unknown error\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleActivity(opts: { since?: string }): Promise<void> {\n await queryBackend(\"get-engineering-activity\", {\n timeRange: opts.since ?? \"24h\",\n });\n}\n\nexport async function handleSessions(opts: {\n since?: string;\n limit?: string;\n}): Promise<void> {\n await queryBackend(\"list-engineering-sessions\", {\n timeRange: opts.since ?? \"24h\",\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n}\n\nexport async function handleTimeline(\n sessionId: string,\n opts: { limit?: string; offset?: string },\n): Promise<void> {\n await queryBackend(\"get-session-timeline\", {\n sessionId,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n offset: opts.offset ? parseInt(opts.offset, 10) : undefined,\n });\n}\n\nexport async function handleSpending(opts: {\n since?: string;\n groupBy?: string;\n}): Promise<void> {\n await queryBackend(\"get-ai-spending\", {\n timeRange: opts.since ?? \"7d\",\n groupBy: opts.groupBy,\n });\n}\n\nexport async function handleSearch(\n query: string,\n opts: { since?: string; limit?: string },\n): Promise<void> {\n await queryBackend(\"search-engineering-sessions\", {\n query,\n timeRange: opts.since ?? \"7d\",\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n}\n","/**\n * Unified provider query command.\n * Routes requests to the appropriate backend tool based on provider and endpoint.\n */\n\nimport { getAuthenticatedClient } from \"../convex-client.js\";\n\nconst GENERIC_PROVIDERS = [\n \"sentry\",\n \"slack\",\n \"github\",\n \"linear\",\n \"notion\",\n \"freshdesk\",\n];\n\nconst POSTHOG_ENDPOINTS: Record<string, string> = {\n insights: \"query-posthog-insights\",\n events: \"query-posthog-events\",\n recordings: \"query-posthog-recordings\",\n \"feature-flags\": \"query-posthog-feature-flags\",\n experiments: \"query-posthog-experiments\",\n surveys: \"query-posthog-surveys\",\n hogql: \"run-posthog-hogql\",\n cohorts: \"query-posthog-cohorts\",\n};\n\nconst AMPLITUDE_ENDPOINTS: Record<string, string> = {\n events: \"query-amplitude-events\",\n funnel: \"query-amplitude-funnel\",\n retention: \"query-amplitude-retention\",\n chart: \"get-amplitude-chart\",\n \"list-events\": \"list-amplitude-events\",\n};\n\nconst META_ADS_ENDPOINTS: Record<string, string> = {\n accounts: \"list-meta-ad-accounts\",\n campaigns: \"list-meta-campaigns\",\n insights: \"get-meta-ad-insights\",\n \"ad-sets\": \"list-meta-ad-sets\",\n};\n\nfunction parseBody(body?: string): Record<string, unknown> {\n if (!body) return {};\n try {\n return JSON.parse(body) as Record<string, unknown>;\n } catch {\n console.error(\"Invalid JSON in --body argument.\");\n process.exit(1);\n }\n}\n\nexport async function handleQuery(\n provider: string,\n endpoint: string,\n opts: { method?: string; body?: string; projectId?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n\n const parsedBody = parseBody(opts.body);\n let toolName: string;\n let args: Record<string, unknown>;\n\n if (GENERIC_PROVIDERS.includes(provider)) {\n toolName = `integration-${provider}`;\n args = {\n endpoint,\n method: opts.method || \"GET\",\n body: parsedBody,\n projectId: opts.projectId,\n };\n } else if (provider === \"posthog\") {\n toolName = POSTHOG_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown posthog endpoint: ${endpoint}. Valid: ${Object.keys(POSTHOG_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n args = { ...parsedBody };\n } else if (provider === \"amplitude\") {\n toolName = AMPLITUDE_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown amplitude endpoint: ${endpoint}. Valid: ${Object.keys(AMPLITUDE_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n // list-events takes no args — --body is ignored for this endpoint\n args = endpoint === \"list-events\" ? {} : { ...parsedBody };\n } else if (provider === \"meta-ads\") {\n toolName = META_ADS_ENDPOINTS[endpoint];\n if (!toolName) {\n console.error(\n `Unknown meta-ads endpoint: ${endpoint}. Valid: ${Object.keys(META_ADS_ENDPOINTS).join(\", \")}`,\n );\n process.exit(1);\n }\n // accounts takes no args — --body is ignored for this endpoint\n args = endpoint === \"accounts\" ? {} : { ...parsedBody };\n } else {\n console.error(\n `Unknown provider: ${provider}. Valid: ${[...GENERIC_PROVIDERS, \"posthog\", \"amplitude\", \"meta-ads\"].join(\", \")}`,\n );\n process.exit(1);\n }\n\n const result = await api.callBackend(toolName, args);\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleAutomationList(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-automations\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationCreate(opts: {\n name: string;\n prompt: string;\n frequency: string;\n hour: string;\n minute: string;\n timezone: string;\n dayOfWeek?: string;\n dayOfMonth?: string;\n maxRuns?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"create-automation\", {\n name: opts.name,\n prompt: opts.prompt,\n frequency: opts.frequency,\n hour: parseInt(opts.hour, 10),\n minute: parseInt(opts.minute, 10),\n timezone: opts.timezone,\n dayOfWeek: opts.dayOfWeek ? parseInt(opts.dayOfWeek, 10) : undefined,\n dayOfMonth: opts.dayOfMonth ? parseInt(opts.dayOfMonth, 10) : undefined,\n maxRuns: opts.maxRuns ? parseInt(opts.maxRuns, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationCreatePattern(opts: {\n name: string;\n prompt: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"create-pattern-automation\", {\n name: opts.name,\n prompt: opts.prompt,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationUpdate(\n id: string,\n opts: {\n name?: string;\n prompt?: string;\n enabled?: string;\n frequency?: string;\n hour?: string;\n minute?: string;\n timezone?: string;\n dayOfWeek?: string;\n dayOfMonth?: string;\n },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"update-automation\", {\n automationId: id,\n name: opts.name,\n prompt: opts.prompt,\n enabled:\n opts.enabled !== undefined\n ? (() => {\n if (opts.enabled !== \"true\" && opts.enabled !== \"false\") {\n console.error(\n `Invalid --enabled value: \"${opts.enabled}\". Use \"true\" or \"false\".`,\n );\n process.exit(1);\n }\n return opts.enabled === \"true\";\n })()\n : undefined,\n frequency: opts.frequency,\n hour: opts.hour ? parseInt(opts.hour, 10) : undefined,\n minute: opts.minute ? parseInt(opts.minute, 10) : undefined,\n timezone: opts.timezone,\n dayOfWeek: opts.dayOfWeek ? parseInt(opts.dayOfWeek, 10) : undefined,\n dayOfMonth: opts.dayOfMonth ? parseInt(opts.dayOfMonth, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationDelete(id: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"delete-automation\", {\n automationId: id,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleAutomationTest(id: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"test-automation\", {\n automationId: id,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleMemoryList(opts: {\n scope?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-memory-files\", {\n scope: opts.scope,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryRead(fileId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"read-memory-file\", { fileId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryWrite(opts: {\n title: string;\n content: string;\n scope?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"write-memory-file\", {\n title: opts.title,\n content: opts.content,\n scope: opts.scope,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMemoryDelete(fileId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"delete-memory-file\", { fileId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSearchAnalysis(\n query: string,\n opts: { status?: string; limit?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"search-analysis\", {\n query,\n status: opts.status,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleRunAnalysis(opts: {\n prompts?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"run-analysis-workflow\", {\n selectedPromptKeys: opts.prompts?.split(\",\"),\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleIntegrations(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-integrations\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleEvents(opts: {\n source?: string;\n eventType?: string;\n projectId?: string;\n since?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-integration-events\", {\n source: opts.source,\n eventType: opts.eventType,\n projectId: opts.projectId,\n timeRange: opts.since,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleResolveIdentity(opts: {\n provider?: string;\n username?: string;\n email?: string;\n externalId?: string;\n externalUserId?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"resolve-identities\", {\n provider: opts.provider,\n externalUsername: opts.username,\n normalizedEmail: opts.email,\n externalId: opts.externalId,\n externalUserId: opts.externalUserId,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSlackHistory(opts: {\n channel?: string;\n limit?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-slack-channel-history\", {\n channelId: opts.channel,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleSlackMessage(opts: {\n permalink?: string;\n channel?: string;\n ts?: string;\n includeThread?: boolean;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"get-slack-message\", {\n permalink: opts.permalink,\n channelId: opts.channel,\n messageTs: opts.ts,\n includeThreadContext: opts.includeThread,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleMessagesList(opts: {\n start?: string;\n end?: string;\n limit?: string;\n cursor?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-messages\", {\n startTime: opts.start ? parseInt(opts.start, 10) : undefined,\n endTime: opts.end ? parseInt(opts.end, 10) : undefined,\n limit: opts.limit ? parseInt(opts.limit, 10) : undefined,\n cursor: opts.cursor,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleMessagesContext(\n messageId: string,\n opts: { before?: string; after?: string },\n): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-messages-with-context\", {\n messageId,\n before: opts.before ? parseInt(opts.before, 10) : undefined,\n after: opts.after ? parseInt(opts.after, 10) : undefined,\n });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleSkillsList(): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"list-skills\", {});\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n\nexport async function handleSkillsLoad(skillId: string): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n const result = await api.callBackend(\"load-skill\", { skillId });\n if (!result.ok) {\n console.error(result.error || \"Request failed\");\n process.exit(1);\n }\n console.log(JSON.stringify(result.result, null, 2));\n}\n","import { getAuthenticatedClient } from \"../convex-client.js\";\n\nexport async function handleConfigList(opts: {\n org: string;\n repo?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n try {\n const result = opts.repo\n ? await api.listRepoConfigSnapshots(opts.org, opts.repo)\n : await api.listUserConfigSnapshots(opts.org);\n console.log(JSON.stringify(result, null, 2));\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n\nexport async function handleConfigDetail(opts: {\n org: string;\n user?: string;\n repo?: string;\n}): Promise<void> {\n const api = await getAuthenticatedClient();\n if (!api) {\n console.error(\"Not authenticated. Run `fml login`.\");\n process.exit(1);\n }\n try {\n const result = opts.repo\n ? await api.getRepoConfigDetail(opts.org, opts.repo)\n : opts.user\n ? await api.getUserConfigDetail(opts.org, opts.user)\n : null;\n if (!result) {\n console.error(\"Provide --user or --repo\");\n process.exit(1);\n }\n console.log(JSON.stringify(result, null, 2));\n } catch (err) {\n console.error(err instanceof Error ? err.message : String(err));\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["parts","pc","fs","os","path","CLAUDE_DIR","path","os","CLAUDE_SETTINGS_PATH","MARKETPLACE_DIR","readJsonFile","fs","writeJsonFile","execSync","execSync","readTokens","fs","fs","addTarget","listTargets","loadSyncConfig","syncPending","config","listTargets","listTargets"]}
|