@asiyst/cli 1.0.8 → 1.1.1

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/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 try {\r\n response = await this.fetcher(`${this.baseUrl}${path}`, {\r\n ...init,\r\n headers: { Accept: \"application/json\", \"Content-Type\": \"application/json\", ...init?.headers },\r\n });\r\n } catch (error) {\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 }\r\n const body: unknown = await response.json().catch(() => undefined);\r\n if (!response.ok) {\r\n const detail = response.status === 401 ? \"Authentication is required.\" :\r\n response.status === 403 ? \"The request is not authorized.\" :\r\n response.status === 404 ? \"The requested resource was not found.\" :\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 { emitKeypressEvents } 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 escape = \"\\x1b[\";\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 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 if (renderedLines === 0) return;\r\n stdout.write(`${escape}${renderedLines}A`);\r\n for (let line = 0; line < renderedLines; line += 1) stdout.write(`${escape}2K${line < renderedLines - 1 ? `${escape}1B` : \"\"}`);\r\n stdout.write(`${escape}${renderedLines}A`);\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 stdout.write(`${lines.join(\"\\n\")}\\n`);\r\n renderedLines = lines.length;\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) active = key.name === \"up\" ? (active + matches.length - 1) % matches.length : (active + 1) % matches.length;\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/api.ts","../src/config/ids.ts","../src/api/errors.ts","../src/api/auth.ts","../src/browser/open.ts","../src/config/credentials.ts","../src/config/project.ts","../src/detection/project.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/commands/avatar.ts","../src/commands/interactive.ts","../src/update/check.ts","../src/commands/update.ts","../src/commands/health.ts","../src/index.ts"],"sourcesContent":["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","export const PUBLIC_IDENTIFIER_PATTERN = /^(?=.{1,128}$)[A-Za-z0-9_][A-Za-z0-9_-]*$/;\r\nexport const USER_ID_PATTERN = /^[A-Za-z0-9_]{24}$/;\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 isValidUserId(value: unknown): value is string {\r\n return typeof value === \"string\" && value.trim() !== \"undefined\" && value.trim() !== \"null\" && USER_ID_PATTERN.test(value.trim());\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 | \"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 === \"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 === \"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 type { ConnectedProject } from \"../types.js\";\nimport { VERIFY_KEY_PATH } from \"../config/api.js\";\nimport { isValidPublicIdentifier } from \"../config/ids.js\";\nimport { ApiClient } from \"./client.js\";\nimport { ApiError } from \"./errors.js\";\n\nfunction asRecord(value: unknown): Record<string, unknown> | undefined {\n return value && typeof value === \"object\" && !Array.isArray(value) ? value as Record<string, unknown> : undefined;\n}\n\nfunction bearerToken(apiKey: string): string {\n const trimmed = apiKey.trim();\n return trimmed.toLowerCase().startsWith(\"bearer \") ? trimmed.slice(7).trim() : trimmed;\n}\n\nfunction projectFromBody(body: Record<string, unknown>): Record<string, unknown> | undefined {\n const nested = asRecord(body.project) ?? asRecord(body.data);\n const nestedProject = nested ? asRecord(nested.project) ?? nested : undefined;\n return nestedProject ?? body;\n}\n\nexport function parseVerifyKeyResponse(value: unknown, apiKey: string): ConnectedProject {\n const body = asRecord(value);\n if (!body) throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n\n if (body.valid === false) {\n const code = typeof body.code === \"string\" ? body.code : undefined;\n if (code === \"API_KEY_REVOKED\" || body.revoked === true) {\n throw new ApiError(\"This API key has been revoked.\", 401, \"API_KEY_REVOKED\");\n }\n throw new ApiError(\"The Asiyst API key was rejected.\", 401, \"INVALID_API_KEY\");\n }\n\n if (body.valid !== undefined && body.valid !== true) {\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n }\n\n const project = projectFromBody(body);\n if (!project) throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n\n const projectIdCandidate = project.projectId ?? project.project_id ?? project.projectID ?? project.id;\n const projectId = typeof projectIdCandidate === \"string\" && isValidPublicIdentifier(projectIdCandidate)\n ? projectIdCandidate.trim()\n : undefined;\n\n if (!projectId) {\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n }\n\n const website = project.website ?? project.websiteUrl ?? project.url ?? project.domain ?? project.website_url;\n const projectName = project.projectName ?? project.name ?? project.title;\n const publicKey = project.publicKey ?? project.public_key ?? project.publishableKey;\n const userId = project.userId ?? project.user_id ?? project.asiystUserId ?? project.asiyst_user_id\n ?? body.userId ?? body.user_id ?? body.asiystUserId ?? body.asiyst_user_id;\n\n return {\n projectId,\n projectName: typeof projectName === \"string\" ? projectName : undefined,\n website: typeof website === \"string\" ? website : undefined,\n publicKey: typeof publicKey === \"string\" ? publicKey : undefined,\n apiKey,\n userId: typeof userId === \"string\" && isValidPublicIdentifier(userId) ? userId : undefined,\n };\n}\n\nexport async function verifyApiKey(\n api: ApiClient,\n apiKey: string,\n expected?: { userId?: string; projectId?: string },\n): Promise<ConnectedProject> {\n const token = bearerToken(apiKey);\n if (!token) throw new ApiError(\"Invalid API key.\", 401, \"INVALID_API_KEY\");\n const value = await api.request<unknown>(VERIFY_KEY_PATH, {\n method: \"POST\",\n headers: {\n Authorization: \"Bearer \" + token,\n \"X-Asiyst-API-Key\": token,\n },\n body: JSON.stringify({\n apiKey: token,\n ...(expected?.userId ? { userId: expected.userId } : {}),\n ...(expected?.projectId ? { projectId: expected.projectId } : {}),\n }),\n });\n return parseVerifyKeyResponse(value, token);\n}\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 { 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 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 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 type { ProjectDetection } 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 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(\"@asiyst/sdk is not installed. You can connect the project now and install the SDK later.\");\n}\n\nexport function homeStatus(): void {\n console.log(\"\\nConnect your project to Asiyst to view stats.\\n\");\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 ?? asRecord(record?.error)?.code;\r\n return typeof code === \"string\" ? code : 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(`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\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\";\nimport { verifyApiKey } from \"../api/auth.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 { isValidPublicIdentifier, 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 { 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 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 User ID. It must be a 24-character public Asiyst account ID.\");\n return undefined;\n }\n return value.trim();\n}\n\nexport async function connectCommand(cwd = process.cwd(), api = createApiClient(), cliProjectId?: string): Promise<void> {\n console.log(`Project folder:\\n${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 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\n if (!projectId) {\n projectId = (await promptForProjectId()) || \"\";\n }\n if (!projectId) {\n console.log(\"Project ID is required. Use: asiyst connect --project-id <PROJECT_ID>\");\n return;\n }\n if (!isValidPublicIdentifier(projectId)) {\n console.log(\"Invalid Project ID. Use a public project ID such as K8mP2xQ7_vL4N9cR5T1zB6Y3\");\n return;\n }\n const userId = await promptForUserId();\n if (!userId) return;\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 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 (!apiKey) {\n fail(\"Invalid API key.\");\n continue;\n }\n try {\n const connected = await verifyApiKey(api, apiKey, { userId, projectId });\n if (connected.projectId && connected.projectId !== projectId) {\n console.log(\"The provided Project ID does not match the authenticated project.\");\n return;\n }\n const finalConnection = { ...connected, projectId, userId };\n ok(\"API key verified.\");\n ok(\"Project ID 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 { verifyApiKey } from \"../api/auth.js\";\r\nimport { ApiError } from \"../api/errors.js\";\r\nimport { loadConnection } from \"../config/credentials.js\";\r\nimport { readProjectMetadata } from \"../config/project.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 const metadata = readProjectMetadata(cwd);\r\n if (metadata?.connected && metadata.projectId) {\r\n console.log(\"✓ Connected\");\r\n console.log(`Project:\\n${metadata.projectId}`);\r\n if (metadata.userId) console.log(`User ID:\\n${metadata.userId}`);\r\n return;\r\n }\r\n console.log(\"Connect your website to show stats.\");\r\n return;\r\n }\r\n if (!stored.userId || !stored.projectId) {\r\n console.log(\"✗ 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 verifyApiKey(api, stored.apiKey, {\r\n userId: stored.userId,\r\n projectId: stored.projectId,\r\n });\r\n const projectId = stored.projectId || connected.projectId;\r\n const userId = stored.userId || connected.userId;\r\n console.log(\"✓ Connected\");\r\n if (userId) console.log(`\\nUser ID:\\n${userId}`);\r\n console.log(`\\nProject ID:\\n${projectId || connected.projectName || \"Unknown\"}`);\r\n console.log(\"\\nAPI Key:\\n••••••••\");\r\n if (stored.avatarId) console.log(`\\nAvatar:\\n${stored.avatarId}`);\r\n if (connected.website) console.log(`\\nWebsite:\\n${connected.website}`);\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(\"✗ Connection invalid.\");\r\n return;\r\n }\r\n console.log(\"✗ Connection invalid.\");\r\n }\r\n}\r\n","import type { ConnectedProject, SafeProjectInfo, VerificationResult } from \"../types.js\";\nimport { isValidAvatarId, isValidPublicIdentifier, isValidUserId } from \"../config/ids.js\";\nimport { ApiClient } from \"./client.js\";\nimport { ApiError } from \"./errors.js\";\n\nexport async function fetchProjectInfo(api: ApiClient, projectId: string): Promise<SafeProjectInfo> {\n const value = await api.request<unknown>(`/cli/projects/${encodeURIComponent(projectId)}`);\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n }\n return value as SafeProjectInfo;\n}\n\nexport async function verifyInstallation(\n api: ApiClient,\n projectId: string,\n publicKey: string,\n domain?: string,\n): Promise<VerificationResult[]> {\n const value = await api.request<unknown>(\"/cli/verification\", {\n method: \"POST\",\n body: JSON.stringify({ projectId, publicKey, domain }),\n });\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\")) {\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n }\n return value as VerificationResult[];\n}\n\nexport interface AvatarImportResult {\n imported: boolean;\n avatarId: string;\n projectId: string;\n userId: string;\n avatarName?: string;\n}\n\nfunction requireIdentifier(value: string, name: string, valid: (candidate: unknown) => boolean): string {\n const trimmed = value.trim();\n if (!valid(trimmed)) throw new ApiError(`Invalid ${name}.`, 400, \"INVALID_REQUEST\");\n return trimmed;\n}\n\nfunction parseAvatarImportResponse(value: unknown, projectId: string, userId: string, avatarId: string): AvatarImportResult {\n if (!value || typeof value !== \"object\" || Array.isArray(value)) {\n throw new ApiError(\"Received an unexpected response from Asiyst.\", 200, \"MALFORMED_RESPONSE\");\n }\n const body = value as Record<string, unknown>;\n const imported = body.imported === true || body.success === true || body.status === \"imported\";\n if (!imported) {\n const code = typeof body.code === \"string\" ? body.code : \"IMPORT_FAILED\";\n const supportedCode = [\"AVATAR_NOT_FOUND\", \"AVATAR_ALREADY_IMPORTED\", \"FORBIDDEN\", \"PROJECT_NOT_FOUND\", \"CONFLICT\"].includes(code)\n ? code as \"AVATAR_NOT_FOUND\" | \"AVATAR_ALREADY_IMPORTED\" | \"FORBIDDEN\" | \"PROJECT_NOT_FOUND\" | \"CONFLICT\"\n : \"IMPORT_FAILED\";\n throw new ApiError(typeof body.message === \"string\" ? body.message : \"Avatar import was not completed.\", 200, supportedCode);\n }\n const returnedAvatarId = body.avatarId ?? body.avatar_id;\n if (returnedAvatarId !== undefined && returnedAvatarId !== avatarId) {\n throw new ApiError(\"The API returned a different avatar than requested.\", 200, \"AVATAR_MISMATCH\");\n }\n return {\n imported: true,\n avatarId,\n projectId,\n userId,\n avatarName: typeof body.avatarName === \"string\" ? body.avatarName : undefined,\n };\n}\n\nexport async function importAvatar(\n api: ApiClient,\n input: { userId: string; projectId: string; apiKey: string; avatarId: string },\n): Promise<AvatarImportResult> {\n const userId = requireIdentifier(input.userId, \"User ID\", isValidUserId);\n const projectId = requireIdentifier(input.projectId, \"Project ID\", isValidPublicIdentifier);\n const avatarId = requireIdentifier(input.avatarId, \"Avatar ID\", isValidAvatarId);\n const apiKey = input.apiKey.trim();\n if (!apiKey) throw new ApiError(\"An API key is required.\", 401, \"INVALID_API_KEY\");\n\n const value = await api.request<unknown>(`/cli/projects/${encodeURIComponent(projectId)}/avatars/import`, {\n method: \"POST\",\n headers: {\n Authorization: `Bearer ${apiKey}`,\n \"X-Asiyst-API-Key\": apiKey,\n },\n body: JSON.stringify({ userId, projectId, avatarId }),\n });\n return parseAvatarImportResponse(value, projectId, userId, avatarId);\n}\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 { openBrowser } from \"../browser/open.js\";\r\nimport { ASIIYST_WEB_URL } from \"../config/api.js\";\r\nimport { importAvatar } from \"../api/projects.js\";\r\nimport { ApiError } from \"../api/errors.js\";\r\nimport { loadConnection, saveConnection } from \"../config/credentials.js\";\r\nimport { isValidAvatarId } from \"../config/ids.js\";\r\nimport { readInput } from \"../ui/secret.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);\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 try {\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 await saveConnection(cwd, { ...stored, avatarId: result.avatarId });\r\n console.log(`✓ Avatar ${result.avatarId} imported into project ${result.projectId}.`);\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 === \"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(\"✗ 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 { homeStatus } from \"../ui/output.js\";\r\nimport { selectOption } from \"../ui/selector.js\";\r\nimport { readCurrentVersion } from \"../config/version.js\";\r\nimport { connectCommand } from \"./connect.js\";\r\nimport { disconnectCommand } from \"./disconnect.js\";\r\nimport { statusCommand } from \"./status.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 avatar import Import an avatar into the connected project\r\n status Show connection status\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 disconnect\r\n`);\r\n}\r\n\r\nexport async function interactiveHome(): Promise<void> {\r\n homeStatus();\r\n for (;;) {\r\n const result = await selectOption(\"What would you like to do?\", [\r\n { label: \"Connect\", value: \"connect\" },\r\n { label: \"Status\", value: \"status\" },\r\n { label: \"Help\", value: \"help\" },\r\n { label: \"Exit\", value: \"exit\" },\r\n ]);\r\n if (result.type !== \"selected\" || result.value === \"exit\") {\r\n break;\r\n }\r\n if (result.value === \"connect\") await connectCommand();\r\n else if (result.value === \"status\") await statusCommand();\r\n else if (result.value === \"help\") interactiveHelp();\r\n else if (result.value === \"version\") console.log(readCurrentVersion());\r\n }\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 { 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 { ApiClient } from \"../api/client.js\";\nimport { createApiClient } from \"./shared.js\";\n\nexport async function healthCommand(api: ApiClient = createApiClient()): Promise<void> {\n try {\n await api.health();\n console.log(\"✓ Asiyst API is reachable.\");\n } catch {\n console.log(\"✗ Unable to reach Asiyst API.\");\n }\n}\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(CLI_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","resolve","stdin","stdout","emitKeypressEvents","resolve","existsSync","mkdirSync","readFileSync","writeFileSync","homedir","join","resolve","asRecord","readFileSync","readFileSync","readFileSync","fileURLToPath"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@asiyst/cli",
3
- "version": "1.0.8",
4
- "description": "Connect and verify Asiyst SDK projects",
3
+ "version": "1.1.1",
4
+ "description": "Connect a local website project to Asiyst",
5
5
  "license": "MIT",
6
6
  "type": "module",
7
7
  "bin": {
@@ -12,6 +12,22 @@
12
12
  "README.md",
13
13
  "LICENSE"
14
14
  ],
15
+ "repository": {
16
+ "type": "git",
17
+ "url": "https://github.com/asiyst-ai/Asiyst-SDK-CLI.git",
18
+ "directory": "packages/cli"
19
+ },
20
+ "homepage": "https://asiyst.com",
21
+ "bugs": {
22
+ "url": "https://github.com/asiyst-ai/Asiyst-SDK-CLI/issues"
23
+ },
24
+ "keywords": [
25
+ "asiyst",
26
+ "cli"
27
+ ],
28
+ "publishConfig": {
29
+ "access": "public"
30
+ },
15
31
  "scripts": {
16
32
  "build": "tsup",
17
33
  "typecheck": "tsc --noEmit",