@asiyst/cli 1.0.9 → 1.1.2
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/README.md +19 -4
- package/dist/index.js +1800 -452
- package/dist/index.js.map +1 -1
- package/package.json +18 -2
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/ui/output.ts","../src/detection/project.ts","../src/config/api.ts","../src/api/client.ts","../src/config/local.ts","../src/browser/open.ts","../src/ui/selector.ts","../src/commands/shared.ts","../src/config/trust.ts","../src/commands/trust.ts","../src/commands/init.ts","../src/commands/login.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/commands/verify.ts","../src/commands/doctor.ts","../src/commands/dashboard.ts","../src/commands/avatar.ts","../src/update/check.ts","../src/config/version.ts","../src/commands/update.ts","../src/commands/interactive.ts","../src/index.ts"],"sourcesContent":["import type { ProjectDetection, VerificationResult } from \"../types.js\";\n\nexport const ok = (label: string, detail = \"\") => console.log(` ✓ ${label}${detail ? ` (${detail})` : \"\"}`);\nexport const fail = (label: string, detail = \"\") => console.log(` ✗ ${label}${detail ? `: ${detail}` : \"\"}`);\n\nexport function projectChecks(project: ProjectDetection): void {\n project.packageJson\n ? ok(\"Project detected\", typeof project.packageJson.name === \"string\" ? project.packageJson.name : project.cwd)\n : fail(\"Project not detected\", \"package.json is missing\");\n ok(\"Framework detected\", project.framework);\n ok(\"Language detected\", project.language);\n ok(\"Node.js detected\", process.version);\n ok(\"Package manager detected\", project.packageManager);\n project.sdkVersion\n ? ok(\"@asiyst/sdk detected\", project.sdkVersion)\n : fail(\"@asiyst/sdk is not installed\", \"npm install @asiyst/sdk\");\n}\n\nexport function homeStatus(project: ProjectDetection, connection = \"Not connected\"): void {\n console.log(\"\\n PROJECT STATUS\");\n console.log(` Project ${typeof project.packageJson?.name === \"string\" ? project.packageJson.name : \"Not detected\"}`);\n console.log(` Framework ${project.framework}`);\n console.log(` Language ${project.language}`);\n console.log(` Node.js ${process.version}`);\n console.log(` Package Manager ${project.packageManager}`);\n console.log(` @asiyst/sdk ${project.sdkVersion || \"Not installed\"}`);\n console.log(\"\\n ASIYST STATUS\");\n console.log(` Connection ${connection}`);\n console.log(` Avatar Not configured`);\n console.log(` AI Provider Not configured`);\n console.log(` Project ID ${project.config.projectId || \"—\"}`);\n if (connection === \"Not connected\") console.log(\"\\n Run 'connect' to link this project.\");\n}\n\nexport function printVerification(results: VerificationResult[]): boolean {\n console.log(\"\\n Asiyst Installation Verification\\n\");\n for (const result of results) result.ok ? ok(result.name, result.detail) : fail(result.name, result.detail);\n const success = results.length > 0 && results.every((result) => result.ok);\n if (success) console.log(\"\\n ────────────────────────────\\n\\n ASIYST IS READY ✓\");\n return success;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\r\nimport { resolve } from \"node:path\";\r\nimport type { ProjectDetection } from \"../types.js\";\r\n\r\nfunction dependencyVersion(pkg: Record<string, unknown>): string | undefined {\r\n const sections = [\"dependencies\", \"devDependencies\", \"peerDependencies\", \"optionalDependencies\"];\r\n for (const section of sections) {\r\n const values = pkg[section];\r\n if (values && typeof values === \"object\" && \"@asiyst/sdk\" in values) {\r\n const version = (values as Record<string, unknown>)[\"@asiyst/sdk\"];\r\n return typeof version === \"string\" ? version : undefined;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nexport function detectFramework(cwd: string, pkg: Record<string, unknown> | null): string {\r\n const deps: Record<string, unknown> = Object.assign({}, pkg?.dependencies, pkg?.devDependencies);\r\n if (typeof deps.next === \"string\") return \"Next.js\";\r\n if (typeof deps.react === \"string\") return \"React\";\r\n if (typeof deps.vite === \"string\") return \"Vite\";\r\n if (typeof deps.vue === \"string\") return \"Vue\";\r\n if (existsSync(resolve(cwd, \"vite.config.ts\")) || existsSync(resolve(cwd, \"vite.config.js\"))) return \"Vite\";\r\n if (existsSync(resolve(cwd, \"next.config.js\")) || existsSync(resolve(cwd, \"next.config.mjs\"))) return \"Next.js\";\r\n return \"Vanilla JavaScript/TypeScript\";\r\n}\r\n\r\nexport function detectProject(cwd = process.cwd()): ProjectDetection {\r\n const path = resolve(cwd, \"package.json\");\r\n let packageJson: Record<string, unknown> | null = null;\r\n if (existsSync(path)) {\r\n try {\r\n const value: unknown = JSON.parse(readFileSync(path, \"utf8\"));\r\n if (value && typeof value === \"object\" && !Array.isArray(value)) packageJson = value as Record<string, unknown>;\r\n } catch {\r\n packageJson = null;\r\n }\r\n }\r\n // Never inspect dotenv files; public project values can be supplied by the invoking environment.\r\n const env = process.env as Record<string, string | undefined>;\r\n const packageManager = existsSync(resolve(cwd, \"pnpm-lock.yaml\")) ? \"pnpm\" :\r\n existsSync(resolve(cwd, \"yarn.lock\")) ? \"yarn\" :\r\n existsSync(resolve(cwd, \"bun.lockb\")) || existsSync(resolve(cwd, \"bun.lock\")) ? \"bun\" : \"npm\";\r\n const sourceFiles = [\"tsconfig.json\", \"src\", \"app\"].some((entry) => existsSync(resolve(cwd, entry)));\r\n return {\r\n cwd,\r\n packageJson,\r\n sdkVersion: packageJson ? dependencyVersion(packageJson) : undefined,\r\n framework: detectFramework(cwd, packageJson),\r\n language: sourceFiles ? \"TypeScript\" : \"JavaScript\",\r\n packageManager,\r\n config: {\r\n projectId: env.ASIIYST_PROJECT_ID,\r\n publicKey: env.ASIIYST_PUBLIC_KEY,\r\n },\r\n };\r\n}\r\n","export const CLI_API_BASE_URL = \"https://asiyst.com/api/v1\";\r\nexport const ASIIYST_WEB_URL = \"https://asiyst.com\";\r\n","import type { CliSession, SafeProjectInfo, SessionState, VerificationResult } from \"../types.js\";\r\nimport { CLI_API_BASE_URL } from \"../config/api.js\";\r\n\r\nexport class ApiError extends Error {\r\n constructor(message: string, readonly status?: number) {\r\n super(message);\r\n this.name = \"ApiError\";\r\n }\r\n}\r\n\r\nexport class ApiClient {\r\n readonly baseUrl: string;\r\n constructor(baseUrl = process.env.ASIIYST_API_URL || CLI_API_BASE_URL, private readonly fetcher: typeof fetch = fetch) {\r\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\r\n }\r\n\r\n private async request<T>(path: string, init?: RequestInit): Promise<T> {\r\n let response: Response;\r\n const controller = new AbortController();\r\n const timeout = setTimeout(() => controller.abort(), 10000);\r\n try {\r\n response = await this.fetcher(`${this.baseUrl}${path}`, {\r\n ...init,\r\n signal: init?.signal || controller.signal,\r\n headers: { Accept: \"application/json\", \"Content-Type\": \"application/json\", ...init?.headers },\r\n });\r\n } catch (error) {\r\n if ((error instanceof DOMException && error.name === \"AbortError\") || (error instanceof Error && error.name === \"AbortError\")) {\r\n throw new ApiError(`Asiyst API request timed out after 10 seconds: ${this.baseUrl}${path}. Check your connection and try again.`);\r\n }\r\n throw new ApiError(`Unable to reach Asiyst API at ${this.baseUrl}${path}. Check your internet connection, DNS, TLS/HTTPS, or whether the service is unavailable.`);\r\n } finally {\r\n clearTimeout(timeout);\r\n }\r\n const body: unknown = await response.json().catch(() => undefined);\r\n if (!response.ok) {\r\n const detail = response.status === 400 ? \"The request data was invalid.\" :\r\n response.status === 401 ? \"Authentication is required. Please connect your Asiyst account.\" :\r\n response.status === 403 ? \"You are not authorized to perform this operation.\" :\r\n response.status === 404 ? `The API endpoint was not found: ${this.baseUrl}${path}. Please update Asiyst CLI or contact support.` :\r\n response.status === 409 ? \"The request conflicts with the current project state.\" :\r\n response.status === 422 ? \"The request data was invalid.\" :\r\n response.status === 429 ? \"Too many requests; try again shortly.\" :\r\n response.status >= 500 ? \"Asiyst is temporarily unavailable.\" : \"The request was rejected.\";\r\n throw new ApiError(`Asiyst API returned HTTP ${response.status}. ${detail}`, response.status);\r\n }\r\n if (body === undefined) {\r\n throw new ApiError(`Asiyst API returned an invalid JSON response (HTTP ${response.status}).`, response.status);\r\n }\r\n return body as T;\r\n }\r\n\r\n health(): Promise<{ status?: string }> {\r\n return this.request<unknown>(\"/health\").then((body) => {\r\n if (!body || typeof body !== \"object\" || Array.isArray(body)) {\r\n throw new ApiError(\"Asiyst API health endpoint returned an invalid response.\");\r\n }\r\n return body as { status?: string };\r\n });\r\n }\r\n\r\n createSession(): Promise<CliSession> {\r\n return this.request<unknown>(\"/cli/sessions\", { method: \"POST\", body: JSON.stringify({}) }).then((value) => {\r\n if (!value || typeof value !== \"object\") throw new ApiError(\"Asiyst returned an invalid session response\");\r\n const session = value as Record<string, unknown>;\r\n if (typeof session.sessionId !== \"string\" || typeof session.connectUrl !== \"string\" || typeof session.expiresAt !== \"string\") {\r\n throw new ApiError(\"Asiyst returned an invalid session response\");\r\n }\r\n const url = new URL(session.connectUrl);\r\n if (url.protocol !== \"https:\") {\r\n throw new ApiError(\"Asiyst returned an insecure connection URL\");\r\n }\r\n return { sessionId: session.sessionId, connectUrl: url.toString(), expiresAt: session.expiresAt };\r\n });\r\n }\r\n\r\n sessionStatus(sessionId: string): Promise<{ state: SessionState; project?: SafeProjectInfo }> {\r\n return this.request(`/cli/sessions/${encodeURIComponent(sessionId)}/status`);\r\n }\r\n\r\n projectInfo(projectId: string): Promise<SafeProjectInfo> {\r\n return this.request(`/cli/projects/${encodeURIComponent(projectId)}`);\r\n }\r\n\r\n verify(projectId: string, publicKey: string, domain?: string): Promise<VerificationResult[]> {\r\n return this.request<unknown>(\"/cli/verification\", {\r\n method: \"POST\",\r\n body: JSON.stringify({ projectId, publicKey, domain }),\r\n }).then((value) => {\r\n if (!Array.isArray(value) || !value.every((item) => item && typeof item === \"object\" && typeof (item as Record<string, unknown>).name === \"string\" && typeof (item as Record<string, unknown>).ok === \"boolean\")) {\r\n throw new ApiError(\"Asiyst returned an invalid verification response\");\r\n }\r\n return value as VerificationResult[];\r\n });\r\n }\r\n}\r\n","import { existsSync, readFileSync } from \"node:fs\";\r\nimport { resolve } from \"node:path\";\r\nimport type { ProjectDetection } from \"../types.js\";\r\n\r\nexport function hasConfiguration(project: ProjectDetection): boolean {\r\n return Boolean(project.config.projectId && project.config.publicKey);\r\n}\r\n\r\nexport function configWarning(cwd: string): string | undefined {\r\n const envPath = resolve(cwd, \".env\");\r\n if (existsSync(envPath)) {\r\n const ignored = existsSync(resolve(cwd, \".gitignore\")) &&\r\n readFileSync(resolve(cwd, \".gitignore\"), \"utf8\").split(/\\r?\\n/).some((line) => line.trim() === \".env\" || line.trim() === \".env.*\");\r\n if (!ignored) return \"Your .env file is not clearly ignored by .gitignore; do not commit public or private configuration accidentally.\";\r\n }\r\n return undefined;\r\n}\r\n","import { execFile } from \"node:child_process\";\r\nimport { promisify } from \"node:util\";\r\nconst execFileAsync = promisify(execFile);\r\n\r\nexport async function openBrowser(url: string): Promise<boolean> {\r\n const command = process.platform === \"win32\" ? \"rundll32.exe\" : process.platform === \"darwin\" ? \"open\" : \"xdg-open\";\r\n const args = process.platform === \"win32\" ? [\"url.dll,FileProtocolHandler\", url] : [url];\r\n try {\r\n await execFileAsync(command, args);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","import { stdin, stdout } from \"node:process\";\r\nimport { clearLine, cursorTo, emitKeypressEvents, moveCursor } from \"node:readline\";\r\n\r\nexport interface SelectorOption<T> {\r\n label: string;\r\n value: T;\r\n disabled?: boolean;\r\n}\r\n\r\nexport type SelectorResult<T> = { type: \"selected\"; value: T; input: string } | { type: \"cancelled\" | \"exit\"; input: string };\r\n\r\nconst width = () => Math.max(40, (stdout.columns || 80) - 2);\r\nconst fit = (value: string) => value.length > width() ? `${value.slice(0, width() - 1)}…` : value;\r\n\r\nexport function moveSelection(active: number, optionCount: number, direction: \"up\" | \"down\"): number {\r\n if (optionCount === 0) return 0;\r\n return direction === \"up\"\r\n ? Math.max(0, active - 1)\r\n : Math.min(optionCount - 1, active + 1);\r\n}\r\n\r\nexport function clearSelectorFrame(output: NodeJS.WriteStream, previousLineCount: number): void {\r\n if (previousLineCount === 0) return;\r\n moveCursor(output, 0, -previousLineCount);\r\n for (let line = 0; line < previousLineCount; line += 1) {\r\n cursorTo(output, 0);\r\n clearLine(output, 0);\r\n if (line < previousLineCount - 1) moveCursor(output, 0, 1);\r\n }\r\n cursorTo(output, 0);\r\n}\r\n\r\nexport function renderSelectorFrame(output: NodeJS.WriteStream, previousLineCount: number, lines: string[]): number {\r\n clearSelectorFrame(output, previousLineCount);\r\n output.write(lines.join(\"\\n\"));\r\n output.write(\"\\n\");\r\n return lines.length;\r\n}\r\n\r\nexport function selectOption<T>(title: string, options: SelectorOption<T>[], prompt = \"> \"): Promise<SelectorResult<T>> {\r\n if (!stdin.isTTY || !stdout.isTTY) return Promise.resolve({ type: \"cancelled\", input: \"\" });\r\n return new Promise((resolve) => {\r\n let input = \"\";\r\n let active = 0;\r\n let visible = true;\r\n let renderedLines = 0;\r\n let settled = false;\r\n const filtered = () => {\r\n const query = input.trim().toLowerCase();\r\n return query ? options.filter((option) => option.label.toLowerCase().includes(query) || String(option.value).toLowerCase().includes(query)) : options;\r\n };\r\n const clear = () => {\r\n clearSelectorFrame(stdout, renderedLines);\r\n renderedLines = 0;\r\n };\r\n const render = () => {\r\n clear();\r\n const matches = filtered();\r\n if (active >= matches.length) active = Math.max(0, matches.length - 1);\r\n const lines = [`${title}`, `${prompt}${fit(input)}`];\r\n if (visible) {\r\n if (matches.length === 0) lines.push(\" No matching commands.\");\r\n else lines.push(...matches.map((option, index) => `${index === active ? \"❯\" : \" \"} ${fit(option.label)}`));\r\n lines.push(\"↑↓ Navigate Enter Select Esc Cancel\");\r\n }\r\n renderedLines = renderSelectorFrame(stdout, renderedLines, lines);\r\n };\r\n const finish = (result: SelectorResult<T>) => {\r\n if (settled) return;\r\n settled = true;\r\n stdin.off(\"keypress\", onKeypress);\r\n clear();\r\n stdin.setRawMode?.(false);\r\n stdin.pause();\r\n stdout.write(\"\\n\");\r\n resolve(result);\r\n };\r\n const onKeypress = (value: string, key: { name?: string; ctrl?: boolean; sequence?: string }) => {\r\n if (key.ctrl && key.name === \"c\") return finish({ type: \"cancelled\", input });\r\n if (key.ctrl && key.name === \"d\") return finish({ type: \"exit\", input });\r\n if (key.name === \"escape\") {\r\n return finish({ type: \"cancelled\", input });\r\n }\r\n if (key.name === \"up\" || key.name === \"down\") {\r\n const matches = filtered();\r\n if (matches.length > 0) {\r\n active = moveSelection(active, matches.length, key.name);\r\n }\r\n visible = true;\r\n return render();\r\n }\r\n if (key.name === \"return\" || key.name === \"enter\") {\r\n const matches = filtered();\r\n const selected = matches[active];\r\n if (selected) return finish({ type: \"selected\", value: selected.value, input });\r\n return finish({ type: \"cancelled\", input });\r\n }\r\n if (key.name === \"tab\") {\r\n const matches = filtered();\r\n if (matches.length === 1) input = matches[0].value as unknown as string;\r\n else if (matches.length > 1) active = (active + 1) % matches.length;\r\n visible = true;\r\n return render();\r\n }\r\n if (key.name === \"backspace\") {\r\n input = input.slice(0, -1);\r\n visible = true;\r\n return render();\r\n }\r\n const sequence = key.sequence || value;\r\n if (/^[\\x20-\\x7e]+$/.test(sequence)) {\r\n input += sequence;\r\n active = 0;\r\n visible = true;\r\n return render();\r\n }\r\n };\r\n emitKeypressEvents(stdin);\r\n stdin.setRawMode?.(true);\r\n stdin.resume();\r\n stdin.on(\"keypress\", onKeypress);\r\n render();\r\n });\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { openBrowser } from \"../browser/open.js\";\r\nimport type { CliSession, SafeProjectInfo } from \"../types.js\";\r\nimport { selectOption } from \"../ui/selector.js\";\r\n\r\nexport async function connect(api = new ApiClient()): Promise<{ session: CliSession; project?: SafeProjectInfo }> {\r\n await api.health();\r\n const session = await api.createSession();\r\n console.log(`Opening Asiyst...\\n${session.connectUrl}`);\r\n if (!(await openBrowser(session.connectUrl))) console.log(\"Automatic browser opening failed; open the URL above.\");\r\n console.log(\"● Waiting for authentication\\n● Waiting for project selection\\n● Waiting for connection\");\r\n const expires = Date.parse(session.expiresAt);\r\n for (;;) {\r\n const result = await api.sessionStatus(session.sessionId);\r\n if (result.state === \"completed\") return { session, project: result.project };\r\n if (result.state === \"expired\") throw new Error(\"Connection session expired.\");\r\n if (result.state === \"cancelled\") throw new Error(\"Connection session was cancelled.\");\r\n if (Number.isFinite(expires) && Date.now() >= expires) throw new Error(\"Connection session expired.\");\r\n await new Promise((resolve) => setTimeout(resolve, 2000));\r\n }\r\n}\r\n\r\nexport async function confirm(question: string): Promise<boolean> {\r\n if (!process.stdin.isTTY || !process.stdout.isTTY) return true;\r\n const result = await selectOption(question, [\r\n { label: \"Yes\", value: true },\r\n { label: \"No\", value: false },\r\n ]);\r\n return result.type === \"selected\" && result.value;\r\n}\r\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport { join, resolve } from \"node:path\";\r\n\r\nconst trustFile = join(homedir(), \".config\", \"asiyst\", \"trusted-folders.json\");\r\n\r\nfunction readTrusted(): string[] {\r\n if (!existsSync(trustFile)) return [];\r\n try {\r\n const parsed: unknown = JSON.parse(readFileSync(trustFile, \"utf8\"));\r\n return Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\") ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function isTrusted(cwd: string): boolean {\r\n return readTrusted().includes(resolve(cwd));\r\n}\r\n\r\nexport function trustFolder(cwd: string): void {\r\n const folder = resolve(cwd);\r\n const trusted = readTrusted();\r\n if (!trusted.includes(folder)) trusted.push(folder);\r\n mkdirSync(join(homedir(), \".config\", \"asiyst\"), { recursive: true, mode: 0o700 });\r\n writeFileSync(trustFile, JSON.stringify(trusted, null, 2), { encoding: \"utf8\", mode: 0o600 });\r\n}\r\n\r\nexport function revokeTrust(cwd: string): void {\r\n const folder = resolve(cwd);\r\n const trusted = readTrusted().filter((item) => item !== folder);\r\n if (existsSync(trustFile)) writeFileSync(trustFile, JSON.stringify(trusted, null, 2), { encoding: \"utf8\", mode: 0o600 });\r\n}\r\n","import { isTrusted, revokeTrust, trustFolder } from \"../config/trust.js\";\r\nimport { confirm } from \"./shared.js\";\r\nexport async function ensureTrusted(cwd = process.cwd()): Promise<boolean> {\r\n if (isTrusted(cwd)) return true;\r\n if (!(await confirm(`Trust this project folder?\\n\\n${cwd}\\n\\nAsiyst may read project files and modify Asiyst configuration during setup.`))) {\r\n console.log(\"Folder not trusted.\\nExiting...\");\r\n return false;\r\n }\r\n trustFolder(cwd);\r\n console.log(\"✓ Folder trusted.\");\r\n return true;\r\n}\r\nexport async function trustCommand(cwd = process.cwd()): Promise<void> { await ensureTrusted(cwd); }\r\nexport function revokeTrustCommand(cwd = process.cwd()): void { revokeTrust(cwd); console.log(\"✓ Folder trust revoked.\"); }\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { configWarning, hasConfiguration } from \"../config/local.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { ok } from \"../ui/output.js\";\r\nimport { connect, confirm } from \"./shared.js\";\r\nimport { ensureTrusted } from \"./trust.js\";\r\n\r\nexport async function initCommand(cwd = process.cwd(), api = new ApiClient()): Promise<void> {\r\n if (!(await ensureTrusted(cwd))) return;\r\n const project = detectProject(cwd);\r\n if (!project.packageJson) throw new Error(\"No package.json found. Run this command from your website project.\");\r\n console.log(`Detected ${project.framework} project.`);\r\n if (!project.sdkVersion) {\r\n console.log(\"\\n@asiyst/sdk is not installed.\\nRun: npm install @asiyst/sdk\");\r\n return;\r\n }\r\n if (!(await confirm(\"Connect this project to Asiyst?\"))) return;\r\n const result = await connect(api);\r\n ok(\"Asiyst account connected\");\r\n ok(\"Project connected\", result.project?.projectName);\r\n if (result.project?.projectId) {\r\n console.log(`\\nProject ID: ${result.project.projectId}\\nPublic Key: ${result.project.publicKey || project.config.publicKey || \"Use the public key from the Asiyst project settings.\"}`);\r\n }\r\n const warning = configWarning(cwd);\r\n if (warning) console.log(`\\nWarning: ${warning}`);\r\n console.log(\"\\nUse the public SDK API:\\n\\nimport { Asiyst } from \\\"@asiyst/sdk\\\";\\n\\nawait Asiyst.init({ projectId: \\\"PROJECT_ID\\\", publicKey: \\\"PUBLIC_KEY\\\" });\");\r\n console.log(\"\\nRun `npx asiyst verify` after starting your website.\");\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { connect } from \"./shared.js\";\r\nexport async function loginCommand(api = new ApiClient()): Promise<void> {\r\n await connect(api);\r\n console.log(\"✓ Already connected to Asiyst.\");\r\n}\r\n","export function logoutCommand(): void {\r\n console.log(\"✓ Local CLI session information removed (the CLI does not store passwords or private credentials).\");\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nexport async function statusCommand(cwd = process.cwd(), api = new ApiClient()): Promise<void> {\r\n const project = detectProject(cwd);\r\n console.log(`Project: ${typeof project.packageJson?.name === \"string\" ? project.packageJson.name : \"Unknown\"}\\nSDK: ${project.sdkVersion || \"Not connected\"}`);\r\n if (!project.config.projectId || !project.config.publicKey) {\r\n console.log(\"\\nProject: Not connected\\nSDK: Not connected\\nAvatar: Not configured\\n\\nStatistics:\\nConnect your website to show stats.\");\r\n return;\r\n }\r\n const info = await api.projectInfo(project.config.projectId);\r\n console.log(`\\nProject: ${info.connectionStatus || \"Connected\"}\\nSDK: ${project.sdkVersion}\\nAvatar: ${info.avatarStatus || \"Not configured\"}`);\r\n console.log(\"\\nStatistics:\");\r\n console.log(info.lastSdkConnection ? `Last SDK heartbeat: ${info.lastSdkConnection}` : \"No SDK heartbeat recorded.\");\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { printVerification, ok, fail } from \"../ui/output.js\";\r\nexport async function verifyCommand(cwd = process.cwd(), api = new ApiClient()): Promise<void> {\r\n const project = detectProject(cwd);\r\n if (!project.packageJson) { fail(\"Project detected\", \"package.json is missing\"); process.exitCode = 1; return; }\r\n ok(\"Project detected\");\r\n if (!project.sdkVersion) { fail(\"SDK installed\", \"npm install @asiyst/sdk\"); process.exitCode = 1; return; }\r\n ok(\"SDK installed\", project.sdkVersion);\r\n if (!project.config.projectId || !project.config.publicKey) { fail(\"Configuration found\", \"set ASIIYST_PROJECT_ID and ASIIYST_PUBLIC_KEY\"); process.exitCode = 1; return; }\r\n ok(\"Configuration found\");\r\n try {\r\n const results = await api.verify(project.config.projectId, project.config.publicKey, process.env.ASIIYST_DOMAIN);\r\n if (!printVerification(results)) process.exitCode = 1;\r\n } catch (error) {\r\n fail(\"API reachable\", error instanceof Error ? error.message : \"verification failed\");\r\n process.exitCode = 1;\r\n }\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { ok, fail } from \"../ui/output.js\";\r\nexport async function doctorCommand(cwd = process.cwd(), api = new ApiClient()): Promise<void> {\r\n const project = detectProject(cwd);\r\n ok(\"System\", process.platform);\r\n ok(\"Node.js\", process.version);\r\n ok(\"npm\", \"available through npm\");\r\n project.packageJson ? ok(\"Project\", cwd) : fail(\"Project\", \"package.json is missing\");\r\n project.sdkVersion ? ok(\"SDK\", project.sdkVersion) : fail(\"SDK\", \"not installed\");\r\n project.config.projectId && project.config.publicKey ? ok(\"Configuration\") : fail(\"Configuration\", \"public project values are missing\");\r\n try { await api.health(); ok(\"Asiyst API\", \"HTTPS health endpoint reachable\"); }\r\n catch (error) { fail(\"Asiyst API\", error instanceof Error ? error.message : \"unreachable\"); }\r\n if (project.config.projectId && project.config.publicKey) {\r\n try { await api.projectInfo(project.config.projectId); ok(\"Project connection\"); }\r\n catch (error) { fail(\"Project connection\", error instanceof Error ? error.message : \"unavailable\"); }\r\n }\r\n}\r\n","import { openBrowser } from \"../browser/open.js\";\r\nimport { ASIIYST_WEB_URL } from \"../config/api.js\";\r\nexport async function dashboardCommand(): Promise<void> {\r\n const configured = process.env.ASIIYST_DASHBOARD_URL || `${ASIIYST_WEB_URL}/dashboard`;\r\n const parsed = new URL(configured);\r\n if (parsed.protocol !== \"https:\") throw new Error(\"Configured dashboard URL must use HTTPS.\");\r\n const url = parsed.toString();\r\n if (!(await openBrowser(url))) console.log(`Open ${url}`);\r\n else console.log(`Opening ${url}`);\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { openBrowser } from \"../browser/open.js\";\r\nimport { ASIIYST_WEB_URL } from \"../config/api.js\";\r\nexport async function avatarCommand(cwd = process.cwd(), api = new ApiClient()): Promise<void> {\r\n const project = detectProject(cwd);\r\n if (!project.config.projectId) {\r\n console.log(\"Avatar\\n─────────────────────────────\\nNo avatar configured.\\n\\nCreate your avatar in the Asiyst dashboard.\");\r\n const url = `${ASIIYST_WEB_URL}/dashboard`;\r\n if (await openBrowser(url)) console.log(`Opening ${url}`); else console.log(`Open ${url}`);\r\n return;\r\n }\r\n const info = await api.projectInfo(project.config.projectId);\r\n console.log(`Avatar\\n─────────────────────────────\\nStatus ${info.avatarStatus || \"Not configured\"}\\n\\nConfigure your avatar in the Asiyst dashboard.`);\r\n}\r\n","import { execFileSync } from \"node:child_process\";\r\nimport { readFileSync } from \"node:fs\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\n\r\nconst PACKAGE_NAME = \"@asiyst/cli\";\r\nconst REGISTRY_URL = \"https://registry.npmjs.org/%40asiyst%2Fcli/latest\";\r\nconst TIMEOUT_MS = 800;\r\ntype CommandRunner = (file: string, args: string[], options: { encoding?: BufferEncoding; stdio?: \"inherit\" }) => string | Buffer | undefined;\r\nconst defaultRunner: CommandRunner = (file, args, options) => execFileSync(file, args, options);\r\n\r\nexport interface UpdateInfo {\r\n currentVersion: string;\r\n latestVersion?: string;\r\n}\r\n\r\nfunction parseVersion(value: string): { numbers: number[]; prerelease: string[] } | undefined {\r\n const match = /^[v=]?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(value.trim());\r\n return match\r\n ? { numbers: [Number(match[1]), Number(match[2]), Number(match[3])], prerelease: match[4]?.split(\".\") ?? [] }\r\n : undefined;\r\n}\r\n\r\nexport function compareVersions(left: string, right: string): number {\r\n const a = parseVersion(left);\r\n const b = parseVersion(right);\r\n if (!a || !b) return 0;\r\n for (let index = 0; index < 3; index += 1) {\r\n if (a.numbers[index] !== b.numbers[index]) return a.numbers[index] > b.numbers[index] ? 1 : -1;\r\n }\r\n if (a.prerelease.length === 0 && b.prerelease.length > 0) return 1;\r\n if (a.prerelease.length > 0 && b.prerelease.length === 0) return -1;\r\n for (let index = 0; index < Math.max(a.prerelease.length, b.prerelease.length); index += 1) {\r\n const leftPart = a.prerelease[index];\r\n const rightPart = b.prerelease[index];\r\n if (leftPart === undefined) return -1;\r\n if (rightPart === undefined) return 1;\r\n if (leftPart === rightPart) continue;\r\n const leftNumber = /^\\d+$/.test(leftPart) ? Number(leftPart) : undefined;\r\n const rightNumber = /^\\d+$/.test(rightPart) ? Number(rightPart) : undefined;\r\n if (leftNumber !== undefined && rightNumber !== undefined) return leftNumber > rightNumber ? 1 : -1;\r\n if (leftNumber !== undefined) return -1;\r\n if (rightNumber !== undefined) return 1;\r\n return leftPart > rightPart ? 1 : -1;\r\n }\r\n return 0;\r\n}\r\n\r\nexport async function checkForUpdate(\r\n currentVersion = readCurrentVersion(),\r\n fetcher: typeof fetch = fetch,\r\n): Promise<UpdateInfo> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);\r\n try {\r\n const response = await fetcher(REGISTRY_URL, { headers: { Accept: \"application/json\" }, signal: controller.signal });\r\n if (!response.ok) return { currentVersion };\r\n const body: unknown = await response.json();\r\n const latestVersion = body && typeof body === \"object\" && typeof (body as Record<string, unknown>).version === \"string\"\r\n ? (body as Record<string, string>).version\r\n : undefined;\r\n return latestVersion && parseVersion(latestVersion) ? { currentVersion, latestVersion } : { currentVersion };\r\n } catch {\r\n return { currentVersion };\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n}\r\n\r\nexport async function notifyIfUpdateAvailable(): Promise<void> {\r\n const result = await checkForUpdate();\r\n if (result.latestVersion && compareVersions(result.latestVersion, result.currentVersion) > 0) {\r\n console.log(`\\n⚠ New Asiyst CLI version available: ${result.currentVersion} → ${result.latestVersion}\\nRun \\`update\\` to install the latest version.\\n`);\r\n }\r\n}\r\n\r\nexport type InstallKind = \"npx\" | \"global\" | \"local\";\r\n\r\nexport function detectInstallKind(\r\n executablePath = process.argv[1] ?? \"\",\r\n env: NodeJS.ProcessEnv = process.env,\r\n globalRootResolver: () => string | undefined = () => {\r\n try {\r\n return execFileSync(process.platform === \"win32\" ? \"npm.cmd\" : \"npm\", [\"root\", \"--global\"], { encoding: \"utf8\" }).trim();\r\n } catch {\r\n return undefined;\r\n }\r\n },\r\n): InstallKind {\r\n if (env.npm_command === \"exec\" || /[\\\\/]_npx[\\\\/]/i.test(executablePath)) return \"npx\";\r\n const globalRoot = globalRootResolver();\r\n if (globalRoot && executablePath.toLowerCase().startsWith(`${globalRoot.toLowerCase()}\\\\`)) return \"global\";\r\n if (globalRoot && executablePath.toLowerCase().startsWith(`${globalRoot.toLowerCase()}/`)) return \"global\";\r\n return \"local\";\r\n}\r\n\r\nfunction installedVersion(packageRoot: string): string | undefined {\r\n try {\r\n const value: unknown = JSON.parse(readFileSync(`${packageRoot}/package.json`, \"utf8\"));\r\n return value && typeof value === \"object\" && typeof (value as Record<string, unknown>).version === \"string\"\r\n ? (value as Record<string, string>).version\r\n : undefined;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function installLatest(\r\n latestVersion: string,\r\n kind: InstallKind,\r\n executablePath = process.argv[1] ?? \"\",\r\n runner: CommandRunner = defaultRunner,\r\n): string | undefined {\r\n const executable = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\r\n if (kind === \"global\") {\r\n runner(executable, [\"install\", \"--global\", `${PACKAGE_NAME}@${latestVersion}`], { stdio: \"inherit\" });\r\n const packageRoot = executablePath.replace(/[\\\\/]dist[\\\\/][^\\\\/]+$/, \"\");\r\n return installedVersion(packageRoot);\r\n }\r\n if (kind === \"npx\") {\r\n const npx = process.platform === \"win32\" ? \"npx.cmd\" : \"npx\";\r\n const output = runner(npx, [\"--yes\", `${PACKAGE_NAME}@${latestVersion}`, \"--version\"], { encoding: \"utf8\" });\r\n return typeof output === \"string\" ? output.trim().split(/\\r?\\n/).pop() : undefined;\r\n }\r\n return undefined;\r\n}\r\n","import { readFileSync } from \"node:fs\";\r\nimport { fileURLToPath } from \"node:url\";\r\n\r\nexport function readCurrentVersion(): string {\r\n for (const packageUrl of [\r\n new URL(\"../package.json\", import.meta.url),\r\n new URL(\"../../package.json\", import.meta.url),\r\n new URL(\"../../../package.json\", import.meta.url),\r\n ]) {\r\n try {\r\n const packageJson: unknown = JSON.parse(readFileSync(fileURLToPath(packageUrl), \"utf8\"));\r\n if (packageJson && typeof packageJson === \"object\" && typeof (packageJson as Record<string, unknown>).version === \"string\") {\r\n return (packageJson as Record<string, string>).version;\r\n }\r\n } catch {\r\n // Keep CLI commands available if package metadata cannot be read.\r\n }\r\n }\r\n return \"0.2.0\";\r\n}\r\n","import { checkForUpdate, compareVersions, detectInstallKind, installLatest } from \"../update/check.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\nimport { confirm } from \"./shared.js\";\r\n\r\nexport async function updateCommand(): Promise<void> {\r\n const result = await checkForUpdate();\r\n if (!result.latestVersion || compareVersions(result.latestVersion, result.currentVersion) <= 0) {\r\n console.log(`✓ Asiyst CLI is already up to date.\\n\\nCurrent version: ${result.currentVersion}`);\r\n return;\r\n }\r\n console.log(`\\nUpdate available\\n\\nCurrent version: ${result.currentVersion}\\nNew version: ${result.latestVersion}\\n`);\r\n if (!process.stdin.isTTY || !(await confirm(`Update Asiyst CLI from ${result.currentVersion} to ${result.latestVersion}?`))) {\r\n console.log(\"Update cancelled.\");\r\n return;\r\n }\r\n const kind = detectInstallKind();\r\n if (kind === \"local\") {\r\n console.log(\"This CLI is installed locally. Update it through its package manager; no project files were changed.\");\r\n return;\r\n }\r\n try {\r\n console.log(\"\\nUpdating Asiyst CLI...\\n✓ Downloading and installing\");\r\n const installed = installLatest(result.latestVersion, kind);\r\n if (!installed || compareVersions(installed, result.latestVersion) !== 0) {\r\n throw new Error(\"installed version could not be verified\");\r\n }\r\n console.log(`✓ Verifying installation\\n\\nAsiyst CLI updated from ${result.currentVersion} to ${installed}.\\nRestart Asiyst to use the new version.`);\r\n } catch (error) {\r\n console.log(`✗ Update failed. Your current CLI is unchanged.\\n${error instanceof Error ? error.message : \"Installation could not be verified.\"}`);\r\n }\r\n}\r\n\r\nexport function currentVersion(): string {\r\n return readCurrentVersion();\r\n}\r\n","import { detectProject } from \"../detection/project.js\";\r\nimport { homeStatus } from \"../ui/output.js\";\r\nimport { selectOption } from \"../ui/selector.js\";\r\nimport { avatarCommand } from \"./avatar.js\";\r\nimport { dashboardCommand } from \"./dashboard.js\";\r\nimport { doctorCommand } from \"./doctor.js\";\r\nimport { initCommand } from \"./init.js\";\r\nimport { logoutCommand } from \"./logout.js\";\r\nimport { statusCommand } from \"./status.js\";\r\nimport { revokeTrustCommand, trustCommand } from \"./trust.js\";\r\nimport { updateCommand } from \"./update.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\n\r\nexport function resolveInput(value: string): string {\r\n const input = value.trim().toLowerCase();\r\n if (/^(connect|connect my website|connect this website|connect website|init)/.test(input)) return \"connect\";\r\n if (/^(status|check status|check .*installation)/.test(input)) return \"status\";\r\n if (/diagnos|doctor/.test(input)) return \"diagnostics\";\r\n if (/dashboard/.test(input)) return \"dashboard\";\r\n if (/avatar|configure my avatar|create avatar/.test(input)) return \"avatar\";\r\n if (/update|upgrade/.test(input)) return \"update\";\r\n if (/^(help|\\?)$/.test(input)) return \"help\";\r\n if (/^(version|--version)$/.test(input)) return \"version\";\r\n return input;\r\n}\r\n\r\nexport function interactiveHelp(): void {\r\n console.log(\"\\nASIYST CLI\\n\\nUsage: asiyst [command]\\n\\nCommands\\n connect Connect this project to Asiyst\\n status Show project and Asiyst status\\n diagnostics Run diagnostics\\n dashboard Open Asiyst dashboard\\n avatar Configure avatar\\n update Check for and install CLI updates\\n help Show available commands\\n version Show CLI version\\n trust Trust this project folder\\n revoke-trust Revoke folder trust\\n logout Remove local CLI session information\\n\\nExamples\\n asiyst connect\\n asiyst status\\n asiyst update\");\r\n}\r\n\r\nexport async function interactiveHome(): Promise<void> {\r\n homeStatus(detectProject());\r\n console.log(\"\\nWelcome to Asiyst CLI.\\nUse UP/DOWN to select a command, or type a command.\\n\");\r\n const suggestions = [\r\n { label: \"Connect this project\", value: \"connect\" },\r\n { label: \"Check project status\", value: \"status\" },\r\n { label: \"Run diagnostics\", value: \"diagnostics\" },\r\n { label: \"Open dashboard\", value: \"dashboard\" },\r\n { label: \"Configure avatar\", value: \"avatar\" },\r\n { label: \"Update CLI\", value: \"update\" },\r\n { label: \"Help\", value: \"help\" },\r\n { label: \"Exit\", value: \"exit\" },\r\n ];\r\n for (;;) {\r\n const result = await selectOption(\"What would you like to do?\", suggestions, \"› \");\r\n if (result.type === \"exit\") break;\r\n if (result.type !== \"selected\") continue;\r\n const command = resolveInput(result.input || String(result.value));\r\n if (command === \"exit\" || command === \"quit\") {\r\n const confirmed = await selectOption(\"Exit Asiyst?\", [\r\n { label: \"Yes\", value: true },\r\n { label: \"No\", value: false },\r\n ]);\r\n if (confirmed.type === \"selected\") {\r\n if (confirmed.value) break;\r\n }\r\n continue;\r\n }\r\n if (command === \"connect\") await initCommand();\r\n else if (command === \"status\") await statusCommand();\r\n else if (command === \"diagnostics\") await doctorCommand();\r\n else if (command === \"dashboard\") await dashboardCommand();\r\n else if (command === \"avatar\") await avatarCommand();\r\n else if (command === \"update\") await updateCommand();\r\n else if (command === \"logout\") logoutCommand();\r\n else if (command === \"trust\") await trustCommand();\r\n else if (command === \"revoke-trust\") revokeTrustCommand();\r\n else if (command === \"help\") interactiveHelp();\r\n else if (command === \"version\") console.log(readCurrentVersion());\r\n else console.log(`I don't recognize that command: ${result.input}\\nRun 'asiyst help' for available commands.`);\r\n }\r\n}\r\n","import { projectChecks } from \"./ui/output.js\";\r\nimport { detectProject } from \"./detection/project.js\";\r\nimport { initCommand } from \"./commands/init.js\";\r\nimport { loginCommand } from \"./commands/login.js\";\r\nimport { logoutCommand } from \"./commands/logout.js\";\r\nimport { statusCommand } from \"./commands/status.js\";\r\nimport { verifyCommand } from \"./commands/verify.js\";\r\nimport { doctorCommand } from \"./commands/doctor.js\";\r\nimport { dashboardCommand } from \"./commands/dashboard.js\";\r\nimport { avatarCommand } from \"./commands/avatar.js\";\r\nimport { revokeTrustCommand, trustCommand } from \"./commands/trust.js\";\r\nimport { interactiveHelp, interactiveHome } from \"./commands/interactive.js\";\r\nimport { readCurrentVersion } from \"./config/version.js\";\r\nimport { notifyIfUpdateAvailable } from \"./update/check.js\";\r\nimport { updateCommand } from \"./commands/update.js\";\r\nimport { fileURLToPath } from \"node:url\";\r\n\r\nexport const CLI_VERSION = readCurrentVersion();\r\nfunction help(): void { interactiveHelp(); }\r\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\r\n const command = argv[0] || \"\";\r\n if (command !== \"update\" && !argv.includes(\"--version\") && !argv.includes(\"-v\") && !argv.includes(\"--help\") && !argv.includes(\"-h\")) {\r\n await notifyIfUpdateAvailable();\r\n }\r\n if (command === \"--help\" || command === \"-h\") return help();\r\n if (command === \"--version\" || command === \"-v\") return console.log(CLI_VERSION);\r\n if (command === \"init\" || command === \"connect\") return initCommand();\r\n if (command === \"login\") return loginCommand();\r\n if (command === \"logout\") return logoutCommand();\r\n if (command === \"status\") return statusCommand();\r\n if (command === \"verify\") return verifyCommand();\r\n if (command === \"doctor\") return doctorCommand();\r\n if (command === \"diagnostics\") return doctorCommand();\r\n if (command === \"dashboard\") return dashboardCommand();\r\n if (command === \"avatar\") return avatarCommand();\r\n if (command === \"trust\") return trustCommand();\r\n if (command === \"revoke-trust\") return revokeTrustCommand();\r\n if (command === \"update\") return updateCommand();\r\n if (command === \"help\") return help();\r\n if (command === \"version\") return console.log(CLI_VERSION);\r\n if (!process.stdin.isTTY) {\r\n const project = detectProject();\r\n projectChecks(project);\r\n console.log(\"\\nRun `npx @asiyst/cli connect` to connect this project, or `npx @asiyst/cli --help` for commands.\");\r\n return;\r\n }\r\n return interactiveHome();\r\n}\r\nif (process.argv[1] && fileURLToPath(import.meta.url) === process.argv[1]) {\r\n main().catch((error: unknown) => { console.error(`\\nError: ${error instanceof Error ? error.message : \"command failed\"}`); process.exitCode = 1; });\r\n}\r\n"],"mappings":"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","names":["existsSync","readFileSync","resolve","resolve","existsSync","readFileSync","resolve","resolve","existsSync","readFileSync","resolve","readFileSync","readFileSync","readFileSync","fileURLToPath"]}
|
|
1
|
+
{"version":3,"sources":["../src/config/ids.ts","../src/api/errors.ts","../src/api/verification.ts","../src/browser/open.ts","../src/config/api.ts","../src/config/credentials.ts","../src/config/project.ts","../src/detection/project.ts","../src/ui/format.ts","../src/ui/output.ts","../src/ui/selector.ts","../src/ui/secret.ts","../src/config/trust.ts","../src/api/client.ts","../src/commands/shared.ts","../src/commands/trust.ts","../src/commands/connect.ts","../src/commands/login.ts","../src/commands/disconnect.ts","../src/commands/logout.ts","../src/commands/status.ts","../src/api/projects.ts","../src/commands/verify.ts","../src/config/version.ts","../src/commands/doctor.ts","../src/commands/dashboard.ts","../src/integration/writer.ts","../src/commands/avatar.ts","../src/commands/interactive.ts","../src/commands/health.ts","../src/update/check.ts","../src/commands/update.ts","../src/index.ts"],"sourcesContent":["export const PUBLIC_IDENTIFIER_PATTERN = /^(?=.{1,128}$)[A-Za-z0-9_][A-Za-z0-9_-]*$/;\r\nexport const PROJECT_ID_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9_-]{23}$/;\r\nexport const API_KEY_PATTERN = /^[A-Za-z0-9_-]{32}$/;\r\nexport const USER_ID_PATTERN = /^[A-Za-z0-9-]{16}$/;\r\nexport const AVATAR_ID_PATTERN = /^[A-Za-z0-9]{10}$/;\r\n\r\nexport function isValidPublicIdentifier(value: unknown): value is string {\r\n if (typeof value !== \"string\") return false;\r\n const trimmed = value.trim();\r\n if (!trimmed || trimmed.length > 128) return false;\r\n if (trimmed === \"undefined\" || trimmed === \"null\") return false;\r\n if (/^[0-9a-f]{8}-[0-9a-f]{4}-[1-5][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/i.test(trimmed)) {\r\n return false;\r\n }\r\n\r\n return PUBLIC_IDENTIFIER_PATTERN.test(trimmed);\r\n}\r\n\r\nexport function isValidProjectId(value: unknown): value is string {\r\n return typeof value === \"string\" && PROJECT_ID_PATTERN.test(value.trim());\r\n}\r\n\r\nexport function isValidApiKey(value: unknown): value is string {\r\n return typeof value === \"string\" && API_KEY_PATTERN.test(value.trim());\r\n}\r\n\r\nexport function isValidUserId(value: unknown): value is string {\r\n return typeof value === \"string\"\r\n && value.trim() !== \"undefined\"\r\n && value.trim() !== \"null\"\r\n && USER_ID_PATTERN.test(value);\r\n}\r\n\r\nexport function isValidAvatarId(value: unknown): value is string {\r\n return typeof value === \"string\" && value.trim() !== \"undefined\" && value.trim() !== \"null\" && AVATAR_ID_PATTERN.test(value.trim());\r\n}\r\n\r\nexport function parseProjectIdArgument(argv: string[] = []): string | undefined {\r\n const length = argv.length;\r\n for (let index = 0; index < length; index += 1) {\r\n const entry = argv[index];\r\n if (entry === \"--project-id\" || entry === \"--projectId\") {\r\n const next = argv[index + 1];\r\n return typeof next === \"string\" ? next : \"\";\r\n }\r\n if (entry.startsWith(\"--project-id=\") || entry.startsWith(\"--projectId=\")) {\r\n return entry.slice(entry.indexOf(\"=\") + 1);\r\n }\r\n }\r\n return undefined;\r\n}\r\n","export type ApiErrorCode =\n | \"INVALID_API_KEY\"\n | \"API_KEY_REVOKED\"\n | \"FORBIDDEN\"\n | \"PROJECT_NOT_FOUND\"\n | \"RATE_LIMITED\"\n | \"INTERNAL_ERROR\"\n | \"NOT_FOUND\"\n | \"TIMEOUT\"\n | \"NETWORK\"\n | \"MALFORMED_RESPONSE\"\n | \"CONFLICT\"\n | \"INVALID_REQUEST\"\n | \"INVALID_USER_ID\"\n | \"INVALID_PROJECT_ID\"\n | \"INVALID_AVATAR_ID\"\n | \"USER_MISMATCH\"\n | \"PROJECT_MISMATCH\"\n | \"AVATAR_NOT_FOUND\"\n | \"AVATAR_ALREADY_IMPORTED\"\n | \"AVATAR_MISMATCH\"\n | \"IMPORT_FAILED\"\n | \"UNKNOWN\";\n\nexport class ApiError extends Error {\n constructor(\n message: string,\n readonly status?: number,\n readonly code: ApiErrorCode = \"UNKNOWN\",\n ) {\n super(message);\n this.name = \"ApiError\";\n }\n}\n\nexport function errorCodeFromStatus(status: number, bodyCode?: string): ApiErrorCode {\n if (bodyCode === \"INVALID_API_KEY\") return \"INVALID_API_KEY\";\n if (bodyCode === \"API_KEY_REVOKED\") return \"API_KEY_REVOKED\";\n if (bodyCode === \"FORBIDDEN\") return \"FORBIDDEN\";\n if (bodyCode === \"USER_MISMATCH\") return \"USER_MISMATCH\";\n if (bodyCode === \"PROJECT_MISMATCH\") return \"PROJECT_MISMATCH\";\n if (bodyCode === \"PROJECT_NOT_FOUND\") return \"PROJECT_NOT_FOUND\";\n if (bodyCode === \"AVATAR_NOT_FOUND\") return \"AVATAR_NOT_FOUND\";\n if (bodyCode === \"AVATAR_ALREADY_IMPORTED\") return \"AVATAR_ALREADY_IMPORTED\";\n if (bodyCode === \"RATE_LIMITED\") return \"RATE_LIMITED\";\n if (bodyCode === \"INTERNAL_ERROR\") return \"INTERNAL_ERROR\";\n if (status === 401) return \"INVALID_API_KEY\";\n if (status === 403) return \"FORBIDDEN\";\n if (status === 404) return \"NOT_FOUND\";\n if (status === 409) return \"CONFLICT\";\n if (status === 400 || status === 422) return \"INVALID_REQUEST\";\n if (status === 429) return \"RATE_LIMITED\";\n if (status >= 500) return \"INTERNAL_ERROR\";\n return \"UNKNOWN\";\n}\n\nexport function friendlyApiMessage(error: ApiError, endpointUrl?: string): string {\n if (error.code === \"INVALID_API_KEY\") return \"✗ Invalid API key.\";\n if (error.code === \"API_KEY_REVOKED\") {\n return \"✗ This API key has been revoked.\\nCreate a new key from:\\nhttps://asiyst.com\";\n }\n if (error.code === \"FORBIDDEN\") {\n return \"✗ This API key does not have permission to access this resource.\";\n }\n if (error.code === \"USER_MISMATCH\") return \"✗ The supplied identifiers do not belong to the verified user.\";\n if (error.code === \"PROJECT_MISMATCH\") return \"✗ The supplied identifiers do not belong to the verified project.\";\n if (error.code === \"NOT_FOUND\") {\n return endpointUrl\n ? `✗ Asiyst API endpoint was not found.\\nVerify that the CLI is using:\\n${endpointUrl}`\n : \"✗ Asiyst API endpoint was not found.\";\n }\n if (error.code === \"TIMEOUT\") return \"Connection to Asiyst timed out.\";\n if (error.code === \"NETWORK\") return \"✗ Unable to reach Asiyst API.\";\n if (error.code === \"MALFORMED_RESPONSE\") return \"Received an unexpected response from Asiyst.\";\n if (error.code === \"RATE_LIMITED\") return \"✗ Too many requests. Try again shortly.\";\n if (error.code === \"PROJECT_NOT_FOUND\") return \"✗ Authorized project was not found.\";\n if (error.code === \"CONFLICT\") return \"✗ The request conflicts with the current project state.\";\n if (error.code === \"INVALID_REQUEST\") return \"✗ The request was invalid.\";\n if (error.code === \"AVATAR_NOT_FOUND\") return \"✗ Avatar was not found.\";\n if (error.code === \"AVATAR_ALREADY_IMPORTED\") return \"✗ This avatar is already imported into the project.\";\n if (error.code === \"INTERNAL_ERROR\") return \"✗ Asiyst is temporarily unavailable.\";\n return \"✗ Asiyst request failed.\";\n}\n","import { isValidApiKey, isValidAvatarId, isValidProjectId, isValidUserId } from \"../config/ids.js\";\r\nimport type { ConnectedProject } from \"../types.js\";\r\nimport { ApiClient } from \"./client.js\";\r\nimport { ApiError, type ApiErrorCode } from \"./errors.js\";\r\n\r\nexport interface UserVerificationResult {\r\n userId: string;\r\n userName?: string;\r\n}\r\n\r\nexport interface ProjectVerificationResult {\r\n userId: string;\r\n projectId: string;\r\n projectName?: string;\r\n website?: string;\r\n publicKey?: string;\r\n}\r\n\r\nexport interface AvatarVerificationResult {\r\n userId: string;\r\n projectId: string;\r\n avatarId: string;\r\n avatarName?: string;\r\n}\r\n\r\nexport interface ImportSessionResult {\r\n sessionId: string;\r\n expiresAt?: string;\r\n}\r\n\r\nfunction record(value: unknown): Record<string, unknown> {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\r\n }\r\n const root = value as Record<string, unknown>;\r\n const data = root.data && typeof root.data === \"object\" && !Array.isArray(root.data)\r\n ? root.data as Record<string, unknown>\r\n : root;\r\n return data;\r\n}\r\n\r\nfunction stringValue(body: Record<string, unknown>, ...keys: string[]): string | undefined {\r\n for (const key of keys) {\r\n if (typeof body[key] === \"string\" && body[key].trim()) return body[key].trim();\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction nestedStringValue(body: Record<string, unknown>, containers: string[], ...keys: string[]): string | undefined {\r\n const direct = stringValue(body, ...keys);\r\n if (direct) return direct;\r\n for (const container of containers) {\r\n const nested = body[container];\r\n if (nested && typeof nested === \"object\" && !Array.isArray(nested)) {\r\n const value = stringValue(nested as Record<string, unknown>, ...keys);\r\n if (value) return value;\r\n }\r\n }\r\n return undefined;\r\n return undefined;\r\n}\r\n\r\nfunction assertValid(value: string, name: string, validator: (candidate: unknown) => boolean): string {\r\n const trimmed = value.trim();\r\n if (!validator(trimmed)) {\r\n const code: ApiErrorCode = name === \"User ID\"\r\n ? \"INVALID_USER_ID\"\r\n : name === \"Project ID\"\r\n ? \"INVALID_PROJECT_ID\"\r\n : name === \"Avatar ID\"\r\n ? \"INVALID_AVATAR_ID\"\r\n : \"INVALID_API_KEY\";\r\n throw new ApiError(`Invalid ${name}.`, 400, code);\r\n }\r\n return trimmed;\r\n}\r\n\r\nfunction assertVerified(body: Record<string, unknown>, message: string): void {\r\n if (body.valid === false || body.verified === false || body.success === false) {\r\n throw new ApiError(stringValue(body, \"message\", \"error\") ?? message, 400, \"FORBIDDEN\");\r\n }\r\n}\r\n\r\nexport async function verifyUser(api: ApiClient, userId: string): Promise<UserVerificationResult> {\r\n const verifiedUserId = assertValid(userId, \"User ID\", isValidUserId);\r\n const body = record(await api.request<unknown>(\"/verify/user\", {\r\n method: \"POST\",\r\n body: JSON.stringify({ userId: verifiedUserId }),\r\n }));\r\n assertVerified(body, \"User ID verification failed.\");\r\n const returned = nestedStringValue(body, [\"user\"], \"userId\", \"user_id\", \"id\");\r\n if (returned !== verifiedUserId) throw new ApiError(\"The API returned a different User ID.\", 200, \"USER_MISMATCH\");\r\n return { userId: verifiedUserId, userName: stringValue(body, \"userName\", \"name\") };\r\n}\r\n\r\nexport async function verifyProject(api: ApiClient, userId: string, projectId: string): Promise<ProjectVerificationResult> {\r\n const verifiedUserId = assertValid(userId, \"User ID\", isValidUserId);\r\n const verifiedProjectId = assertValid(projectId, \"Project ID\", isValidProjectId);\r\n const body = record(await api.request<unknown>(\"/verify/project\", {\r\n method: \"POST\",\r\n body: JSON.stringify({ userId: verifiedUserId, projectId: verifiedProjectId }),\r\n }));\r\n assertVerified(body, \"Project verification failed.\");\r\n const returnedProjectId = nestedStringValue(body, [\"project\"], \"projectId\", \"project_id\", \"id\");\r\n const returnedUserId = nestedStringValue(body, [\"user\"], \"userId\", \"user_id\", \"id\");\r\n if (returnedProjectId && returnedProjectId !== verifiedProjectId) throw new ApiError(\"The API returned a different Project ID.\", 200, \"PROJECT_MISMATCH\");\r\n if (returnedUserId && returnedUserId !== verifiedUserId) throw new ApiError(\"The API returned a different User ID.\", 200, \"USER_MISMATCH\");\r\n return {\r\n userId: verifiedUserId,\r\n projectId: verifiedProjectId,\r\n projectName: nestedStringValue(body, [\"project\"], \"projectName\", \"project_name\", \"name\"),\r\n website: nestedStringValue(body, [\"project\"], \"website\", \"websiteUrl\", \"website_url\", \"domain\"),\r\n publicKey: nestedStringValue(body, [\"project\"], \"publicKey\", \"public_key\", \"publishableKey\"),\r\n };\r\n}\r\n\r\nexport async function verifyApiKeyRelationship(\r\n api: ApiClient,\r\n input: { userId: string; projectId: string; apiKey: string },\r\n): Promise<ConnectedProject> {\r\n const userId = assertValid(input.userId, \"User ID\", isValidUserId);\r\n const projectId = assertValid(input.projectId, \"Project ID\", isValidProjectId);\r\n const apiKey = assertValid(input.apiKey, \"API key\", isValidApiKey);\r\n const body = record(await api.request<unknown>(\"/verify/api-key\", {\r\n method: \"POST\",\r\n headers: { Authorization: `Bearer ${apiKey}`, \"X-Asiyst-API-Key\": apiKey },\r\n body: JSON.stringify({ userId, projectId, apiKey }),\r\n }));\r\n assertVerified(body, \"API key verification failed.\");\r\n const returnedUserId = nestedStringValue(body, [\"user\"], \"userId\", \"user_id\", \"id\");\r\n const returnedProjectId = nestedStringValue(body, [\"project\"], \"projectId\", \"project_id\", \"id\");\r\n if (returnedUserId && returnedUserId !== userId) throw new ApiError(\"The API returned a different User ID.\", 200, \"USER_MISMATCH\");\r\n if (returnedProjectId && returnedProjectId !== projectId) throw new ApiError(\"The API returned a different Project ID.\", 200, \"PROJECT_MISMATCH\");\r\n return {\r\n apiKey,\r\n userId,\r\n projectId,\r\n projectName: nestedStringValue(body, [\"project\"], \"projectName\", \"project_name\", \"name\"),\r\n website: nestedStringValue(body, [\"project\"], \"website\", \"websiteUrl\", \"website_url\", \"domain\"),\r\n publicKey: nestedStringValue(body, [\"project\"], \"publicKey\", \"public_key\", \"publishableKey\"),\r\n };\r\n}\r\n\r\nexport async function verifyAvatar(\r\n api: ApiClient,\r\n input: { userId: string; projectId: string; apiKey: string; avatarId: string },\r\n): Promise<AvatarVerificationResult> {\r\n const userId = assertValid(input.userId, \"User ID\", isValidUserId);\r\n const projectId = assertValid(input.projectId, \"Project ID\", isValidProjectId);\r\n const apiKey = assertValid(input.apiKey, \"API key\", isValidApiKey);\r\n const avatarId = assertValid(input.avatarId, \"Avatar ID\", isValidAvatarId);\r\n const body = record(await api.request<unknown>(\"/verify/avatar\", {\r\n method: \"POST\",\r\n headers: { Authorization: `Bearer ${apiKey}`, \"X-Asiyst-API-Key\": apiKey },\r\n body: JSON.stringify({ userId, projectId, apiKey, avatarId }),\r\n }));\r\n assertVerified(body, \"Avatar verification failed.\");\r\n const returnedAvatarId = nestedStringValue(body, [\"avatar\"], \"avatarId\", \"avatar_id\", \"id\");\r\n const returnedUserId = nestedStringValue(body, [\"user\"], \"userId\", \"user_id\", \"id\");\r\n const returnedProjectId = nestedStringValue(body, [\"project\"], \"projectId\", \"project_id\", \"id\");\r\n if (returnedAvatarId && returnedAvatarId !== avatarId) throw new ApiError(\"The API returned a different Avatar ID.\", 200, \"AVATAR_MISMATCH\");\r\n if (returnedUserId && returnedUserId !== userId) throw new ApiError(\"The API returned a different User ID.\", 200, \"USER_MISMATCH\");\r\n if (returnedProjectId && returnedProjectId !== projectId) throw new ApiError(\"The API returned a different Project ID.\", 200, \"PROJECT_MISMATCH\");\r\n return { userId, projectId, avatarId, avatarName: nestedStringValue(body, [\"avatar\"], \"avatarName\", \"avatar_name\", \"name\") };\r\n}\r\n\r\nexport async function createImportSession(\r\n api: ApiClient,\r\n input: { userId: string; projectId: string; apiKey: string; avatarId: string },\r\n): Promise<ImportSessionResult> {\r\n const userId = assertValid(input.userId, \"User ID\", isValidUserId);\r\n const projectId = assertValid(input.projectId, \"Project ID\", isValidProjectId);\r\n const apiKey = assertValid(input.apiKey, \"API key\", isValidApiKey);\r\n const avatarId = assertValid(input.avatarId, \"Avatar ID\", isValidAvatarId);\r\n const body = record(await api.request<unknown>(\"/import-session\", {\r\n method: \"POST\",\r\n headers: { Authorization: `Bearer ${apiKey}`, \"X-Asiyst-API-Key\": apiKey },\r\n body: JSON.stringify({ userId, projectId, apiKey, avatarId }),\r\n }));\r\n const sessionId = stringValue(body, \"sessionId\", \"session_id\", \"id\");\r\n if (!sessionId) throw new ApiError(\"The API did not return an import session.\", 200, \"MALFORMED_RESPONSE\");\r\n return { sessionId, expiresAt: stringValue(body, \"expiresAt\", \"expires_at\") };\r\n}\r\n","import { execFile } from \"node:child_process\";\r\nimport { promisify } from \"node:util\";\r\nconst execFileAsync = promisify(execFile);\r\n\r\nexport async function openBrowser(url: string): Promise<boolean> {\r\n const command = process.platform === \"win32\" ? \"rundll32.exe\" : process.platform === \"darwin\" ? \"open\" : \"xdg-open\";\r\n const args = process.platform === \"win32\" ? [\"url.dll,FileProtocolHandler\", url] : [url];\r\n try {\r\n await execFileAsync(command, args);\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n","export const PRODUCTION_API_ORIGIN = \"https://nqhxpgsjofzqudyqkqib.supabase.co/functions/v1/api\";\r\nexport const CLI_API_BASE_URL = PRODUCTION_API_ORIGIN;\r\nexport const VERIFY_KEY_PATH = \"/auth/api-key/verify\";\r\nexport const VERIFY_KEY_URL = `${CLI_API_BASE_URL}${VERIFY_KEY_PATH}`;\r\nexport const ASIYST_WEB_URL = \"https://asiyst.com\";\r\nexport const ASIIYST_WEB_URL = ASIYST_WEB_URL;\r\nexport const REQUEST_TIMEOUT_MS = 15_000;\r\n\r\nfunction readEnv(env: NodeJS.ProcessEnv, ...keys: string[]): string | undefined {\r\n for (const key of keys) {\r\n const value = env[key]?.trim();\r\n if (value) return value;\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction isLocalUrl(value: string): boolean {\r\n try {\r\n const url = new URL(value);\r\n return url.hostname === \"localhost\" || url.hostname === \"127.0.0.1\" || url.hostname === \"::1\";\r\n } catch {\r\n return /localhost|127\\.0\\.0\\.1|::1/i.test(value);\r\n }\r\n}\r\n\r\nexport function resolveApiBaseUrl(env: NodeJS.ProcessEnv = process.env): string {\r\n const explicit = readEnv(env, \"ASIYST_API_URL\", \"ASIIYST_API_URL\");\r\n const development = readEnv(env, \"ASIYST_API_MODE\", \"ASIIYST_API_MODE\") === \"development\";\r\n if (explicit) {\r\n if (isLocalUrl(explicit)) {\r\n return CLI_API_BASE_URL;\r\n }\r\n return explicit.replace(/\\/+$/, \"\");\r\n }\r\n if (development) {\r\n return CLI_API_BASE_URL;\r\n }\r\n return CLI_API_BASE_URL;\r\n}\r\n\r\nexport function isDebugEnabled(env: NodeJS.ProcessEnv = process.env): boolean {\r\n return readEnv(env, \"ASIYST_DEBUG\", \"ASIIYST_DEBUG\") === \"1\" || readEnv(env, \"ASIYST_DEBUG\", \"ASIIYST_DEBUG\") === \"true\";\r\n}\r\n","import { execFile } from \"node:child_process\";\nimport { existsSync, mkdirSync, readFileSync, unlinkSync, writeFileSync } from \"node:fs\";\nimport { homedir } from \"node:os\";\nimport { join, resolve } from \"node:path\";\nimport { promisify } from \"node:util\";\nimport type { ConnectedProject } from \"../types.js\";\n\nconst execFileAsync = promisify(execFile);\nconst SERVICE = \"Asiyst CLI\";\n\nfunction configDir(): string {\n if (process.platform === \"win32\") return join(process.env.APPDATA || join(homedir(), \"AppData\", \"Roaming\"), \"asiyst\");\n if (process.platform === \"darwin\") return join(homedir(), \"Library\", \"Application Support\", \"asiyst\");\n return join(homedir(), \".config\", \"asiyst\");\n}\n\nfunction storePath(): string {\n return join(configDir(), \"credentials.json\");\n}\n\nfunction accountFor(cwd: string): string {\n return resolve(cwd);\n}\n\nfunction readStore(): Record<string, ConnectedProject> {\n const path = storePath();\n if (!existsSync(path)) return {};\n try {\n const parsed: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return {};\n return parsed as Record<string, ConnectedProject>;\n } catch {\n return {};\n }\n}\n\nfunction writeStore(data: Record<string, ConnectedProject>): void {\n mkdirSync(configDir(), { recursive: true, mode: 0o700 });\n writeFileSync(storePath(), JSON.stringify(data, null, 2), { encoding: \"utf8\", mode: 0o600 });\n}\n\nasync function dpapiProtect(plaintext: string): Promise<string | undefined> {\n if (process.platform !== \"win32\") return undefined;\n const script = [\n \"Add-Type -AssemblyName System.Security\",\n \"$bytes = [System.Text.Encoding]::UTF8.GetBytes($env:ASIYST_DPAPI_PAYLOAD)\",\n \"$protected = [System.Security.Cryptography.ProtectedData]::Protect($bytes, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)\",\n \"[Convert]::ToBase64String($protected)\",\n ].join(\"; \");\n try {\n const { stdout } = await execFileAsync(\"powershell.exe\", [\"-NoProfile\", \"-NonInteractive\", \"-Command\", script], {\n env: { ...process.env, ASIYST_DPAPI_PAYLOAD: plaintext },\n windowsHide: true,\n });\n const value = stdout.trim();\n return value || undefined;\n } catch {\n return undefined;\n }\n}\n\nasync function dpapiUnprotect(payload: string): Promise<string | undefined> {\n if (process.platform !== \"win32\") return undefined;\n const script = [\n \"Add-Type -AssemblyName System.Security\",\n \"$protected = [Convert]::FromBase64String($env:ASIYST_DPAPI_PAYLOAD)\",\n \"$bytes = [System.Security.Cryptography.ProtectedData]::Unprotect($protected, $null, [System.Security.Cryptography.DataProtectionScope]::CurrentUser)\",\n \"[System.Text.Encoding]::UTF8.GetString($bytes)\",\n ].join(\"; \");\n try {\n const { stdout } = await execFileAsync(\"powershell.exe\", [\"-NoProfile\", \"-NonInteractive\", \"-Command\", script], {\n env: { ...process.env, ASIYST_DPAPI_PAYLOAD: payload },\n windowsHide: true,\n });\n const value = stdout.trim();\n return value || undefined;\n } catch {\n return undefined;\n }\n}\n\nfunction windowsBlobPath(): string {\n return join(configDir(), \"credentials.dpapi\");\n}\n\nexport async function saveConnection(cwd: string, connection: ConnectedProject): Promise<void> {\n const account = accountFor(cwd);\n const next = { ...readStore(), [account]: connection };\n if (process.platform === \"win32\") {\n const protectedBlob = await dpapiProtect(JSON.stringify(next));\n if (protectedBlob) {\n mkdirSync(configDir(), { recursive: true, mode: 0o700 });\n writeFileSync(windowsBlobPath(), protectedBlob, { encoding: \"utf8\", mode: 0o600 });\n if (existsSync(storePath())) unlinkSync(storePath());\n return;\n }\n }\n writeStore(next);\n}\n\nexport async function loadConnection(cwd: string): Promise<ConnectedProject | undefined> {\n const account = accountFor(cwd);\n if (process.platform === \"win32\" && existsSync(windowsBlobPath())) {\n const decrypted = await dpapiUnprotect(readFileSync(windowsBlobPath(), \"utf8\"));\n if (decrypted) {\n try {\n const parsed: unknown = JSON.parse(decrypted);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) {\n const entry = (parsed as Record<string, ConnectedProject>)[account];\n if (entry && typeof entry.apiKey === \"string\" && typeof entry.projectId === \"string\") return entry;\n }\n } catch {\n return undefined;\n }\n }\n }\n const entry = readStore()[account];\n if (entry && typeof entry.apiKey === \"string\" && typeof entry.projectId === \"string\") return entry;\n return undefined;\n}\n\nexport async function clearConnection(cwd: string): Promise<void> {\n const account = accountFor(cwd);\n if (process.platform === \"win32\" && existsSync(windowsBlobPath())) {\n const decrypted = await dpapiUnprotect(readFileSync(windowsBlobPath(), \"utf8\"));\n let next: Record<string, ConnectedProject> = {};\n if (decrypted) {\n try {\n const parsed: unknown = JSON.parse(decrypted);\n if (parsed && typeof parsed === \"object\" && !Array.isArray(parsed)) next = { ...(parsed as Record<string, ConnectedProject>) };\n } catch {\n next = {};\n }\n }\n delete next[account];\n if (Object.keys(next).length === 0) {\n unlinkSync(windowsBlobPath());\n return;\n }\n const protectedBlob = await dpapiProtect(JSON.stringify(next));\n if (protectedBlob) {\n writeFileSync(windowsBlobPath(), protectedBlob, { encoding: \"utf8\", mode: 0o600 });\n return;\n }\n }\n const next = readStore();\n delete next[account];\n if (Object.keys(next).length === 0 && existsSync(storePath())) unlinkSync(storePath());\n else writeStore(next);\n}\n\nexport { SERVICE };\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { join, resolve } from \"node:path\";\nimport type { ConnectedProject, ProjectMetadata } from \"../types.js\";\n\nexport const PROJECT_CONFIG_DIR = \".asiyst\";\nexport const PROJECT_CONFIG_FILE = \"config.json\";\n\nexport function projectConfigPath(cwd: string): string {\n return join(resolve(cwd), PROJECT_CONFIG_DIR, PROJECT_CONFIG_FILE);\n}\n\nexport function readProjectMetadata(cwd: string): ProjectMetadata | undefined {\n const path = projectConfigPath(cwd);\n if (!existsSync(path)) return undefined;\n try {\n const parsed: unknown = JSON.parse(readFileSync(path, \"utf8\"));\n if (!parsed || typeof parsed !== \"object\" || Array.isArray(parsed)) return undefined;\n const body = parsed as Record<string, unknown>;\n if (typeof body.apiKey === \"string\") delete body.apiKey;\n return {\n projectId: typeof body.projectId === \"string\" ? body.projectId : undefined,\n projectName: typeof body.projectName === \"string\" ? body.projectName : undefined,\n website: typeof body.website === \"string\" ? body.website : undefined,\n publicKey: typeof body.publicKey === \"string\" ? body.publicKey : undefined,\n userId: typeof body.userId === \"string\" ? body.userId : undefined,\n avatarId: typeof body.avatarId === \"string\" ? body.avatarId : undefined,\n avatarName: typeof body.avatarName === \"string\" ? body.avatarName : undefined,\n connected: body.connected === true,\n };\n } catch {\n return undefined;\n }\n}\n\nexport function writeProjectMetadata(cwd: string, connection: ConnectedProject): void {\n const dir = join(resolve(cwd), PROJECT_CONFIG_DIR);\n mkdirSync(dir, { recursive: true });\n const existing = readProjectMetadata(cwd) ?? {};\n const next: ProjectMetadata = {\n ...existing,\n projectId: connection.projectId,\n projectName: connection.projectName,\n website: connection.website,\n publicKey: connection.publicKey,\n userId: connection.userId,\n avatarId: connection.avatarId,\n avatarName: connection.avatarName,\n connected: true,\n };\n writeFileSync(projectConfigPath(cwd), `${JSON.stringify(next, null, 2)}\\n`, { encoding: \"utf8\" });\n}\n\nexport function clearProjectMetadata(cwd: string): void {\n const path = projectConfigPath(cwd);\n if (!existsSync(path)) return;\n const existing = readProjectMetadata(cwd) ?? {};\n const next: ProjectMetadata = {\n ...existing,\n connected: false,\n };\n writeFileSync(path, `${JSON.stringify(next, null, 2)}\\n`, { encoding: \"utf8\" });\n}\n","import { existsSync, readFileSync } from \"node:fs\";\r\nimport { resolve } from \"node:path\";\r\nimport type { ProjectDetection } from \"../types.js\";\r\n\r\nfunction dependencyVersion(pkg: Record<string, unknown>): string | undefined {\r\n const sections = [\"dependencies\", \"devDependencies\", \"peerDependencies\", \"optionalDependencies\"];\r\n for (const section of sections) {\r\n const values = pkg[section];\r\n if (values && typeof values === \"object\" && \"@asiyst/sdk\" in values) {\r\n const version = (values as Record<string, unknown>)[\"@asiyst/sdk\"];\r\n return typeof version === \"string\" ? version : undefined;\r\n }\r\n }\r\n return undefined;\r\n}\r\n\r\nfunction hasDependency(deps: Record<string, unknown>, name: string): boolean {\r\n return typeof deps[name] === \"string\";\r\n}\r\n\r\nexport function detectFramework(cwd: string, pkg: Record<string, unknown> | null): string {\r\n const deps: Record<string, unknown> = Object.assign({}, pkg?.dependencies, pkg?.devDependencies);\r\n if (hasDependency(deps, \"next\") || existsSync(resolve(cwd, \"next.config.js\")) || existsSync(resolve(cwd, \"next.config.mjs\")) || existsSync(resolve(cwd, \"next.config.ts\"))) {\r\n return \"Next.js\";\r\n }\r\n if (hasDependency(deps, \"nuxt\")) return \"Nuxt\";\r\n if (hasDependency(deps, \"vue\") || existsSync(resolve(cwd, \"vue.config.js\"))) return \"Vue\";\r\n if (hasDependency(deps, \"react\")) return \"React\";\r\n if (hasDependency(deps, \"vite\") || existsSync(resolve(cwd, \"vite.config.ts\")) || existsSync(resolve(cwd, \"vite.config.js\")) || existsSync(resolve(cwd, \"vite.config.mjs\"))) {\r\n return \"Vite\";\r\n }\r\n if (pkg) return existsSync(resolve(cwd, \"tsconfig.json\")) ? \"Vanilla TypeScript\" : \"Vanilla JavaScript\";\r\n return \"Unknown\";\r\n}\r\n\r\nexport function detectProject(cwd = process.cwd()): ProjectDetection {\r\n const path = resolve(cwd, \"package.json\");\r\n let packageJson: Record<string, unknown> | null = null;\r\n if (existsSync(path)) {\r\n try {\r\n const value: unknown = JSON.parse(readFileSync(path, \"utf8\"));\r\n if (value && typeof value === \"object\" && !Array.isArray(value)) packageJson = value as Record<string, unknown>;\r\n } catch {\r\n packageJson = null;\r\n }\r\n }\r\n const env = process.env as Record<string, string | undefined>;\r\n const packageManager = existsSync(resolve(cwd, \"pnpm-lock.yaml\")) ? \"pnpm\" :\r\n existsSync(resolve(cwd, \"yarn.lock\")) ? \"yarn\" :\r\n existsSync(resolve(cwd, \"bun.lockb\")) || existsSync(resolve(cwd, \"bun.lock\")) ? \"bun\" : \"npm\";\r\n const sourceFiles = [\"tsconfig.json\", \"src\", \"app\"].some((entry) => existsSync(resolve(cwd, entry)));\r\n return {\r\n cwd,\r\n packageJson,\r\n sdkVersion: packageJson ? dependencyVersion(packageJson) : undefined,\r\n framework: detectFramework(cwd, packageJson),\r\n language: sourceFiles ? \"TypeScript\" : \"JavaScript\",\r\n packageManager,\r\n config: {\r\n projectId: env.ASIIYST_PROJECT_ID,\r\n publicKey: env.ASIIYST_PUBLIC_KEY,\r\n },\r\n };\r\n}\r\n","import { stdout } from \"node:process\";\r\n\r\nconst supportsColor = Boolean(stdout.isTTY && !process.env.NO_COLOR && process.env.TERM !== \"dumb\");\r\n\r\nconst codes = {\r\n reset: \"\\x1b[0m\",\r\n bold: \"\\x1b[1m\",\r\n dim: \"\\x1b[2m\",\r\n cyan: \"\\x1b[36m\",\r\n green: \"\\x1b[32m\",\r\n yellow: \"\\x1b[33m\",\r\n red: \"\\x1b[31m\",\r\n};\r\n\r\nfunction color(code: keyof typeof codes, value: string): string {\r\n return supportsColor ? `${codes[code]}${value}${codes.reset}` : value;\r\n}\r\n\r\nexport const symbols = {\r\n connected: \"●\",\r\n disconnected: \"○\",\r\n warning: \"⚠\",\r\n error: \"✕\",\r\n success: \"✓\",\r\n pointer: \"›\",\r\n};\r\n\r\nexport function title(value: string): string {\r\n return color(\"bold\", value);\r\n}\r\n\r\nexport function section(value: string): string {\r\n return color(\"cyan\", value);\r\n}\r\n\r\nexport function muted(value: string): string {\r\n return color(\"dim\", value);\r\n}\r\n\r\nexport function success(value: string): string {\r\n return color(\"green\", value);\r\n}\r\n\r\nexport function warning(value: string): string {\r\n return color(\"yellow\", value);\r\n}\r\n\r\nexport function error(value: string): string {\r\n return color(\"red\", value);\r\n}\r\n\r\nexport function maskSecret(value: string, visible = 0): string {\r\n if (visible <= 0) return \"••••••••\";\r\n return `${value.slice(0, visible)}••••••••`;\r\n}\r\n\r\nexport function printHeader(value: string, subtitle?: string): void {\r\n console.log(`\\n${title(value)}`);\r\n if (subtitle) console.log(muted(subtitle));\r\n console.log();\r\n}\r\n\r\nexport function printStatus(connected: boolean): void {\r\n const marker = connected ? success(symbols.connected) : muted(symbols.disconnected);\r\n const label = connected ? \"Connected\" : \"Not connected\";\r\n console.log(`Status: ${marker} ${label}`);\r\n}\r\n\r\nexport function printKeyValue(label: string, value: string): void {\r\n console.log(`${label}: ${value}`);\r\n}\r\n","import type { ProjectDetection } from \"../types.js\";\nimport { muted, section, success, symbols, title, warning } from \"./format.js\";\n\nexport const ok = (label: string, detail = \"\") => console.log(`${success(symbols.success)} ${label}${detail ? ` (${detail})` : \"\"}`);\nexport const fail = (label: string, detail = \"\") => console.log(`${symbols.error} ${label}${detail ? `: ${detail}` : \"\"}`);\n\nexport function projectChecks(project: ProjectDetection): void {\n project.packageJson\n ? ok(\"Project detected\", typeof project.packageJson.name === \"string\" ? project.packageJson.name : project.cwd)\n : fail(\"Project not detected\", \"package.json is missing\");\n if (project.framework === \"Unknown\") fail(\"Framework detected\", \"No supported project type was identified.\");\n else ok(\"Framework detected\", project.framework);\n ok(\"Language detected\", project.language);\n ok(\"Node.js detected\", process.version);\n ok(\"Package manager detected\", project.packageManager);\n project.sdkVersion\n ? ok(\"@asiyst/sdk detected\", project.sdkVersion)\n : console.log(`${muted(symbols.disconnected)} @asiyst/sdk not installed. Install it with your package manager.`);\n}\n\nexport function printProjectSummary(project: ProjectDetection, connected: boolean, projectName?: string, website?: string): void {\n console.log(title(\"Asiyst CLI\"));\n console.log();\n console.log(section(\"Project\"));\n console.log(` ${projectName || (typeof project.packageJson?.name === \"string\" ? project.packageJson.name : project.cwd)}`);\n if (website) console.log(` ${muted(website)}`);\n const marker = connected ? success(symbols.connected) : muted(symbols.disconnected);\n console.log(` ${marker} ${connected ? \"Connected\" : \"Not connected\"}`);\n console.log();\n console.log(section(\"Environment\"));\n console.log(` ${project.framework} · ${project.language} · ${project.packageManager}`);\n}\n\nexport function homeStatus(project?: ProjectDetection, connected = false): void {\n if (!project) {\n console.log(`\\n${title(\"Asiyst CLI\")}\\n`);\n return;\n }\n printProjectSummary(project, connected);\n console.log();\n console.log(connected\n ? \"Manage your connected project.\"\n : `${warning(symbols.warning)} Connect your project to Asiyst to view stats.`);\n console.log();\n}\n","import { stdin, stdout } from \"node:process\";\r\nimport { clearLine, cursorTo, emitKeypressEvents, moveCursor } from \"node:readline\";\r\n\r\nexport interface SelectorOption<T> {\r\n label: string;\r\n value: T;\r\n disabled?: boolean;\r\n}\r\n\r\nexport type SelectorResult<T> = { type: \"selected\"; value: T } | { type: \"cancelled\" | \"exit\" };\r\n\r\nconst HIDE_CURSOR = \"\\x1B[?25l\";\r\nconst SHOW_CURSOR = \"\\x1B[?25h\";\r\n\r\nexport function moveSelection(active: number, optionCount: number, direction: \"up\" | \"down\"): number {\r\n if (optionCount === 0) return 0;\r\n return direction === \"up\"\r\n ? Math.max(0, active - 1)\r\n : Math.min(optionCount - 1, active + 1);\r\n}\r\n\r\nexport function clearSelectorFrame(output: NodeJS.WriteStream, previousLineCount: number): void {\r\n if (previousLineCount <= 0) return;\r\n cursorTo(output, 0);\r\n for (let i = 0; i < previousLineCount - 1; i += 1) {\r\n moveCursor(output, 0, -1);\r\n }\r\n for (let line = 0; line < previousLineCount; line += 1) {\r\n cursorTo(output, 0);\r\n clearLine(output, 0);\r\n if (line < previousLineCount - 1) {\r\n moveCursor(output, 0, 1);\r\n }\r\n }\r\n cursorTo(output, 0);\r\n for (let i = 0; i < previousLineCount - 1; i += 1) {\r\n moveCursor(output, 0, -1);\r\n }\r\n}\r\n\r\nexport function renderSelectorFrame(output: NodeJS.WriteStream, previousLineCount: number, lines: string[]): number {\r\n if (lines.length === 0) return 0;\r\n if (previousLineCount > 0) {\r\n cursorTo(output, 0);\r\n for (let i = 0; i < previousLineCount - 1; i += 1) {\r\n moveCursor(output, 0, -1);\r\n }\r\n }\r\n for (let i = 0; i < lines.length; i += 1) {\r\n cursorTo(output, 0);\r\n clearLine(output, 0);\r\n output.write(lines[i]);\r\n if (i < lines.length - 1) {\r\n output.write(\"\\n\");\r\n }\r\n }\r\n return lines.length;\r\n}\r\n\r\nfunction restoreTerminal(wasRaw: boolean): void {\r\n stdout.write(SHOW_CURSOR);\r\n if (stdin.isTTY) stdin.setRawMode?.(wasRaw);\r\n}\r\n\r\nexport function selectOption<T>(title: string, options: SelectorOption<T>[]): Promise<SelectorResult<T>> {\r\n if (!stdin.isTTY || !stdout.isTTY) return Promise.resolve({ type: \"cancelled\" });\r\n return new Promise((resolve) => {\r\n let active = 0;\r\n let renderedLines = 0;\r\n let settled = false;\r\n const wasRaw = Boolean(stdin.isRaw);\r\n const enabled = options.filter((option) => !option.disabled);\r\n\r\n const finish = (result: SelectorResult<T>, confirmation?: string) => {\r\n if (settled) return;\r\n settled = true;\r\n stdin.off(\"keypress\", onKeypress);\r\n clearSelectorFrame(stdout, renderedLines);\r\n restoreTerminal(wasRaw);\r\n stdin.pause();\r\n if (confirmation) stdout.write(`${confirmation}\\n`);\r\n resolve(result);\r\n };\r\n\r\n const render = () => {\r\n const lines = [title, \"\", ...enabled.map((option, index) => `${index === active ? \"❯\" : \" \"} ${option.label}`)];\r\n renderedLines = renderSelectorFrame(stdout, renderedLines, lines);\r\n };\r\n\r\n const onKeypress = (_value: string, key: { name?: string; ctrl?: boolean; sequence?: string } | undefined) => {\r\n if (!key) return;\r\n if (key.ctrl && key.name === \"c\") {\r\n clearSelectorFrame(stdout, renderedLines);\r\n restoreTerminal(wasRaw);\r\n stdin.pause();\r\n stdout.write(\"\\n\");\r\n process.exit(130);\r\n }\r\n if (key.name === \"escape\") return finish({ type: \"cancelled\" });\r\n if (key.name === \"up\" || key.name === \"down\") {\r\n active = moveSelection(active, enabled.length, key.name);\r\n return render();\r\n }\r\n if (key.name === \"return\" || key.name === \"enter\") {\r\n const selected = enabled[active];\r\n if (!selected) return finish({ type: \"cancelled\" });\r\n return finish({ type: \"selected\", value: selected.value }, `✓ ${selected.label} selected.`);\r\n }\r\n };\r\n\r\n emitKeypressEvents(stdin);\r\n stdin.setRawMode?.(true);\r\n stdin.resume();\r\n stdout.write(HIDE_CURSOR);\r\n stdin.on(\"keypress\", onKeypress);\r\n render();\r\n });\r\n}\r\n","import { stdin, stdout } from \"node:process\";\nimport { emitKeypressEvents } from \"node:readline\";\n\nexport async function readSecret(prompt: string): Promise<string | undefined> {\n if (!stdin.isTTY) return undefined;\n return new Promise((resolve) => {\n let value = \"\";\n let settled = false;\n const wasRaw = Boolean(stdin.isRaw);\n stdout.write(prompt);\n\n const finish = (result: string | undefined) => {\n if (settled) return;\n settled = true;\n stdin.off(\"keypress\", onKeypress);\n if (stdin.isTTY) stdin.setRawMode?.(wasRaw);\n stdin.pause();\n stdout.write(\"\\n\");\n resolve(result);\n };\n\n const onKeypress = (chunk: string, key: { name?: string; ctrl?: boolean; sequence?: string } | undefined) => {\n if (!key) return;\n if (key.ctrl && key.name === \"c\") {\n finish(undefined);\n process.exit(130);\n }\n\n if (key.name === \"escape\") return finish(undefined);\n if (key.name === \"return\" || key.name === \"enter\") return finish(value.trim());\n if (key.name === \"backspace\") {\n value = value.slice(0, -1);\n return;\n }\n const sequence = key.sequence || chunk;\n if (sequence && /^[\\x20-\\x7e]+$/.test(sequence)) value += sequence;\n };\n\n emitKeypressEvents(stdin);\n stdin.setRawMode?.(true);\n stdin.resume();\n stdin.on(\"keypress\", onKeypress);\n });\n}\n\nexport async function readInput(prompt: string): Promise<string | undefined> {\n if (!stdin.isTTY) return undefined;\n return new Promise((resolve) => {\n let value = \"\";\n const onData = (chunk: Buffer | string) => {\n value += String(chunk);\n const newline = value.search(/[\\r\\n]/);\n if (newline >= 0) {\n stdin.off(\"data\", onData);\n resolve(value.slice(0, newline).trim());\n }\n };\n stdout.write(prompt);\n stdin.resume();\n stdin.on(\"data\", onData);\n });\n}\n","import { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\r\nimport { homedir } from \"node:os\";\r\nimport { join, resolve } from \"node:path\";\r\n\r\nconst trustFile = join(homedir(), \".config\", \"asiyst\", \"trusted-folders.json\");\r\n\r\nfunction readTrusted(): string[] {\r\n if (!existsSync(trustFile)) return [];\r\n try {\r\n const parsed: unknown = JSON.parse(readFileSync(trustFile, \"utf8\"));\r\n return Array.isArray(parsed) && parsed.every((item) => typeof item === \"string\") ? parsed : [];\r\n } catch {\r\n return [];\r\n }\r\n}\r\n\r\nexport function isTrusted(cwd: string): boolean {\r\n return readTrusted().includes(resolve(cwd));\r\n}\r\n\r\nexport function trustFolder(cwd: string): void {\r\n const folder = resolve(cwd);\r\n const trusted = readTrusted();\r\n if (!trusted.includes(folder)) trusted.push(folder);\r\n mkdirSync(join(homedir(), \".config\", \"asiyst\"), { recursive: true, mode: 0o700 });\r\n writeFileSync(trustFile, JSON.stringify(trusted, null, 2), { encoding: \"utf8\", mode: 0o600 });\r\n}\r\n\r\nexport function revokeTrust(cwd: string): void {\r\n const folder = resolve(cwd);\r\n const trusted = readTrusted().filter((item) => item !== folder);\r\n if (existsSync(trustFile)) writeFileSync(trustFile, JSON.stringify(trusted, null, 2), { encoding: \"utf8\", mode: 0o600 });\r\n}\r\n","import { CLI_API_BASE_URL, REQUEST_TIMEOUT_MS, isDebugEnabled, resolveApiBaseUrl } from \"../config/api.js\";\r\nimport { ApiError, errorCodeFromStatus } from \"./errors.js\";\r\n\r\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\r\n return value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\r\n}\r\n\r\nfunction bodyErrorCode(body: unknown): string | undefined {\r\n const record = asRecord(body);\r\n const code = record?.code ?? record?.errorCode ?? record?.error ?? asRecord(record?.error)?.code;\r\n return typeof code === \"string\" ? code : undefined;\r\n}\r\n\r\nfunction bodyErrorMessage(body: unknown): string | undefined {\r\n const record = asRecord(body);\r\n const message = record?.message ?? asRecord(record?.error)?.message;\r\n return typeof message === \"string\" && message.trim() ? message.trim() : undefined;\r\n}\r\n\r\nfunction isAbortError(error: unknown): boolean {\r\n return (error instanceof DOMException && error.name === \"AbortError\")\r\n || (error instanceof Error && error.name === \"AbortError\");\r\n}\r\n\r\nexport class ApiClient {\r\n readonly baseUrl: string;\r\n\r\n constructor(baseUrl = resolveApiBaseUrl(), private readonly fetcher: typeof fetch = fetch) {\r\n this.baseUrl = baseUrl.replace(/\\/+$/, \"\");\r\n }\r\n\r\n async request<T>(path: string, init?: RequestInit): Promise<T> {\r\n const url = `${this.baseUrl}${path}`;\r\n const controller = new AbortController();\r\n const timeout = setTimeout(() => controller.abort(), REQUEST_TIMEOUT_MS);\r\n const headers = new Headers(init?.headers);\r\n headers.set(\"Accept\", \"application/json\");\r\n if (!headers.has(\"Content-Type\")) headers.set(\"Content-Type\", \"application/json\");\r\n let response: Response;\r\n try {\r\n response = await this.fetcher(url, {\r\n ...init,\r\n headers,\r\n signal: init?.signal || controller.signal,\r\n });\r\n } catch (error) {\r\n if (isAbortError(error)) {\r\n throw new ApiError(\"Connection to Asiyst timed out.\", undefined, \"TIMEOUT\");\r\n }\r\n throw new ApiError(\"Unable to reach Asiyst API.\", undefined, \"NETWORK\");\r\n } finally {\r\n clearTimeout(timeout);\r\n }\r\n\r\n const rawText = await response.text();\r\n let body: unknown;\r\n if (rawText) {\r\n try {\r\n body = JSON.parse(rawText) as unknown;\r\n } catch {\r\n body = undefined;\r\n }\r\n }\r\n\r\n if (!response.ok) {\r\n const code = errorCodeFromStatus(response.status, bodyErrorCode(body));\r\n if (code === \"API_KEY_REVOKED\" || bodyErrorCode(body) === \"API_KEY_REVOKED\") {\r\n throw new ApiError(\"This API key has been revoked.\", response.status, \"API_KEY_REVOKED\");\r\n }\r\n throw new ApiError(bodyErrorMessage(body) ?? `Asiyst API returned HTTP ${response.status}.`, response.status, code);\r\n }\r\n\r\n if (rawText && body === undefined) {\r\n if (isDebugEnabled()) {\r\n throw new ApiError(\"Asiyst API returned an invalid JSON response.\", response.status, \"MALFORMED_RESPONSE\");\r\n }\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", response.status, \"MALFORMED_RESPONSE\");\r\n }\r\n\r\n return (body === undefined ? {} : body) as T;\r\n }\r\n\r\n async health(): Promise<{ status?: string }> {\r\n try {\r\n const body = await this.request<unknown>(\"/health\");\r\n const record = asRecord(body);\r\n if (record) return record as { status?: string };\r\n } catch {\r\n // The current production API contract exposes the health endpoint at the root of the API base URL.\r\n }\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\r\n }\r\n}\r\n\r\nexport { ApiError, CLI_API_BASE_URL };\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { selectOption } from \"../ui/selector.js\";\r\n\r\nexport async function confirm(question: string): Promise<boolean> {\r\n if (!process.stdin.isTTY || !process.stdout.isTTY) return false;\r\n const result = await selectOption(question, [\r\n { label: \"Yes\", value: true },\r\n { label: \"No\", value: false },\r\n ]);\r\n return result.type === \"selected\" && result.value;\r\n}\r\n\r\nexport function createApiClient(): ApiClient {\r\n return new ApiClient();\r\n}\r\n","import { isTrusted, revokeTrust, trustFolder } from \"../config/trust.js\";\r\nimport { confirm } from \"./shared.js\";\r\nimport { printHeader } from \"../ui/format.js\";\r\nexport async function ensureTrusted(cwd = process.cwd()): Promise<boolean> {\r\n if (isTrusted(cwd)) return true;\r\n if (!(await confirm(`Trust this project folder?\\n\\n${cwd}\\n\\nAsiyst may read project files and modify Asiyst configuration during setup.`))) {\r\n console.log(\"Folder not trusted.\\nExiting...\");\r\n return false;\r\n }\r\n trustFolder(cwd);\r\n console.log(\"✓ Folder trusted.\");\r\n return true;\r\n}\r\nexport async function trustCommand(cwd = process.cwd()): Promise<void> {\r\n printHeader(\"Project Trust\", cwd);\r\n await ensureTrusted(cwd);\r\n}\r\nexport function revokeTrustCommand(cwd = process.cwd()): void { revokeTrust(cwd); console.log(\"✓ Project trust revoked.\"); }\r\n","import { ApiClient } from \"../api/client.js\";\nimport { verifyApiKeyRelationship, verifyProject, verifyUser } from \"../api/verification.js\";\nimport { ApiError, friendlyApiMessage } from \"../api/errors.js\";\nimport { openBrowser } from \"../browser/open.js\";\nimport { ASIIYST_WEB_URL, VERIFY_KEY_URL, isDebugEnabled } from \"../config/api.js\";\nimport { isValidApiKey, isValidProjectId, isValidUserId, parseProjectIdArgument } from \"../config/ids.js\";\nimport { saveConnection } from \"../config/credentials.js\";\nimport { writeProjectMetadata } from \"../config/project.js\";\nimport { detectProject } from \"../detection/project.js\";\nimport { fail, ok, projectChecks } from \"../ui/output.js\";\nimport { selectOption } from \"../ui/selector.js\";\nimport { readInput, readSecret } from \"../ui/secret.js\";\nimport { printHeader } from \"../ui/format.js\";\nimport { ensureTrusted } from \"./trust.js\";\nimport { createApiClient } from \"./shared.js\";\n\nasync function retryOrCancel(message: string): Promise<boolean> {\n console.log(message);\n const result = await selectOption(\"Options:\", [\n { label: \"Retry\", value: true },\n { label: \"Cancel\", value: false },\n ]);\n return result.type === \"selected\" && result.value;\n}\n\nfunction printApiFailure(error: unknown): string {\n if (error instanceof ApiError) {\n if (error.status !== undefined && error.status < 500 && error.code !== \"INVALID_API_KEY\" && error.code !== \"API_KEY_REVOKED\") {\n return `✗ ${error.message}`;\n }\n return friendlyApiMessage(error, error.code === \"NOT_FOUND\" ? VERIFY_KEY_URL : undefined);\n }\n if (isDebugEnabled() && error instanceof Error) return `✗ ${error.message}`;\n return \"✗ Unable to reach Asiyst API.\";\n}\n\nasync function promptForProjectId(): Promise<string | undefined> {\n const value = await readInput(\"Enter your Project ID: \");\n if (value === undefined) {\n console.log(\"Connection cancelled.\");\n return undefined;\n }\n\n const trimmed = value.trim();\n if (!trimmed) {\n console.log(\"Project ID is required. Use: asiyst connect --project-id <PROJECT_ID>\");\n return undefined;\n }\n\n return trimmed;\n}\n\nasync function promptForUserId(): Promise<string | undefined> {\n const value = await readInput(\"Enter your Asiyst User ID: \");\n if (value === undefined) {\n console.log(\"Connection cancelled.\");\n return undefined;\n }\n if (!isValidUserId(value)) {\n console.log(\"Invalid Asiyst User ID.\");\n console.log(\"Expected: exactly 16 characters using letters, numbers, and hyphens only.\");\n return undefined;\n }\n return value.trim();\n}\n\nexport async function connectCommand(cwd = process.cwd(), api = createApiClient(), cliProjectId?: string): Promise<void> {\n printHeader(\"Connect project\", cwd);\n if (!(await ensureTrusted(cwd))) return;\n\n const project = detectProject(cwd);\n projectChecks(project);\n if (project.framework === \"Unknown\") {\n console.log(\"No supported framework was detected in this folder.\");\n }\n\n const shouldConnect = await selectOption(\"Connect this project to Asiyst?\", [\n { label: \"Yes\", value: true },\n { label: \"No\", value: false },\n ]);\n if (shouldConnect.type !== \"selected\" || !shouldConnect.value) {\n console.log(\"Connection cancelled.\");\n return;\n }\n\n console.log(\"Opening Asiyst...\");\n if (!(await openBrowser(ASIIYST_WEB_URL))) {\n console.log(`Open this URL manually:\\n${ASIIYST_WEB_URL}`);\n }\n console.log(\"Register or log in, complete onboarding, create or select a project, then create an API key.\");\n\n const userId = await promptForUserId();\n if (!userId) return;\n\n try {\n await verifyUser(api, userId);\n ok(\"User verified.\");\n } catch (error) {\n console.log(printApiFailure(error));\n return;\n }\n\n const projectIdArg = cliProjectId ?? parseProjectIdArgument(process.argv.slice(2));\n if (projectIdArg === \"\") {\n console.log(\"Project ID is required. Use: asiyst connect --project-id <PROJECT_ID>\");\n return;\n }\n let projectId = typeof projectIdArg === \"string\" ? projectIdArg.trim() : \"\";\n if (!projectId) projectId = (await promptForProjectId()) || \"\";\n if (!projectId) {\n console.log(\"Project ID is required. Use: asiyst connect --project-id <PROJECT_ID>\");\n return;\n }\n if (!isValidProjectId(projectId)) {\n console.log(\"Invalid Project ID. It must be exactly 24 characters.\");\n return;\n }\n\n let verifiedProject;\n try {\n verifiedProject = await verifyProject(api, userId, projectId);\n ok(\"Project verified.\");\n } catch (error) {\n console.log(printApiFailure(error));\n return;\n }\n\n for (;;) {\n const apiKey = await readSecret(\"Paste your Asiyst API key: \");\n if (apiKey === undefined) {\n console.log(\"Connection cancelled.\");\n return;\n }\n if (!isValidApiKey(apiKey)) {\n fail(\"Invalid API key. It must be exactly 32 characters.\");\n continue;\n }\n try {\n const connected = await verifyApiKeyRelationship(api, { userId, projectId, apiKey });\n const finalConnection = {\n ...connected,\n projectName: connected.projectName ?? verifiedProject.projectName,\n website: connected.website ?? verifiedProject.website,\n publicKey: connected.publicKey ?? verifiedProject.publicKey,\n projectId,\n userId,\n };\n ok(\"API key verified.\");\n await saveConnection(cwd, finalConnection);\n writeProjectMetadata(cwd, finalConnection);\n ok(\"Project connected successfully.\");\n console.log(`\\nProject ID:\\n${projectId}`);\n if (connected.projectName) console.log(`\\nProject:\\n${connected.projectName}`);\n if (connected.website) console.log(`\\nWebsite:\\n${connected.website}`);\n return;\n } catch (error) {\n const message = printApiFailure(error);\n const code = error instanceof ApiError ? error.code : \"NETWORK\";\n if (code === \"INVALID_API_KEY\") {\n console.log(message);\n continue;\n }\n if (code === \"API_KEY_REVOKED\" || code === \"FORBIDDEN\" || code === \"NOT_FOUND\" || code === \"MALFORMED_RESPONSE\") {\n console.log(message);\n return;\n }\n if (!(await retryOrCancel(message))) {\n console.log(\"Connection cancelled.\");\n return;\n }\n }\n }\n}\n\nexport async function initCommand(cwd = process.cwd(), api: ApiClient = createApiClient(), cliProjectId?: string): Promise<void> {\n return connectCommand(cwd, api, cliProjectId);\n}\n","import { connectCommand } from \"./connect.js\";\r\nimport { createApiClient } from \"./shared.js\";\r\n\r\nexport async function loginCommand(): Promise<void> {\r\n await connectCommand(process.cwd(), createApiClient());\r\n}\r\n","import { clearConnection } from \"../config/credentials.js\";\nimport { clearProjectMetadata } from \"../config/project.js\";\nimport { confirm } from \"./shared.js\";\n\nexport async function disconnectCommand(cwd = process.cwd()): Promise<void> {\n if (!(await confirm(\"Disconnect this project?\"))) {\n console.log(\"Disconnect cancelled.\");\n return;\n }\n await clearConnection(cwd);\n clearProjectMetadata(cwd);\n console.log(\"✓ Local connection information removed.\");\n console.log(\"The cloud project and API key were not changed.\");\n}\n","import { disconnectCommand } from \"./disconnect.js\";\r\n\r\nexport async function logoutCommand(): Promise<void> {\r\n await disconnectCommand();\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { verifyApiKeyRelationship, verifyAvatar } from \"../api/verification.js\";\r\nimport { ApiError } from \"../api/errors.js\";\r\nimport { loadConnection } from \"../config/credentials.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { maskSecret, printHeader, section, success, symbols, warning } from \"../ui/format.js\";\r\nimport { printProjectSummary } from \"../ui/output.js\";\r\nimport { createApiClient } from \"./shared.js\";\r\n\r\nexport async function statusCommand(cwd = process.cwd(), api: ApiClient = createApiClient()): Promise<void> {\r\n const stored = await loadConnection(cwd);\r\n if (!stored?.apiKey) {\r\n printHeader(\"Asiyst Project Status\");\r\n printProjectSummary(detectProject(cwd), false);\r\n console.log(`\\n${warning(symbols.warning)} Not connected to Asiyst.`);\r\n return;\r\n }\r\n if (!stored.userId || !stored.projectId) {\r\n console.log(`${symbols.error} Connection is missing a User ID or Project ID. Please run:\\nasiyst connect`);\r\n return;\r\n }\r\n\r\n try {\r\n const connected = await verifyApiKeyRelationship(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n });\r\n if (stored.avatarId) {\r\n await verifyAvatar(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n avatarId: stored.avatarId,\r\n });\r\n }\r\n const projectId = stored.projectId || connected.projectId;\r\n const userId = stored.userId || connected.userId;\r\n printHeader(\"Asiyst Project Status\");\r\n printProjectSummary(detectProject(cwd), true, connected.projectName, connected.website);\r\n console.log(`\\n${section(\"Identifiers\")}`);\r\n if (userId) console.log(` User ID: ${maskSecret(userId)}`);\r\n console.log(` Project ID: ${projectId}`);\r\n console.log(` API Key: ${maskSecret(stored.apiKey)}`);\r\n console.log(`\\n${section(\"Integration\")}`);\r\n console.log(` User: ${success(symbols.success)} Connected`);\r\n console.log(` Project: ${success(symbols.success)} ${connected.projectName ?? projectId}`);\r\n if (stored.avatarId) console.log(` Avatar: ${success(symbols.success)} ${stored.avatarName ?? stored.avatarId}`);\r\n else console.log(` Avatar: ${symbols.error} Not imported`);\r\n const detection = detectProject(cwd);\r\n console.log(` SDK: ${detection.sdkVersion ? `${success(symbols.success)} Installed (${detection.sdkVersion})` : `${symbols.error} Not installed`}`);\r\n console.log(` Integration: ${detection.sdkVersion && stored.avatarId ? `${success(symbols.success)} Configured` : `${symbols.error} Not configured`}`);\r\n console.log(`\\n${success(symbols.success)} Everything looks good.`);\r\n } catch (error) {\r\n if (error instanceof ApiError && error.code === \"API_KEY_REVOKED\") {\r\n console.log(\"✗ API key revoked.\");\r\n console.log(\"Create a new key from:\\nhttps://asiyst.com\");\r\n return;\r\n }\r\n if (error instanceof ApiError && (error.code === \"INVALID_API_KEY\" || error.code === \"FORBIDDEN\")) {\r\n console.log(`${symbols.error} Connection invalid. Run \\`asiyst connect\\` to reconnect.`);\r\n return;\r\n }\r\n console.log(`${symbols.error} Connection invalid. Run \\`asiyst doctor\\` for diagnostics.`);\r\n }\r\n}\r\n","import type { ConnectedProject, SafeProjectInfo, VerificationResult } from \"../types.js\";\r\nimport { isValidApiKey, isValidAvatarId, isValidProjectId, isValidUserId } from \"../config/ids.js\";\r\nimport { ApiClient } from \"./client.js\";\r\nimport { ApiError } from \"./errors.js\";\r\n\r\nexport async function fetchProjectInfo(api: ApiClient, projectId: string): Promise<SafeProjectInfo> {\r\n const value = await api.request<unknown>(`/cli/projects/${encodeURIComponent(projectId)}`);\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\r\n }\r\n return value as SafeProjectInfo;\r\n}\r\n\r\nexport async function verifyInstallation(\r\n api: ApiClient,\r\n projectId: string,\r\n publicKey: string,\r\n domain?: string,\r\n): Promise<VerificationResult[]> {\r\n const value = await api.request<unknown>(\"/cli/verification\", {\r\n method: \"POST\",\r\n body: JSON.stringify({ projectId, publicKey, domain }),\r\n });\r\n if (!Array.isArray(value) || !value.every((item) => item && typeof item === \"object\" && typeof (item as Record<string, unknown>).name === \"string\" && typeof (item as Record<string, unknown>).ok === \"boolean\")) {\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\r\n }\r\n return value as VerificationResult[];\r\n}\r\n\r\nexport interface AvatarImportResult {\r\n imported: boolean;\r\n avatarId: string;\r\n projectId: string;\r\n userId: string;\r\n avatarName?: string;\r\n publicKey?: string;\r\n alreadyImported?: boolean;\r\n}\r\n\r\nfunction requireIdentifier(value: string, name: string, valid: (candidate: unknown) => boolean): string {\r\n const trimmed = value.trim();\r\n if (!valid(trimmed)) throw new ApiError(`Invalid ${name}.`, 400, \"INVALID_REQUEST\");\r\n return trimmed;\r\n}\r\n\r\nfunction parseAvatarImportResponse(value: unknown, projectId: string, userId: string, avatarId: string): AvatarImportResult {\r\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\r\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\r\n }\r\n const response = value as Record<string, unknown>;\r\n const body = response.data && typeof response.data === \"object\" && !Array.isArray(response.data)\r\n ? response.data as Record<string, unknown>\r\n : response;\r\n const imported = body.imported === true || body.success === true || body.status === \"imported\";\r\n const alreadyImported = body.code === \"AVATAR_ALREADY_IMPORTED\" || body.status === \"already_imported\";\r\n if (alreadyImported) {\r\n return {\r\n imported: true,\r\n alreadyImported: true,\r\n avatarId,\r\n projectId,\r\n userId,\r\n avatarName: typeof body.avatarName === \"string\" ? body.avatarName : undefined,\r\n publicKey: typeof body.publicKey === \"string\" ? body.publicKey : undefined,\r\n };\r\n }\r\n if (!imported) {\r\n const code = typeof body.code === \"string\" ? body.code : \"IMPORT_FAILED\";\r\n const supportedCode = [\"AVATAR_NOT_FOUND\", \"AVATAR_ALREADY_IMPORTED\", \"FORBIDDEN\", \"PROJECT_NOT_FOUND\", \"CONFLICT\"].includes(code)\r\n ? code as \"AVATAR_NOT_FOUND\" | \"AVATAR_ALREADY_IMPORTED\" | \"FORBIDDEN\" | \"PROJECT_NOT_FOUND\" | \"CONFLICT\"\r\n : \"IMPORT_FAILED\";\r\n throw new ApiError(typeof body.message === \"string\" ? body.message : \"Avatar import was not completed.\", 200, supportedCode);\r\n }\r\n const returnedAvatarId = body.avatarId ?? body.avatar_id;\r\n if (returnedAvatarId !== undefined && returnedAvatarId !== avatarId) {\r\n throw new ApiError(\"The API returned a different avatar than requested.\", 200, \"AVATAR_MISMATCH\");\r\n }\r\n const returnedProjectId = body.projectId ?? body.project_id;\r\n if (returnedProjectId !== undefined && returnedProjectId !== projectId) {\r\n throw new ApiError(\"The API returned a different project than requested.\", 200, \"PROJECT_MISMATCH\");\r\n }\r\n const returnedUserId = body.userId ?? body.user_id;\r\n if (returnedUserId !== undefined && returnedUserId !== userId) {\r\n throw new ApiError(\"The API returned a different user than requested.\", 200, \"USER_MISMATCH\");\r\n }\r\n return {\r\n imported: true,\r\n avatarId,\r\n projectId,\r\n userId,\r\n avatarName: typeof body.avatarName === \"string\" ? body.avatarName : undefined,\r\n publicKey: typeof body.publicKey === \"string\" ? body.publicKey : undefined,\r\n };\r\n}\r\n\r\nexport async function importAvatar(\r\n api: ApiClient,\r\n input: { userId: string; projectId: string; apiKey: string; avatarId: string },\r\n): Promise<AvatarImportResult> {\r\n const userId = requireIdentifier(input.userId, \"User ID\", isValidUserId);\r\n const projectId = requireIdentifier(input.projectId, \"Project ID\", isValidProjectId);\r\n const avatarId = requireIdentifier(input.avatarId, \"Avatar ID\", isValidAvatarId);\r\n const apiKey = input.apiKey.trim();\r\n if (!isValidApiKey(apiKey)) throw new ApiError(\"Invalid API key. It must be exactly 32 characters.\", 401, \"INVALID_API_KEY\");\r\n\r\n const value = await api.request<unknown>(`/cli/projects/${encodeURIComponent(projectId)}/avatars/import`, {\r\n method: \"POST\",\r\n headers: {\r\n Authorization: \"Bearer \" + apiKey,\r\n \"X-Asiyst-API-Key\": apiKey,\r\n },\r\n body: JSON.stringify({ userId, projectId, avatarId }),\r\n });\r\n return parseAvatarImportResponse(value, projectId, userId, avatarId);\r\n}\r\n","import { verifyInstallation } from \"../api/projects.js\";\r\nimport { loadConnection } from \"../config/credentials.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { ok, fail } from \"../ui/output.js\";\r\nimport { createApiClient } from \"./shared.js\";\r\n\r\nfunction printVerificationSafe(results: { name: string; ok: boolean; detail?: string }[]): boolean {\r\n console.log(\"\\nAsiyst Installation Verification\\n\");\r\n for (const result of results) result.ok ? ok(result.name, result.detail) : fail(result.name, result.detail);\r\n return results.length > 0 && results.every((result) => result.ok);\r\n}\r\n\r\nexport async function verifyCommand(cwd = process.cwd()): Promise<void> {\r\n const project = detectProject(cwd);\r\n if (!project.packageJson) { fail(\"Project detected\", \"package.json is missing\"); process.exitCode = 1; return; }\r\n ok(\"Project detected\");\r\n const stored = await loadConnection(cwd);\r\n if (!stored) { fail(\"Configuration found\", \"run asiyst connect\"); process.exitCode = 1; return; }\r\n ok(\"Configuration found\");\r\n try {\r\n const results = await verifyInstallation(createApiClient(), stored.projectId, stored.publicKey || \"\", process.env.ASIIYST_DOMAIN);\r\n if (!printVerificationSafe(results)) process.exitCode = 1;\r\n } catch (error) {\r\n fail(\"API reachable\", error instanceof Error ? error.message : \"verification failed\");\r\n process.exitCode = 1;\r\n }\r\n}\r\n","import { readFileSync } from \"node:fs\";\r\nimport { fileURLToPath } from \"node:url\";\r\n\r\ndeclare const __ASIYST_CLI_VERSION__: string | undefined;\r\n\r\nexport function readCurrentVersion(): string {\r\n if (typeof __ASIYST_CLI_VERSION__ === \"string\" && __ASIYST_CLI_VERSION__) return __ASIYST_CLI_VERSION__;\r\n try {\r\n const packageJson: unknown = JSON.parse(readFileSync(fileURLToPath(new URL(\"../package.json\", import.meta.url)), \"utf8\"));\r\n if (packageJson && typeof packageJson === \"object\" && typeof (packageJson as Record<string, unknown>).version === \"string\") {\r\n return (packageJson as Record<string, string>).version;\r\n }\r\n } catch {\r\n // Source and bundled layouts differ; the build injects __ASIYST_CLI_VERSION__.\r\n }\r\n try {\r\n const packageJson: unknown = JSON.parse(readFileSync(fileURLToPath(new URL(\"../../package.json\", import.meta.url)), \"utf8\"));\r\n if (packageJson && typeof packageJson === \"object\" && typeof (packageJson as Record<string, unknown>).version === \"string\" && (packageJson as Record<string, unknown>).name === \"@asiyst/cli\") {\r\n return (packageJson as Record<string, string>).version;\r\n }\r\n } catch {\r\n // Ignore unrelated package.json files, including the monorepo root.\r\n }\r\n return \"0.0.0\";\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\r\nimport { loadConnection } from \"../config/credentials.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { ok, fail } from \"../ui/output.js\";\r\nimport { CLI_API_BASE_URL, VERIFY_KEY_URL } from \"../config/api.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\nimport { createApiClient } from \"./shared.js\";\r\n\r\nexport async function doctorCommand(cwd = process.cwd(), api: ApiClient = createApiClient()): Promise<void> {\r\n ok(\"CLI version\", readCurrentVersion());\r\n ok(\"Executable\", process.argv[1] || \"unknown\");\r\n ok(\"API base\", api.baseUrl || CLI_API_BASE_URL);\r\n ok(\"Verify endpoint\", VERIFY_KEY_URL);\r\n ok(\"System\", process.platform);\r\n ok(\"Node.js\", process.version);\r\n const project = detectProject(cwd);\r\n project.packageJson ? ok(\"Project\", cwd) : fail(\"Project\", \"package.json is missing\");\r\n project.sdkVersion ? ok(\"SDK\", project.sdkVersion) : fail(\"SDK\", \"not installed\");\r\n const stored = await loadConnection(cwd);\r\n stored ? ok(\"Local credential\", \"present\") : fail(\"Local credential\", \"not connected\");\r\n try {\r\n await api.health();\r\n ok(\"Asiyst API\", \"health endpoint reachable\");\r\n } catch (error) {\r\n fail(\"Asiyst API\", error instanceof Error ? error.message : \"unreachable\");\r\n }\r\n}\r\n","import { openBrowser } from \"../browser/open.js\";\r\nimport { ASIIYST_WEB_URL } from \"../config/api.js\";\r\n\r\nexport async function dashboardCommand(): Promise<void> {\r\n const url = ASIIYST_WEB_URL;\r\n if (!(await openBrowser(url))) console.log(`Open this URL manually:\\n${url}`);\r\n else console.log(`Opening ${url}`);\r\n}\r\n","import { execFile } from \"node:child_process\";\r\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from \"node:fs\";\r\nimport { dirname, join, relative, resolve } from \"node:path\";\r\nimport { promisify } from \"node:util\";\r\nimport type { ProjectDetection } from \"../types.js\";\r\n\r\nconst execFileAsync = promisify(execFile);\r\nconst MARKER_START = \"// ASIIYST CLI START\";\r\nconst MARKER_END = \"// ASIIYST CLI END\";\r\n\r\nexport interface IntegrationValues {\r\n projectId: string;\r\n publicKey: string;\r\n avatarId: string;\r\n}\r\n\r\nexport interface IntegrationPlan {\r\n framework: string;\r\n sdkInstalled: boolean;\r\n sdkVersion?: string;\r\n componentPath: string;\r\n entryPath?: string;\r\n componentAction: \"create\" | \"update\" | \"unchanged\";\r\n entryAction: \"update\" | \"unchanged\" | \"unsupported\";\r\n reason?: string;\r\n}\r\n\r\nexport interface IntegrationResult extends IntegrationPlan {\r\n installed: boolean;\r\n}\r\n\r\nfunction componentSource(values: IntegrationValues, extension: \"tsx\" | \"jsx\" | \"ts\" | \"js\"): string {\r\n if (extension === \"ts\" || extension === \"js\") {\r\n return `${MARKER_START}\r\nimport { Asiyst } from \"@asiyst/sdk\";\r\n\r\nvoid Asiyst.init({\r\n projectId: ${JSON.stringify(values.projectId)},\r\n publicKey: ${JSON.stringify(values.publicKey)},\r\n avatarId: ${JSON.stringify(values.avatarId)},\r\n position: \"bottom-right\",\r\n});\r\n${MARKER_END}\r\n`;\r\n }\r\n const importLine = extension === \"tsx\"\r\n ? 'import * as React from \"react\";'\r\n : 'import React from \"react\";';\r\n return `${MARKER_START}\r\n${importLine}\r\nimport { Asiyst } from \"@asiyst/sdk\";\r\n\r\nlet asiystStarted = false;\r\n\r\nexport function AsiystAssistant() {\r\n React.useEffect(() => {\r\n if (asiystStarted) return;\r\n asiystStarted = true;\r\n void Asiyst.init({\r\n projectId: ${JSON.stringify(values.projectId)},\r\n publicKey: ${JSON.stringify(values.publicKey)},\r\n avatarId: ${JSON.stringify(values.avatarId)},\r\n position: \"bottom-right\",\r\n }).catch((error) => {\r\n asiystStarted = false;\r\n console.error(\"Asiyst failed to initialize.\", error);\r\n });\r\n }, []);\r\n\r\n return null;\r\n}\r\n${MARKER_END}\r\n`;\r\n}\r\n\r\nfunction read(path: string): string {\r\n return readFileSync(path, \"utf8\");\r\n}\r\n\r\nfunction findFirst(cwd: string, paths: string[]): string | undefined {\r\n return paths.map((path) => resolve(cwd, path)).find((path) => existsSync(path));\r\n}\r\n\r\nfunction isTypeScript(project: ProjectDetection): boolean {\r\n return project.language === \"TypeScript\" || existsSync(resolve(project.cwd, \"tsconfig.json\"));\r\n}\r\n\r\nfunction pathsFor(project: ProjectDetection): { component: string; entry?: string; extension: \"tsx\" | \"jsx\" | \"ts\" | \"js\" } {\r\n if (project.framework === \"Vanilla TypeScript\" || project.framework === \"Vanilla JavaScript\") {\r\n const extension = project.framework === \"Vanilla TypeScript\" ? \"ts\" : \"js\";\r\n return {\r\n component: join(\"src\", `asiyst.${extension}`),\r\n entry: findFirst(project.cwd, [`src/index.${extension}`, `index.${extension}`]),\r\n extension,\r\n };\r\n }\r\n const extension = isTypeScript(project) ? \"tsx\" : \"jsx\";\r\n const component = join(\"src\", \"components\", `AsiystAssistant.${extension}`);\r\n if (project.framework === \"Next.js\") {\r\n const appEntry = findFirst(project.cwd, [\"src/app/layout.tsx\", \"src/app/layout.jsx\", \"app/layout.tsx\", \"app/layout.jsx\"]);\r\n if (appEntry) return { component, entry: appEntry, extension: appEntry.endsWith(\".tsx\") ? \"tsx\" : \"jsx\" };\r\n const pagesEntry = findFirst(project.cwd, [\"src/pages/_app.tsx\", \"src/pages/_app.jsx\", \"pages/_app.tsx\", \"pages/_app.jsx\"]);\r\n if (pagesEntry) return { component, entry: pagesEntry, extension: pagesEntry.endsWith(\".tsx\") ? \"tsx\" : \"jsx\" };\r\n return { component, extension };\r\n }\r\n const entry = findFirst(project.cwd, [\r\n \"src/main.tsx\", \"src/main.jsx\", \"src/main.ts\", \"src/main.js\",\r\n \"src/index.tsx\", \"src/index.jsx\", \"src/index.ts\", \"src/index.js\",\r\n ]);\r\n return { component, entry, extension: entry?.endsWith(\".tsx\") || entry?.endsWith(\".ts\") ? \"tsx\" : \"jsx\" };\r\n}\r\n\r\nfunction updateComponent(path: string, source: string, values: IntegrationValues): \"create\" | \"update\" | \"unchanged\" {\r\n if (!existsSync(path)) {\r\n mkdirSync(dirname(path), { recursive: true });\r\n writeFileSync(path, source, \"utf8\");\r\n return \"create\";\r\n }\r\n const current = read(path);\r\n const start = current.indexOf(MARKER_START);\r\n const end = current.indexOf(MARKER_END);\r\n if (start >= 0 && end >= start) {\r\n const next = current.slice(0, start) + source.trimEnd() + current.slice(end + MARKER_END.length);\r\n if (next === current) return \"unchanged\";\r\n writeFileSync(path, next, \"utf8\");\r\n return \"update\";\r\n }\r\n const replacements: Record<string, string> = {\r\n projectId: JSON.stringify(values.projectId),\r\n publicKey: JSON.stringify(values.publicKey),\r\n avatarId: JSON.stringify(values.avatarId),\r\n };\r\n let next = source;\r\n for (const [name, value] of Object.entries(replacements)) {\r\n const pattern = new RegExp(`(${name}\\\\s*:\\\\s*)[\"'\\`][^\"'\\`]+[\"'\\`]`);\r\n if (!pattern.test(next)) {\r\n throw new Error(`Existing Asiyst component is not safely updateable: ${path}`);\r\n }\r\n next = next.replace(pattern, `$1${value}`);\r\n }\r\n if (next === source) return \"unchanged\";\r\n writeFileSync(path, next, \"utf8\");\r\n return \"update\";\r\n}\r\n\r\nfunction updateEntry(path: string, componentPath: string): \"update\" | \"unchanged\" {\r\n const current = read(path);\r\n const importPath = relative(dirname(path), resolve(componentPath))\r\n .replace(/\\\\/g, \"/\")\r\n .replace(/\\.(tsx|jsx)$/, \"\")\r\n .replace(/^\\.\\//, \"\");\r\n const importLine = componentPath.endsWith(\".ts\") || componentPath.endsWith(\".js\")\r\n ? `import \"./${importPath}\";`\r\n : `import { AsiystAssistant } from \"./${importPath}\";`;\r\n const hasImport = current.includes(\"AsiystAssistant\") && current.includes(\"@asiyst/sdk\");\r\n const nextImport = hasImport ? current : `${importLine}\\n${current}`;\r\n const componentPattern = /<AsiystAssistant\\s*\\/>/;\r\n let next = componentPattern.test(nextImport) ? nextImport : nextImport;\r\n if (!componentPattern.test(nextImport)) {\r\n if (/\\{children\\}/.test(nextImport)) {\r\n next = nextImport.replace(/\\{children\\}/, \"<AsiystAssistant />\\n {children}\");\r\n } else if (/<App\\s*\\/>/.test(nextImport)) {\r\n next = nextImport.replace(/<App\\s*\\/>/, \"<><AsiystAssistant /><App /></>\");\r\n } else if (/<Component\\s+\\{\\.\\.\\.pageProps\\}\\s*\\/>/.test(nextImport)) {\r\n next = nextImport.replace(/<Component\\s+\\{\\.\\.\\.pageProps\\}\\s*\\/>/, \"<><AsiystAssistant /><Component {...pageProps} /></>\");\r\n } else if (componentPath.endsWith(\".ts\") || componentPath.endsWith(\".js\")) {\r\n next = nextImport;\r\n } else {\r\n throw new Error(`Could not find a safe render location in ${path}. Add <AsiystAssistant /> to this entry point.`);\r\n }\r\n }\r\n if (next === current) return \"unchanged\";\r\n writeFileSync(path, next, \"utf8\");\r\n return \"update\";\r\n}\r\n\r\nexport function planIntegration(project: ProjectDetection, values: IntegrationValues): IntegrationPlan {\r\n if (!values.projectId || !values.publicKey || !values.avatarId) {\r\n throw new Error(\"Verified projectId, publicKey, and avatarId are required before configuring the SDK.\");\r\n }\r\n const paths = pathsFor(project);\r\n const componentPath = resolve(project.cwd, paths.component);\r\n const entryPath = paths.entry;\r\n if (!entryPath && !project.framework.startsWith(\"Vanilla\") && project.framework !== \"Next.js\" && project.framework !== \"React\" && project.framework !== \"Vite\") {\r\n return {\r\n framework: project.framework,\r\n sdkInstalled: Boolean(project.sdkVersion),\r\n sdkVersion: project.sdkVersion,\r\n componentPath,\r\n componentAction: existsSync(componentPath) ? \"update\" : \"create\",\r\n entryAction: \"unsupported\",\r\n reason: \"No supported React entry point was detected. Add AsiystAssistant to the website entry point manually.\",\r\n };\r\n }\r\n return {\r\n framework: project.framework,\r\n sdkInstalled: Boolean(project.sdkVersion),\r\n sdkVersion: project.sdkVersion,\r\n componentPath,\r\n entryPath,\r\n componentAction: existsSync(componentPath) ? \"update\" : \"create\",\r\n entryAction: entryPath ? \"update\" : \"unsupported\",\r\n reason: entryPath ? undefined : \"No supported application entry point was detected.\",\r\n };\r\n}\r\n\r\nexport async function installSdk(project: ProjectDetection): Promise<void> {\r\n const commands: Record<string, { command: string; args: string[] }> = {\r\n npm: { command: \"npm\", args: [\"install\", \"@asiyst/sdk\"] },\r\n pnpm: { command: \"pnpm\", args: [\"add\", \"@asiyst/sdk\"] },\r\n yarn: { command: \"yarn\", args: [\"add\", \"@asiyst/sdk\"] },\r\n bun: { command: \"bun\", args: [\"add\", \"@asiyst/sdk\"] },\r\n };\r\n const selected = commands[project.packageManager] ?? commands.npm;\r\n await execFileAsync(selected.command, selected.args, { cwd: project.cwd, windowsHide: true });\r\n}\r\n\r\nexport function applyIntegration(project: ProjectDetection, values: IntegrationValues, plan = planIntegration(project, values)): IntegrationResult {\r\n if (plan.entryAction === \"unsupported\" || !plan.entryPath) {\r\n throw new Error(plan.reason ?? \"The project entry point could not be detected safely.\");\r\n }\r\n const paths = pathsFor(project);\r\n const componentAction = updateComponent(plan.componentPath, componentSource(values, paths.extension), values);\r\n const entryAction = updateEntry(plan.entryPath, plan.componentPath);\r\n return { ...plan, componentAction, entryAction, installed: plan.sdkInstalled };\r\n}\r\n\r\nexport function printDryRun(plan: IntegrationPlan): void {\r\n console.log(`Framework: ${plan.framework}`);\r\n console.log(`SDK: ${plan.sdkInstalled ? `installed${plan.sdkVersion ? ` (${plan.sdkVersion})` : \"\"}` : \"missing\"}`);\r\n console.log(`Component: ${plan.componentAction} ${plan.componentPath}`);\r\n console.log(`Entry point: ${plan.entryPath ? `${plan.entryAction} ${plan.entryPath}` : \"not detected\"}`);\r\n if (plan.reason) console.log(`Note: ${plan.reason}`);\r\n}\r\n\r\nexport function readIntegrationValues(plan: IntegrationPlan): Partial<IntegrationValues> {\r\n if (!existsSync(plan.componentPath)) return {};\r\n const source = read(plan.componentPath);\r\n const value = (name: string): string | undefined => {\r\n const match = source.match(new RegExp(`${name}\\\\s*:\\\\s*[\"'\\`]([^\"'\\`]+)[\"'\\`]`));\r\n return match?.[1];\r\n };\r\n return {\r\n projectId: value(\"projectId\"),\r\n publicKey: value(\"publicKey\"),\r\n avatarId: value(\"avatarId\"),\r\n };\r\n}\r\n","import { openBrowser } from \"../browser/open.js\";\r\nimport { ASIIYST_WEB_URL } from \"../config/api.js\";\r\nimport { importAvatar } from \"../api/projects.js\";\r\nimport { createImportSession, verifyApiKeyRelationship, verifyAvatar } from \"../api/verification.js\";\r\nimport { ApiError } from \"../api/errors.js\";\r\nimport { loadConnection, saveConnection } from \"../config/credentials.js\";\r\nimport { writeProjectMetadata } from \"../config/project.js\";\r\nimport { isValidAvatarId } from \"../config/ids.js\";\r\nimport { readInput } from \"../ui/secret.js\";\r\nimport { selectOption } from \"../ui/selector.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { applyIntegration, installSdk, planIntegration, printDryRun, readIntegrationValues } from \"../integration/writer.js\";\r\nimport { createApiClient } from \"./shared.js\";\r\n\r\nfunction parseAvatarId(argv: string[]): string | undefined {\r\n const index = argv.findIndex((value) => value === \"--avatar-id\");\r\n if (index >= 0) return argv[index + 1];\r\n const inline = argv.find((value) => value.startsWith(\"--avatar-id=\"));\r\n return inline?.slice(\"--avatar-id=\".length) || argv.slice(1).find((value) => !value.startsWith(\"--\"));\r\n}\r\n\r\nfunction isDryRun(argv: string[]): boolean {\r\n return argv.includes(\"--dry-run\");\r\n}\r\n\r\nasync function confirm(message: string): Promise<boolean> {\r\n const result = await selectOption(message, [\r\n { label: \"Continue\", value: true },\r\n { label: \"Cancel\", value: false },\r\n ]);\r\n return result.type === \"selected\" && result.value;\r\n}\r\n\r\nexport async function avatarImportCommand(\r\n cwd = process.cwd(),\r\n api = createApiClient(),\r\n suppliedAvatarId?: string,\r\n): Promise<void> {\r\n const stored = await loadConnection(cwd);\r\n if (!stored?.apiKey || !stored.userId || !stored.projectId) {\r\n console.log(\"No project is connected. Please run:\\nasiyst connect\");\r\n return;\r\n }\r\n const avatarId = suppliedAvatarId ?? await readInput(\"Enter your Avatar ID: \");\r\n if (!avatarId || !isValidAvatarId(avatarId)) {\r\n console.log(\"Invalid Avatar ID. It must contain exactly 10 alphanumeric characters.\");\r\n return;\r\n }\r\n console.log(\"Opening Asiyst Avatar Studio...\");\r\n if (!(await openBrowser(ASIIYST_WEB_URL))) {\r\n console.log(`Open this URL manually:\\n${ASIIYST_WEB_URL}`);\r\n }\r\n console.log(\"Configure and save your avatar in Avatar Studio, then return here.\");\r\n const project = detectProject(cwd);\r\n const dryRun = process.argv.includes(\"--dry-run\");\r\n const detectedProjectId = project.config.projectId;\r\n if (detectedProjectId && detectedProjectId !== stored.projectId) {\r\n console.log(`Existing projectId ${detectedProjectId} differs from verified project ${stored.projectId}.`);\r\n if (!(await confirm(\"Switch this website to the verified project?\"))) return;\r\n }\r\n const existingPlan = planIntegration(project, {\r\n projectId: stored.projectId,\r\n publicKey: stored.publicKey ?? \"pending-public-key\",\r\n avatarId: avatarId.trim(),\r\n });\r\n const existing = readIntegrationValues(existingPlan);\r\n if (existing.projectId && existing.projectId !== stored.projectId) {\r\n console.log(`✗ Existing integration uses project ${existing.projectId}, but the verified project is ${stored.projectId}.`);\r\n if (!(await confirm(\"Replace the existing project configuration?\"))) return;\r\n }\r\n if (existing.avatarId && existing.avatarId !== avatarId.trim()) {\r\n console.log(`✗ Existing integration uses avatar ${existing.avatarId}, but the verified avatar is ${avatarId.trim()}.`);\r\n if (!(await confirm(\"Replace the existing avatar configuration?\"))) return;\r\n }\r\n try {\r\n if (dryRun) {\r\n const plan = planIntegration(project, {\r\n projectId: stored.projectId,\r\n publicKey: stored.publicKey ?? \"\",\r\n avatarId: avatarId.trim(),\r\n });\r\n printDryRun(plan);\r\n return;\r\n }\r\n const verifiedConnection = await verifyApiKeyRelationship(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n });\r\n await verifyAvatar(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n avatarId,\r\n });\r\n await createImportSession(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n avatarId,\r\n });\r\n const shouldImport = await confirm(\"Import this avatar into this website?\");\r\n if (!shouldImport) {\r\n console.log(\"Avatar import cancelled. Your verified connection has been saved.\");\r\n return;\r\n }\r\n const result = await importAvatar(api, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n apiKey: stored.apiKey,\r\n avatarId,\r\n });\r\n const publicKey = stored.publicKey ?? verifiedConnection.publicKey ?? result.publicKey;\r\n if (!publicKey) {\r\n console.log(\"✗ The verified project did not return a public SDK key. No files were changed.\");\r\n return;\r\n }\r\n const plan = planIntegration(detectProject(cwd), {\r\n projectId: result.projectId,\r\n publicKey,\r\n avatarId: result.avatarId,\r\n });\r\n if (!plan.sdkInstalled) {\r\n console.log(`Installing @asiyst/sdk with ${project.packageManager}...`);\r\n await installSdk(project);\r\n }\r\n const configured = applyIntegration(detectProject(cwd), {\r\n projectId: result.projectId,\r\n publicKey,\r\n avatarId: result.avatarId,\r\n });\r\n const next = { ...stored, avatarId: result.avatarId, avatarName: result.avatarName, publicKey };\r\n await saveConnection(cwd, next);\r\n writeProjectMetadata(cwd, next);\r\n console.log(\"✓ Avatar verified\");\r\n console.log(\"✓ Project verified\");\r\n console.log(\"✓ API key verified\");\r\n console.log(\"✓ SDK installed\");\r\n console.log(`✓ Asiyst integration ${configured.componentAction === \"unchanged\" ? \"already \" : \"\"}configured`);\r\n console.log(`✓ Avatar ${result.alreadyImported ? \"already imported\" : \"imported\"}`);\r\n console.log(`\\nYour Asiyst avatar is ready.`);\r\n } catch (error) {\r\n if (error instanceof ApiError) {\r\n if (error.code === \"FORBIDDEN\") console.log(\"✗ You do not have permission to import an avatar into this project.\");\r\n else if (error.code === \"USER_MISMATCH\") console.log(\"✗ The avatar is not owned by the verified Asiyst user.\");\r\n else if (error.code === \"PROJECT_MISMATCH\") console.log(\"✗ The avatar is not assigned to the verified project.\");\r\n else if (error.code === \"NOT_FOUND\") console.log(\"✗ Project or avatar was not found.\");\r\n else if (error.code === \"CONFLICT\" || error.code === \"AVATAR_ALREADY_IMPORTED\") console.log(\"✗ This avatar is already imported into the project.\");\r\n else console.log(`✗ ${error.message}`);\r\n return;\r\n }\r\n console.log(`✗ ${error instanceof Error ? error.message : \"Unable to import the avatar.\"}`);\r\n }\r\n}\r\n\r\nexport async function avatarCommand(cwd = process.cwd(), argv = process.argv.slice(2)): Promise<void> {\r\n if (argv[0] === \"import\") {\r\n await avatarImportCommand(cwd, createApiClient(), parseAvatarId(argv));\r\n return;\r\n }\r\n const stored = await loadConnection(cwd);\r\n if (!stored) {\r\n console.log(\"Connect your project to Asiyst to view avatar information.\");\r\n const url = ASIIYST_WEB_URL;\r\n if (await openBrowser(url)) console.log(`Opening ${url}`);\r\n else console.log(`Open this URL manually:\\n${url}`);\r\n return;\r\n }\r\n console.log(`Avatar configuration is managed at ${ASIIYST_WEB_URL}.`);\r\n if (!(await openBrowser(ASIIYST_WEB_URL))) console.log(`Open this URL manually:\\n${ASIIYST_WEB_URL}`);\r\n}\r\n","import { stdin, stdout } from \"node:process\";\r\nimport { emitKeypressEvents } from \"node:readline\";\r\nimport { loadConnection } from \"../config/credentials.js\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { muted, section, symbols, title } from \"../ui/format.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\nimport { connectCommand } from \"./connect.js\";\r\nimport { disconnectCommand } from \"./disconnect.js\";\r\nimport { healthCommand } from \"./health.js\";\r\nimport { statusCommand } from \"./status.js\";\r\nimport { avatarCommand } from \"./avatar.js\";\r\nimport { updateCommand } from \"./update.js\";\r\n\r\nexport function interactiveHelp(): void {\r\n console.log(`\r\nAsiyst CLI\r\n\r\nUsage: asiyst [command]\r\n\r\nCommands\r\n connect Connect this project to Asiyst\r\n status Show connection status\r\n avatar Manage and import avatars\r\n health Check Asiyst API connectivity\r\n disconnect Remove local connection information\r\n help Show available commands\r\n version Show CLI version\r\n\r\nAlso available\r\n trust Trust this project folder\r\n revoke-trust Revoke folder trust\r\n doctor Run diagnostics\r\n update Check for CLI updates\r\n\r\nExamples\r\n asiyst connect\r\n asiyst status\r\n asiyst health\r\n asiyst avatar import\r\n asiyst avatar import <avatar-id>\r\n asiyst disconnect\r\n`);\r\n}\r\n\r\nconst COMMANDS = [\r\n { input: \"connect\", label: \"Connect this project to Asiyst\" },\r\n { input: \"status\", label: \"Show connection status\" },\r\n { input: \"avatar\", label: \"Manage avatars\" },\r\n { input: \"avatar import\", label: \"Import an avatar\" },\r\n { input: \"health\", label: \"Check Asiyst API health\" },\r\n { input: \"disconnect\", label: \"Disconnect this project\" },\r\n { input: \"help\", label: \"Show available commands\" },\r\n { input: \"version\", label: \"Show CLI version\" },\r\n { input: \"update\", label: \"Check for CLI updates\" },\r\n { input: \"exit\", label: \"Exit the interactive CLI\" },\r\n];\r\n\r\nfunction suggestions(value: string): typeof COMMANDS {\r\n const query = value.trim().toLowerCase();\r\n if (!query) return COMMANDS;\r\n return COMMANDS.filter((command) => command.input.startsWith(query));\r\n}\r\n\r\nfunction readCommand(): Promise<string | undefined> {\r\n if (!stdin.isTTY || !stdout.isTTY) return Promise.resolve(undefined);\r\n return new Promise((resolve) => {\r\n let value = \"\";\r\n let active = 0;\r\n let settled = false;\r\n let renderedLines = 0;\r\n const wasRaw = Boolean(stdin.isRaw);\r\n\r\n const clear = () => {\r\n if (renderedLines === 0) return;\r\n stdout.write(`\\x1b[${renderedLines}A\\x1b[0J`);\r\n renderedLines = 0;\r\n };\r\n const render = () => {\r\n clear();\r\n const matches = suggestions(value);\r\n if (active >= matches.length) active = Math.max(0, matches.length - 1);\r\n const lines = [\r\n `${section(\"Command\")} ${value || muted(\"type a command\")}`,\r\n \"\",\r\n ...matches.slice(0, 6).map((command, index) =>\r\n `${index === active ? symbols.pointer : \" \"} ${command.input.padEnd(18)} ${muted(command.label)}`),\r\n \"\",\r\n muted(\"↑↓ select Enter run Esc cancel Ctrl+C exit\"),\r\n ];\r\n stdout.write(`${lines.join(\"\\n\")}\\n`);\r\n renderedLines = lines.length;\r\n };\r\n const finish = (result: string | undefined) => {\r\n if (settled) return;\r\n settled = true;\r\n clear();\r\n stdin.off(\"keypress\", onKeypress);\r\n if (stdin.isTTY) stdin.setRawMode?.(wasRaw);\r\n stdin.pause();\r\n stdout.write(\"\\n\");\r\n resolve(result);\r\n };\r\n const onKeypress = (chunk: string, key: { name?: string; ctrl?: boolean; sequence?: string }) => {\r\n if (key.ctrl && key.name === \"c\") {\r\n finish(undefined);\r\n process.exit(130);\r\n }\r\n if (key.name === \"escape\") return finish(undefined);\r\n if (key.name === \"up\") {\r\n const matches = suggestions(value);\r\n active = Math.max(0, active - 1);\r\n if (matches[active]) value = matches[active].input;\r\n return render();\r\n }\r\n if (key.name === \"down\") {\r\n const matches = suggestions(value);\r\n active = Math.min(Math.max(0, matches.length - 1), active + 1);\r\n if (matches[active]) value = matches[active].input;\r\n return render();\r\n }\r\n if (key.name === \"backspace\") {\r\n value = value.slice(0, -1);\r\n active = 0;\r\n return render();\r\n }\r\n if (key.name === \"return\" || key.name === \"enter\") {\r\n const matches = suggestions(value);\r\n const selected = value.trim() || matches[active]?.input;\r\n return finish(selected);\r\n }\r\n if (key.name === \"tab\") {\r\n const matches = suggestions(value);\r\n if (matches[active]) value = matches[active].input;\r\n return render();\r\n }\r\n const sequence = key.sequence || chunk;\r\n if (sequence && /^[\\x20-\\x7e]+$/.test(sequence)) {\r\n value += sequence;\r\n active = 0;\r\n return render();\r\n }\r\n if (key.name === \"left\" || key.name === \"right\") return;\r\n };\r\n\r\n emitKeypressEvents(stdin);\r\n stdin.setRawMode?.(true);\r\n stdin.resume();\r\n stdin.on(\"keypress\", onKeypress);\r\n render();\r\n });\r\n}\r\n\r\nasync function runInteractiveCommand(command: string): Promise<boolean> {\r\n const parts = command.trim().split(/\\s+/).filter(Boolean);\r\n const root = parts[0];\r\n if (root === \"exit\" || root === \"quit\") return false;\r\n if (root === \"connect\") await connectCommand();\r\n else if (root === \"status\") await statusCommand();\r\n else if (root === \"avatar\") await avatarCommand(process.cwd(), parts.slice(1));\r\n else if (root === \"health\") await healthCommand();\r\n else if (root === \"disconnect\") await disconnectCommand();\r\n else if (root === \"help\") interactiveHelp();\r\n else if (root === \"version\") console.log(readCurrentVersion());\r\n else if (root === \"update\") await updateCommand();\r\n else {\r\n console.log(`\\n${symbols.error} Unknown command: ${command}`);\r\n console.log(`Try ${muted(\"help\")} to see available commands.`);\r\n }\r\n return true;\r\n}\r\n\r\nfunction renderLogo(): void {\r\n const lines = [\r\n \" █████╗ ███████╗██╗███████╗████████╗\",\r\n \"██╔════╝ ██╔════╝██║██╔════╝╚══██╔══╝\",\r\n \"█████╗ ███████╗██║███████╗ ██║ \",\r\n \"██╔══╝ ╚════██║██║╚════██║ ██║ \",\r\n \"███████╗ ███████║██║███████║ ██║ \",\r\n \"╚══════╝ ╚══════╝╚═╝╚══════╝ ╚═╝ \",\r\n ];\r\n console.log(title(lines.join(\"\\n\")));\r\n console.log();\r\n}\r\n\r\nfunction renderWelcome(project: ReturnType<typeof detectProject>, connected: boolean): void {\r\n console.log(muted(\"Developer Assistant CLI\"));\r\n console.log();\r\n console.log(\"Welcome to Asiyst CLI.\");\r\n console.log(\"Connect your project, manage your avatar, and verify your website integration.\");\r\n console.log();\r\n console.log(section(\"Project\"));\r\n console.log(` ${project && project.packageJson?.name ? String(project.packageJson.name) : process.cwd().split(/[\\\\/]/).pop() || \"current-project\"}`);\r\n console.log(` ${connected ? `${symbols.connected} Connected` : `${symbols.disconnected} Not connected`}`);\r\n console.log();\r\n console.log(section(\"Environment\"));\r\n if (project) {\r\n console.log(` ${project.framework} · ${project.language} · ${project.packageManager}`);\r\n console.log(` SDK: ${project.sdkVersion ? project.sdkVersion : \"not installed\"}`);\r\n } else {\r\n console.log(\" Unable to detect project metadata automatically.\");\r\n }\r\n console.log();\r\n console.log(muted(\"────────────────────────────────────────────────────────\"));\r\n console.log();\r\n}\r\n\r\nexport async function interactiveHome(): Promise<void> {\r\n const project = detectProject();\r\n const initialConnection = await loadConnection(process.cwd());\r\n console.clear();\r\n renderLogo();\r\n renderWelcome(project, Boolean(initialConnection));\r\n for (;;) {\r\n const command = await readCommand();\r\n if (!command || !(await runInteractiveCommand(command))) break;\r\n }\r\n}\r\n","import { ApiClient } from \"../api/client.js\";\nimport { verifyApiKeyRelationship, verifyAvatar } from \"../api/verification.js\";\nimport { loadConnection } from \"../config/credentials.js\";\nimport { detectProject } from \"../detection/project.js\";\nimport { readProjectMetadata } from \"../config/project.js\";\nimport { fail, ok } from \"../ui/output.js\";\nimport { printHeader, success, symbols, warning } from \"../ui/format.js\";\nimport { createApiClient } from \"./shared.js\";\n\nexport async function healthCommand(api: ApiClient = createApiClient(), cwd = process.cwd()): Promise<void> {\n printHeader(\"Asiyst Health Check\");\n const project = detectProject(cwd);\n let healthy = true;\n ok(\"Project detected\", project.framework);\n if (project.sdkVersion) ok(\"SDK installed\", project.sdkVersion);\n else {\n fail(\"SDK installed\", \"Run the avatar import command to install it\");\n healthy = false;\n }\n try {\n await api.health();\n ok(\"Asiyst API reachable\");\n } catch {\n fail(\"Asiyst API reachable\", \"Unable to reach Asiyst API\");\n console.log(`\\nHealth: ${warning(symbols.warning)} Action required`);\n return;\n }\n const stored = await loadConnection(cwd);\n if (!stored?.apiKey || !stored.userId || !stored.projectId) {\n console.log(`\\nHealth: ${warning(symbols.warning)} Action required`);\n console.log(\"Run `asiyst connect` to connect this project.\");\n return;\n }\n ok(\"Authentication valid\");\n try {\n await verifyApiKeyRelationship(api, {\n userId: stored.userId,\n projectId: stored.projectId,\n apiKey: stored.apiKey,\n });\n ok(\"Project authorized\");\n const metadata = readProjectMetadata(cwd);\n if (metadata?.avatarId) {\n await verifyAvatar(api, {\n userId: stored.userId,\n projectId: stored.projectId,\n apiKey: stored.apiKey,\n avatarId: metadata.avatarId,\n });\n ok(\"Avatar verified\", metadata.avatarName ?? metadata.avatarId);\n }\n else {\n fail(\"Avatar\", \"No imported avatar is recorded for this project\");\n healthy = false;\n }\n if (metadata?.projectId === stored.projectId && metadata.publicKey) ok(\"Local configuration\", \"Project and public key present\");\n else {\n fail(\"Local configuration\", \"Project metadata is incomplete\");\n healthy = false;\n }\n if (project.sdkVersion && metadata?.avatarId) ok(\"Website integration\", \"SDK and avatar are configured\");\n else {\n fail(\"Website integration\", \"Run `asiyst avatar import`\");\n healthy = false;\n }\n console.log(`\\nHealth: ${healthy ? `${success(symbols.connected)} Healthy` : `${warning(symbols.warning)} Action required`}`);\n } catch {\n fail(\"Project authorization\", \"Run `asiyst connect` to reconnect\");\n console.log(`\\nHealth: ${warning(symbols.warning)} Action required`);\n }\n}\n","import { execFileSync } from \"node:child_process\";\r\nimport { readFileSync } from \"node:fs\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\n\r\nconst PACKAGE_NAME = \"@asiyst/cli\";\r\nconst REGISTRY_URL = \"https://registry.npmjs.org/%40asiyst%2Fcli/latest\";\r\nconst TIMEOUT_MS = 800;\r\ntype CommandRunner = (file: string, args: string[], options: { encoding?: BufferEncoding; stdio?: \"inherit\" }) => string | Buffer | undefined;\r\nconst defaultRunner: CommandRunner = (file, args, options) => execFileSync(file, args, options);\r\n\r\nexport interface UpdateInfo {\r\n currentVersion: string;\r\n latestVersion?: string;\r\n}\r\n\r\nfunction parseVersion(value: string): { numbers: number[]; prerelease: string[] } | undefined {\r\n const match = /^[v=]?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(value.trim());\r\n return match\r\n ? { numbers: [Number(match[1]), Number(match[2]), Number(match[3])], prerelease: match[4]?.split(\".\") ?? [] }\r\n : undefined;\r\n}\r\n\r\nexport function compareVersions(left: string, right: string): number {\r\n const a = parseVersion(left);\r\n const b = parseVersion(right);\r\n if (!a || !b) return 0;\r\n for (let index = 0; index < 3; index += 1) {\r\n if (a.numbers[index] !== b.numbers[index]) return a.numbers[index] > b.numbers[index] ? 1 : -1;\r\n }\r\n if (a.prerelease.length === 0 && b.prerelease.length > 0) return 1;\r\n if (a.prerelease.length > 0 && b.prerelease.length === 0) return -1;\r\n for (let index = 0; index < Math.max(a.prerelease.length, b.prerelease.length); index += 1) {\r\n const leftPart = a.prerelease[index];\r\n const rightPart = b.prerelease[index];\r\n if (leftPart === undefined) return -1;\r\n if (rightPart === undefined) return 1;\r\n if (leftPart === rightPart) continue;\r\n const leftNumber = /^\\d+$/.test(leftPart) ? Number(leftPart) : undefined;\r\n const rightNumber = /^\\d+$/.test(rightPart) ? Number(rightPart) : undefined;\r\n if (leftNumber !== undefined && rightNumber !== undefined) return leftNumber > rightNumber ? 1 : -1;\r\n if (leftNumber !== undefined) return -1;\r\n if (rightNumber !== undefined) return 1;\r\n return leftPart > rightPart ? 1 : -1;\r\n }\r\n return 0;\r\n}\r\n\r\nexport async function checkForUpdate(\r\n currentVersion = readCurrentVersion(),\r\n fetcher: typeof fetch = fetch,\r\n): Promise<UpdateInfo> {\r\n const controller = new AbortController();\r\n const timer = setTimeout(() => controller.abort(), TIMEOUT_MS);\r\n try {\r\n const response = await fetcher(REGISTRY_URL, { headers: { Accept: \"application/json\" }, signal: controller.signal });\r\n if (!response.ok) return { currentVersion };\r\n const body: unknown = await response.json();\r\n const latestVersion = body && typeof body === \"object\" && typeof (body as Record<string, unknown>).version === \"string\"\r\n ? (body as Record<string, string>).version\r\n : undefined;\r\n return latestVersion && parseVersion(latestVersion) ? { currentVersion, latestVersion } : { currentVersion };\r\n } catch {\r\n return { currentVersion };\r\n } finally {\r\n clearTimeout(timer);\r\n }\r\n}\r\n\r\nexport async function notifyIfUpdateAvailable(): Promise<void> {\r\n const result = await checkForUpdate();\r\n if (result.latestVersion && compareVersions(result.latestVersion, result.currentVersion) > 0) {\r\n console.log(`\\n⚠ New Asiyst CLI version available: ${result.currentVersion} → ${result.latestVersion}\\nRun \\`update\\` to install the latest version.\\n`);\r\n }\r\n}\r\n\r\nexport type InstallKind = \"npx\" | \"global\" | \"local\";\r\n\r\nexport function detectInstallKind(\r\n executablePath = process.argv[1] ?? \"\",\r\n env: NodeJS.ProcessEnv = process.env,\r\n globalRootResolver: () => string | undefined = () => {\r\n try {\r\n return execFileSync(process.platform === \"win32\" ? \"npm.cmd\" : \"npm\", [\"root\", \"--global\"], { encoding: \"utf8\" }).trim();\r\n } catch {\r\n return undefined;\r\n }\r\n },\r\n): InstallKind {\r\n if (env.npm_command === \"exec\" || /[\\\\/]_npx[\\\\/]/i.test(executablePath)) return \"npx\";\r\n const globalRoot = globalRootResolver();\r\n if (globalRoot && executablePath.toLowerCase().startsWith(`${globalRoot.toLowerCase()}\\\\`)) return \"global\";\r\n if (globalRoot && executablePath.toLowerCase().startsWith(`${globalRoot.toLowerCase()}/`)) return \"global\";\r\n return \"local\";\r\n}\r\n\r\nfunction installedVersion(packageRoot: string): string | undefined {\r\n try {\r\n const value: unknown = JSON.parse(readFileSync(`${packageRoot}/package.json`, \"utf8\"));\r\n return value && typeof value === \"object\" && typeof (value as Record<string, unknown>).version === \"string\"\r\n ? (value as Record<string, string>).version\r\n : undefined;\r\n } catch {\r\n return undefined;\r\n }\r\n}\r\n\r\nexport function installLatest(\r\n latestVersion: string,\r\n kind: InstallKind,\r\n executablePath = process.argv[1] ?? \"\",\r\n runner: CommandRunner = defaultRunner,\r\n): string | undefined {\r\n const executable = process.platform === \"win32\" ? \"npm.cmd\" : \"npm\";\r\n if (kind === \"global\") {\r\n runner(executable, [\"install\", \"--global\", `${PACKAGE_NAME}@${latestVersion}`], { stdio: \"inherit\" });\r\n const packageRoot = executablePath.replace(/[\\\\/]dist[\\\\/][^\\\\/]+$/, \"\");\r\n return installedVersion(packageRoot);\r\n }\r\n if (kind === \"npx\") {\r\n const npx = process.platform === \"win32\" ? \"npx.cmd\" : \"npx\";\r\n const output = runner(npx, [\"--yes\", `${PACKAGE_NAME}@${latestVersion}`, \"--version\"], { encoding: \"utf8\" });\r\n return typeof output === \"string\" ? output.trim().split(/\\r?\\n/).pop() : undefined;\r\n }\r\n return undefined;\r\n}\r\n","import { checkForUpdate, compareVersions, detectInstallKind, installLatest } from \"../update/check.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\nimport { confirm } from \"./shared.js\";\r\nimport { printHeader, success, symbols, warning } from \"../ui/format.js\";\r\n\r\nexport async function updateCommand(): Promise<void> {\r\n printHeader(\"Asiyst CLI Update\");\r\n const result = await checkForUpdate();\r\n if (!result.latestVersion || compareVersions(result.latestVersion, result.currentVersion) <= 0) {\r\n console.log(`${success(symbols.success)} Latest version\\n\\nCurrent version: ${result.currentVersion}`);\r\n return;\r\n }\r\n console.log(`${warning(symbols.warning)} Update available\\n\\nCurrent version: ${result.currentVersion}\\nLatest version: ${result.latestVersion}\\n`);\r\n if (!process.stdin.isTTY || !(await confirm(`Update Asiyst CLI from ${result.currentVersion} to ${result.latestVersion}?`))) {\r\n console.log(\"Update cancelled.\");\r\n return;\r\n }\r\n const kind = detectInstallKind();\r\n if (kind === \"local\") {\r\n console.log(\"This CLI is installed locally. Update it through its package manager; no project files were changed.\");\r\n return;\r\n }\r\n try {\r\n console.log(\"\\nUpdating Asiyst CLI...\\n✓ Downloading and installing\");\r\n const installed = installLatest(result.latestVersion, kind);\r\n if (!installed || compareVersions(installed, result.latestVersion) !== 0) {\r\n throw new Error(\"installed version could not be verified\");\r\n }\r\n console.log(`${success(symbols.success)} Verifying installation\\n\\nAsiyst CLI updated from ${result.currentVersion} to ${installed}.\\nRestart Asiyst to use the new version.`);\r\n } catch (error) {\r\n console.log(`✗ Update failed. Your current CLI is unchanged.\\n${error instanceof Error ? error.message : \"Installation could not be verified.\"}`);\r\n }\r\n}\r\n\r\nexport function currentVersion(): string {\r\n return readCurrentVersion();\r\n}\r\n","import { initCommand } from \"./commands/init.js\";\r\nimport { loginCommand } from \"./commands/login.js\";\r\nimport { logoutCommand } from \"./commands/logout.js\";\r\nimport { statusCommand } from \"./commands/status.js\";\r\nimport { verifyCommand } from \"./commands/verify.js\";\r\nimport { doctorCommand } from \"./commands/doctor.js\";\r\nimport { dashboardCommand } from \"./commands/dashboard.js\";\r\nimport { avatarCommand } from \"./commands/avatar.js\";\r\nimport { revokeTrustCommand, trustCommand } from \"./commands/trust.js\";\r\nimport { interactiveHelp, interactiveHome } from \"./commands/interactive.js\";\r\nimport { readCurrentVersion } from \"./config/version.js\";\r\nimport { notifyIfUpdateAvailable } from \"./update/check.js\";\r\nimport { updateCommand } from \"./commands/update.js\";\r\nimport { connectCommand } from \"./commands/connect.js\";\r\nimport { disconnectCommand } from \"./commands/disconnect.js\";\r\nimport { healthCommand } from \"./commands/health.js\";\r\nimport { parseProjectIdArgument } from \"./config/ids.js\";\r\nimport { fileURLToPath } from \"node:url\";\r\nimport { resolve } from \"node:path\";\r\n\r\nexport const CLI_VERSION = readCurrentVersion();\r\n\r\nfunction help(): void {\r\n interactiveHelp();\r\n}\r\n\r\nexport async function main(argv = process.argv.slice(2)): Promise<void> {\r\n const command = argv[0] || \"\";\r\n const projectId = parseProjectIdArgument(argv);\r\n if (command !== \"update\" && !argv.includes(\"--version\") && !argv.includes(\"-v\") && !argv.includes(\"--help\") && !argv.includes(\"-h\")) {\r\n await notifyIfUpdateAvailable();\r\n }\r\n if (command === \"--help\" || command === \"-h\") return help();\r\n if (command === \"--version\" || command === \"-v\") return console.log(CLI_VERSION);\r\n if (command === \"init\") return connectCommand(process.cwd(), undefined, projectId);\r\n if (command === \"connect\") return connectCommand(process.cwd(), undefined, projectId);\r\n if (command === \"login\") return loginCommand();\r\n if (command === \"logout\") return logoutCommand();\r\n if (command === \"disconnect\") return disconnectCommand();\r\n if (command === \"status\") return statusCommand();\r\n if (command === \"verify\") return verifyCommand();\r\n if (command === \"health\") return healthCommand();\r\n if (command === \"doctor\") return doctorCommand();\r\n if (command === \"diagnostics\") return doctorCommand();\r\n if (command === \"dashboard\") return dashboardCommand();\r\n if (command === \"avatar\") return avatarCommand(process.cwd(), argv.slice(1));\r\n if (command === \"trust\") return trustCommand();\r\n if (command === \"revoke-trust\") return revokeTrustCommand();\r\n if (command === \"update\") return updateCommand();\r\n if (command === \"help\") return help();\r\n if (command === \"version\") return console.log(`Asiyst CLI v${CLI_VERSION}\\n✓ Latest version`);\r\n if (!process.stdin.isTTY) {\r\n help();\r\n return;\r\n }\r\n return interactiveHome();\r\n}\r\n\r\nimport { realpathSync } from \"node:fs\";\r\n\r\nfunction isDirectExecution(): boolean {\r\n if (!process.argv[1]) return false;\r\n try {\r\n const entryPath = realpathSync(fileURLToPath(import.meta.url));\r\n const execPath = realpathSync(process.argv[1]);\r\n return entryPath.toLowerCase() === execPath.toLowerCase();\r\n } catch {\r\n return true;\r\n }\r\n}\r\n\r\nif (isDirectExecution()) {\r\n main().catch((error: unknown) => {\r\n console.error(`\\nError: ${error instanceof Error ? error.message : \"command failed\"}`);\r\n process.exitCode = 1;\r\n });\r\n}\r\n\r\nexport { initCommand };\r\n"],"mappings":"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","names":["execFile","promisify","execFileAsync","stdout","execFileAsync","entry","next","existsSync","mkdirSync","readFileSync","writeFileSync","join","resolve","existsSync","readFileSync","resolve","section","stdout","title","resolve","stdin","stdout","emitKeypressEvents","resolve","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","resolve","record","readFileSync","execFile","existsSync","mkdirSync","readFileSync","writeFileSync","join","resolve","promisify","execFileAsync","extension","next","confirm","plan","stdin","stdout","emitKeypressEvents","readFileSync","readFileSync","stdin","stdout","resolve","emitKeypressEvents","fileURLToPath"]}
|