@asiyst/cli 1.0.1 → 1.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +41 -251
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -4,7 +4,6 @@
|
|
|
4
4
|
import { readFileSync } from "fs";
|
|
5
5
|
import { execFileSync } from "child_process";
|
|
6
6
|
import { fileURLToPath } from "url";
|
|
7
|
-
var PACKAGE_NAME = "@asiyst/cli";
|
|
8
7
|
var REGISTRY_URL = "https://registry.npmjs.org/%40asiyst%2Fcli/latest";
|
|
9
8
|
var UPDATE_ATTEMPTED = "ASIIYST_UPDATE_ATTEMPTED";
|
|
10
9
|
var TIMEOUT_MS = 1500;
|
|
@@ -70,251 +69,30 @@ async function checkForUpdate(currentVersion = readCurrentVersion(), fetcher = f
|
|
|
70
69
|
clearTimeout(timer);
|
|
71
70
|
}
|
|
72
71
|
}
|
|
73
|
-
function updateAndRestart(latestVersion, argv, env = process.env, runner = execFileSync) {
|
|
74
|
-
const executable = process.platform === "win32" ? "npx.cmd" : "npx";
|
|
75
|
-
try {
|
|
76
|
-
runner(executable, ["--yes", `${PACKAGE_NAME}@${latestVersion}`, ...argv], {
|
|
77
|
-
stdio: "inherit",
|
|
78
|
-
env: { ...env, [UPDATE_ATTEMPTED]: "1" }
|
|
79
|
-
});
|
|
80
|
-
return true;
|
|
81
|
-
} catch {
|
|
82
|
-
return false;
|
|
83
|
-
}
|
|
84
|
-
}
|
|
85
72
|
async function checkAndUpdate(argv, env = process.env) {
|
|
86
73
|
if (!shouldCheckForUpdate(env)) return false;
|
|
87
74
|
const result = await checkForUpdate(readCurrentVersion());
|
|
88
75
|
if (!result.latestVersion || compareVersions(result.latestVersion, result.currentVersion) <= 0) return false;
|
|
89
76
|
console.log(`
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
Updating Asiyst CLI...`);
|
|
95
|
-
const restarted = updateAndRestart(result.latestVersion, argv, env);
|
|
96
|
-
if (!restarted) console.log("\u26A0 Automatic update failed; continuing with the current version.");
|
|
97
|
-
return restarted;
|
|
77
|
+
Update available: ${result.currentVersion} \u2192 ${result.latestVersion}`);
|
|
78
|
+
console.log(` Run: npm install -g @asiyst/cli@${result.latestVersion}
|
|
79
|
+
`);
|
|
80
|
+
return false;
|
|
98
81
|
}
|
|
99
82
|
|
|
100
83
|
// src/ui/output.ts
|
|
101
|
-
var
|
|
102
|
-
var
|
|
103
|
-
var bold = `${E}1m`;
|
|
104
|
-
var dim = `${E}2m`;
|
|
105
|
-
var cyan = `${E}96m`;
|
|
106
|
-
var magenta = `${E}95m`;
|
|
107
|
-
var blue = `${E}94m`;
|
|
108
|
-
var yellow = `${E}93m`;
|
|
109
|
-
var green = `${E}92m`;
|
|
110
|
-
var white = `${E}97m`;
|
|
111
|
-
var gray = `${E}90m`;
|
|
112
|
-
var bgBlue = `${E}44m`;
|
|
113
|
-
function c(color, text) {
|
|
114
|
-
return `${color}${text}${reset}`;
|
|
115
|
-
}
|
|
116
|
-
function vlen(s) {
|
|
117
|
-
return s.replace(/\x1b\[[0-9;]*m/g, "").length;
|
|
118
|
-
}
|
|
119
|
-
function rpad(s, w) {
|
|
120
|
-
return s + " ".repeat(Math.max(0, w - vlen(s)));
|
|
121
|
-
}
|
|
122
|
-
var TL = "\u256D";
|
|
123
|
-
var TR = "\u256E";
|
|
124
|
-
var BL = "\u2570";
|
|
125
|
-
var BR = "\u256F";
|
|
126
|
-
var H = "\u2500";
|
|
127
|
-
var V = "\u2502";
|
|
128
|
-
function boxTop(w, col) {
|
|
129
|
-
return `${col}${TL}${H.repeat(w - 2)}${TR}${reset}`;
|
|
130
|
-
}
|
|
131
|
-
function boxBottom(w, col) {
|
|
132
|
-
return `${col}${BL}${H.repeat(w - 2)}${BR}${reset}`;
|
|
133
|
-
}
|
|
134
|
-
function boxRow(inner, w, col) {
|
|
135
|
-
const padded = rpad(inner, w - 4);
|
|
136
|
-
return `${col}${V}${reset} ${padded} ${col}${V}${reset}`;
|
|
137
|
-
}
|
|
138
|
-
var DOT_OK = c(green, "\u25CF");
|
|
139
|
-
var DOT_WARN = c(yellow, "\u25CF");
|
|
140
|
-
function asciiBanner() {
|
|
141
|
-
const rows = [
|
|
142
|
-
" \u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2557\u2588\u2588\u2557 \u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557",
|
|
143
|
-
"\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2557\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u2588\u2588\u2551\u255A\u2588\u2588\u2557 \u2588\u2588\u2554\u255D\u2588\u2588\u2554\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u2550\u2588\u2588\u2554\u2550\u2550\u255D",
|
|
144
|
-
"\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557\u2588\u2588\u2551 \u255A\u2588\u2588\u2588\u2588\u2554\u255D \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2557 \u2588\u2588\u2551 ",
|
|
145
|
-
"\u2588\u2588\u2554\u2550\u2550\u2588\u2588\u2551\u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551\u2588\u2588\u2551 \u255A\u2588\u2588\u2554\u255D \u255A\u2550\u2550\u2550\u2550\u2588\u2588\u2551 \u2588\u2588\u2551 ",
|
|
146
|
-
"\u2588\u2588\u2551 \u2588\u2588\u2551\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551\u2588\u2588\u2551 \u2588\u2588\u2551 \u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2551 \u2588\u2588\u2551 ",
|
|
147
|
-
"\u255A\u2550\u255D \u255A\u2550\u255D\u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D\u255A\u2550\u255D \u255A\u2550\u255D \u255A\u2550\u2550\u2550\u2550\u2550\u2550\u255D \u255A\u2550\u255D "
|
|
148
|
-
];
|
|
149
|
-
const cols = [cyan, cyan, `${E}96m`, `${E}35m`, magenta, magenta];
|
|
150
|
-
return rows.map((r, i) => `${bold}${cols[i]}${r}${reset}`).join("\n");
|
|
151
|
-
}
|
|
152
|
-
function tipsPanel() {
|
|
153
|
-
const w = 42;
|
|
154
|
-
const bc = blue;
|
|
155
|
-
return [
|
|
156
|
-
boxTop(w, bc),
|
|
157
|
-
boxRow(`${c(yellow, "\u{1F4A1} Tips")}`, w, bc),
|
|
158
|
-
boxRow("", w, bc),
|
|
159
|
-
boxRow("Type natural language or a command.", w, bc),
|
|
160
|
-
boxRow("Examples:", w, bc),
|
|
161
|
-
boxRow(` ${c(gray, ">")} connect my website`, w, bc),
|
|
162
|
-
boxRow(` ${c(gray, ">")} check installation`, w, bc),
|
|
163
|
-
boxRow(` ${c(gray, ">")} open dashboard`, w, bc),
|
|
164
|
-
boxRow(` ${c(gray, ">")} run diagnostics`, w, bc),
|
|
165
|
-
boxRow("", w, bc),
|
|
166
|
-
boxRow(`Type ${c(cyan, "'help'")} to see all commands.`, w, bc),
|
|
167
|
-
boxRow("", w, bc),
|
|
168
|
-
boxBottom(w, bc)
|
|
169
|
-
];
|
|
170
|
-
}
|
|
171
|
-
function headerSection(version) {
|
|
172
|
-
const banner2 = asciiBanner().split("\n");
|
|
173
|
-
const logoLines = [
|
|
174
|
-
` ${bold}${cyan}\u{1F916}${reset}`,
|
|
175
|
-
"",
|
|
176
|
-
...banner2,
|
|
177
|
-
"",
|
|
178
|
-
` ${c(dim + white, "AI ASSISTANT PLATFORM")}`,
|
|
179
|
-
` ${c(dim, "v" + version)}`
|
|
180
|
-
];
|
|
181
|
-
const tips = tipsPanel();
|
|
182
|
-
const maxLines = Math.max(logoLines.length, tips.length);
|
|
183
|
-
const rows = [];
|
|
184
|
-
for (let i = 0; i < maxLines; i++) {
|
|
185
|
-
const left = logoLines[i] ?? "";
|
|
186
|
-
const right = tips[i] ?? "";
|
|
187
|
-
const leftPad = left + " ".repeat(Math.max(0, 62 - vlen(left)));
|
|
188
|
-
rows.push(`${leftPad} ${right}`);
|
|
189
|
-
}
|
|
190
|
-
return rows.join("\n");
|
|
191
|
-
}
|
|
192
|
-
function projectStatusPanel(project) {
|
|
193
|
-
const w = 52;
|
|
194
|
-
const bc = blue;
|
|
195
|
-
const projName = typeof project.packageJson?.name === "string" ? project.packageJson.name : "Not detected";
|
|
196
|
-
const deps = Object.assign(
|
|
197
|
-
{},
|
|
198
|
-
project.packageJson?.["dependencies"],
|
|
199
|
-
project.packageJson?.["devDependencies"]
|
|
200
|
-
);
|
|
201
|
-
const fwVer = (typeof deps["next"] === "string" ? `Next.js ${deps["next"].toString().replace(/^[^0-9]/, "")}` : null) || (typeof deps["react"] === "string" ? `React ${deps["react"].toString().replace(/^[^0-9]/, "")}` : null) || (typeof deps["vite"] === "string" ? `Vite ${deps["vite"].toString().replace(/^[^0-9]/, "")}` : null) || (typeof deps["vue"] === "string" ? `Vue ${deps["vue"].toString().replace(/^[^0-9]/, "")}` : null) || project.framework;
|
|
202
|
-
const sdkOk = Boolean(project.sdkVersion);
|
|
203
|
-
function row(icon, label, value, ok2 = true) {
|
|
204
|
-
const inner = `${icon} ${c(cyan, label.padEnd(16))} ${c(white, value)} ${ok2 ? DOT_OK : DOT_WARN}`;
|
|
205
|
-
return boxRow(inner, w, bc);
|
|
206
|
-
}
|
|
207
|
-
return [
|
|
208
|
-
boxTop(w, bc),
|
|
209
|
-
boxRow(`${bold}${blue}\u{1F4C1} PROJECT STATUS${reset}`, w, bc),
|
|
210
|
-
boxRow("", w, bc),
|
|
211
|
-
row("\u{1F4C2}", "Project", projName),
|
|
212
|
-
row("\u24C3", "Framework", fwVer),
|
|
213
|
-
row("TS", "Language", project.language),
|
|
214
|
-
row("\u{1F7E2}", "Node.js", process.version),
|
|
215
|
-
row("\u{1F4E6}", "Package Manager", project.packageManager),
|
|
216
|
-
row("\u{1F916}", "@asiyst/sdk", project.sdkVersion ?? "Not installed", sdkOk),
|
|
217
|
-
boxRow("", w, bc),
|
|
218
|
-
boxBottom(w, bc)
|
|
219
|
-
];
|
|
220
|
-
}
|
|
221
|
-
function asiystStatusPanel(project, connection = "Not connected") {
|
|
222
|
-
const w = 48;
|
|
223
|
-
const bc = blue;
|
|
224
|
-
const connected = connection !== "Not connected";
|
|
225
|
-
const connVal = connected ? c(green, connection) : c(yellow, "Not connected");
|
|
226
|
-
const projId = project.config.projectId ?? c(gray, "\u2014");
|
|
227
|
-
function row(icon, label, value, warn = false) {
|
|
228
|
-
const inner = `${icon} ${c(cyan, label.padEnd(13))} ${value} ${warn ? DOT_WARN : ""}`;
|
|
229
|
-
return boxRow(inner, w, bc);
|
|
230
|
-
}
|
|
231
|
-
return [
|
|
232
|
-
boxTop(w, bc),
|
|
233
|
-
boxRow(`${bold}${blue}\u{1F916} ASIYST STATUS${reset}`, w, bc),
|
|
234
|
-
boxRow("", w, bc),
|
|
235
|
-
row("\u{1F517}", "Connection", connVal, !connected),
|
|
236
|
-
row("\u{1F464}", "Avatar", c(yellow, "Not configured"), true),
|
|
237
|
-
row("\u{1F310}", "AI Provider", c(yellow, "Not configured"), true),
|
|
238
|
-
row("\u{1FAAA}", "Project ID", projId, false),
|
|
239
|
-
row("\u{1F4BB}", "Environment", c(blue, "development"), false),
|
|
240
|
-
boxRow("", w, bc),
|
|
241
|
-
boxBottom(w, bc)
|
|
242
|
-
];
|
|
243
|
-
}
|
|
244
|
-
function twoColumns(left, right) {
|
|
245
|
-
const maxLen = Math.max(left.length, right.length);
|
|
246
|
-
const rows = [];
|
|
247
|
-
for (let i = 0; i < maxLen; i++) {
|
|
248
|
-
const l = left[i] ?? " ".repeat(52);
|
|
249
|
-
const r = right[i] ?? "";
|
|
250
|
-
rows.push(`${l} ${r}`);
|
|
251
|
-
}
|
|
252
|
-
return rows.join("\n");
|
|
253
|
-
}
|
|
254
|
-
function welcomeBox() {
|
|
255
|
-
const w = 104;
|
|
256
|
-
const bc = blue;
|
|
257
|
-
return [
|
|
258
|
-
boxTop(w, bc),
|
|
259
|
-
boxRow(`${bold}${white}Welcome to Asiyst CLI! \u{1F44B}${reset}`, w, bc),
|
|
260
|
-
boxRow(`I can help you connect, configure, and manage your Asiyst assistant.`, w, bc),
|
|
261
|
-
boxRow(`What would you like to do?`, w, bc),
|
|
262
|
-
boxRow("", w, bc),
|
|
263
|
-
boxBottom(w, bc)
|
|
264
|
-
].join("\n");
|
|
265
|
-
}
|
|
266
|
-
function suggestionsBar() {
|
|
267
|
-
const chips = ["connect", "status", "diagnostics", "dashboard", "avatar", "help"].map((s) => `${bgBlue}${white} ${s} ${reset}`);
|
|
268
|
-
return `${c(gray, "Suggestions:")} ${chips.join(" ")}`;
|
|
269
|
-
}
|
|
270
|
-
function statusBar() {
|
|
271
|
-
const time = (/* @__PURE__ */ new Date()).toLocaleTimeString("en-US", { hour: "2-digit", minute: "2-digit" });
|
|
272
|
-
const leftParts = [
|
|
273
|
-
`${c(gray, "\u2191\u2193")} Navigate`,
|
|
274
|
-
`${c(gray, "Enter")} Select`,
|
|
275
|
-
`${c(gray, "Ctrl+C")} Cancel`,
|
|
276
|
-
`${c(gray, "Tab")} Autocomplete`,
|
|
277
|
-
`${c(gray, "?")} Help`,
|
|
278
|
-
`${c(gray, "Ctrl+L")} Clear`,
|
|
279
|
-
`${c(gray, "Ctrl+D")} Exit`
|
|
280
|
-
];
|
|
281
|
-
const left = leftParts.join(" ");
|
|
282
|
-
const right = `${DOT_OK} Online ${c(white, time)}`;
|
|
283
|
-
const totalW = 104;
|
|
284
|
-
const gap = Math.max(2, totalW - vlen(left) - vlen(right));
|
|
285
|
-
return `${E}40m${left}${" ".repeat(gap)}${right}${reset}`;
|
|
286
|
-
}
|
|
287
|
-
function homeScreen(project, connection = "Not connected") {
|
|
288
|
-
const version = readCurrentVersion();
|
|
289
|
-
const divider = c(gray, "\u2500".repeat(104));
|
|
290
|
-
console.log("");
|
|
291
|
-
console.log(headerSection(version));
|
|
292
|
-
console.log("");
|
|
293
|
-
console.log(divider);
|
|
294
|
-
console.log("");
|
|
295
|
-
console.log(twoColumns(projectStatusPanel(project), asiystStatusPanel(project, connection)));
|
|
296
|
-
console.log("");
|
|
297
|
-
console.log(welcomeBox());
|
|
298
|
-
console.log("");
|
|
299
|
-
console.log(suggestionsBar());
|
|
300
|
-
console.log("");
|
|
301
|
-
console.log(statusBar());
|
|
302
|
-
console.log("");
|
|
303
|
-
}
|
|
304
|
-
var ok = (label, detail = "") => console.log(`${c(green, "\u2713")} ${label}${detail ? c(gray, ` (${detail})`) : ""}`);
|
|
305
|
-
var fail = (label, detail = "") => console.log(`${c(yellow, "\u2717")} ${label}${detail ? c(gray, `: ${detail}`) : ""}`);
|
|
84
|
+
var ok = (label, detail = "") => console.log(` \u2713 ${label}${detail ? ` (${detail})` : ""}`);
|
|
85
|
+
var fail = (label, detail = "") => console.log(` \u2717 ${label}${detail ? `: ${detail}` : ""}`);
|
|
306
86
|
function banner(version = readCurrentVersion()) {
|
|
307
|
-
console.log(
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
311
|
-
|
|
312
|
-
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
`
|
|
317
|
-
);
|
|
87
|
+
console.log(`
|
|
88
|
+
\u256D\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256E
|
|
89
|
+
\u2502 \u2502
|
|
90
|
+
\u2502 ASIYST CLI \u2502
|
|
91
|
+
\u2502 AI Assistant Platform \u2502
|
|
92
|
+
\u2502 v${version.padEnd(37)}\u2502
|
|
93
|
+
\u2502 \u2502
|
|
94
|
+
\u2570\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u256F
|
|
95
|
+
`);
|
|
318
96
|
}
|
|
319
97
|
function projectChecks(project) {
|
|
320
98
|
project.packageJson ? ok("Project detected", typeof project.packageJson.name === "string" ? project.packageJson.name : project.cwd) : fail("Project not detected", "package.json is missing");
|
|
@@ -325,19 +103,25 @@ function projectChecks(project) {
|
|
|
325
103
|
project.sdkVersion ? ok("@asiyst/sdk detected", project.sdkVersion) : fail("@asiyst/sdk is not installed", "npm install @asiyst/sdk");
|
|
326
104
|
}
|
|
327
105
|
function homeStatus(project, connection = "Not connected") {
|
|
328
|
-
|
|
106
|
+
console.log("\n PROJECT STATUS");
|
|
107
|
+
console.log(` Project ${typeof project.packageJson?.name === "string" ? project.packageJson.name : "Not detected"}`);
|
|
108
|
+
console.log(` Framework ${project.framework}`);
|
|
109
|
+
console.log(` Language ${project.language}`);
|
|
110
|
+
console.log(` Node.js ${process.version}`);
|
|
111
|
+
console.log(` Package Manager ${project.packageManager}`);
|
|
112
|
+
console.log(` @asiyst/sdk ${project.sdkVersion || "Not installed"}`);
|
|
113
|
+
console.log("\n ASIYST STATUS");
|
|
114
|
+
console.log(` Connection ${connection}`);
|
|
115
|
+
console.log(` Avatar Not configured`);
|
|
116
|
+
console.log(` AI Provider Not configured`);
|
|
117
|
+
console.log(` Project ID ${project.config.projectId || "\u2014"}`);
|
|
118
|
+
if (connection === "Not connected") console.log("\n Run 'connect' to link this project.");
|
|
329
119
|
}
|
|
330
120
|
function printVerification(results) {
|
|
331
|
-
console.log(
|
|
332
|
-
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
result.ok ? ok(result.name, result.detail) : fail(result.name, result.detail ?? "");
|
|
336
|
-
const success = results.length > 0 && results.every((r) => r.ok);
|
|
337
|
-
if (success) console.log(`
|
|
338
|
-
${c(cyan, "\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500")}
|
|
339
|
-
|
|
340
|
-
${c(green, bold + "ASIYST IS READY \u2713" + reset)}`);
|
|
121
|
+
console.log("\n Asiyst Installation Verification\n");
|
|
122
|
+
for (const result of results) result.ok ? ok(result.name, result.detail) : fail(result.name, result.detail);
|
|
123
|
+
const success = results.length > 0 && results.every((result) => result.ok);
|
|
124
|
+
if (success) console.log("\n \u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\u2500\n\n ASIYST IS READY \u2713");
|
|
341
125
|
return success;
|
|
342
126
|
}
|
|
343
127
|
|
|
@@ -721,14 +505,20 @@ function interactiveHelp() {
|
|
|
721
505
|
console.log("\nASIYST CLI\n\nUsage: asiyst [command]\n\nCore Commands\n connect Connect this project to Asiyst\n status Show project and connection status\n diagnostics Diagnose installation problems\n dashboard Open Asiyst dashboard\n avatar Manage avatar configuration\n help Show available commands\n version Show CLI version\n trust Trust this project folder\n revoke-trust Revoke folder trust\n\nExamples\n asiyst connect\n asiyst status\n asiyst diagnostics\n asiyst dashboard");
|
|
722
506
|
}
|
|
723
507
|
async function interactiveHome() {
|
|
508
|
+
const trusted = await ensureTrusted();
|
|
509
|
+
if (!trusted) return;
|
|
724
510
|
const project = detectProject();
|
|
725
511
|
homeStatus(project);
|
|
512
|
+
console.log("\n Welcome to Asiyst CLI!");
|
|
513
|
+
console.log(" I can help you connect, configure, and manage your Asiyst assistant.");
|
|
514
|
+
console.log(" What would you like to do?\n");
|
|
515
|
+
console.log(" Suggestions: [connect] [status] [diagnostics] [dashboard] [avatar] [help]\n");
|
|
726
516
|
const readline = createInterface2({ input: input2, output: output2, historySize: 50, completer: (line) => [commands.filter((item) => item.startsWith(line)), line] });
|
|
727
517
|
readline.on("SIGINT", () => readline.close());
|
|
728
518
|
for (; ; ) {
|
|
729
519
|
let value;
|
|
730
520
|
try {
|
|
731
|
-
value = await readline.question("
|
|
521
|
+
value = await readline.question("> ");
|
|
732
522
|
} catch {
|
|
733
523
|
break;
|
|
734
524
|
}
|
|
@@ -744,8 +534,8 @@ async function interactiveHome() {
|
|
|
744
534
|
else if (command === "revoke-trust") revokeTrustCommand();
|
|
745
535
|
else if (command === "help") interactiveHelp();
|
|
746
536
|
else if (command === "version") console.log(readCurrentVersion());
|
|
747
|
-
else console.log(
|
|
748
|
-
Run
|
|
537
|
+
else console.log(`Unknown command: ${value}
|
|
538
|
+
Run 'asiyst help' for available commands.`);
|
|
749
539
|
}
|
|
750
540
|
readline.close();
|
|
751
541
|
}
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/update/check.ts","../src/ui/output.ts","../src/detection/project.ts","../src/api/client.ts","../src/config/local.ts","../src/commands/shared.ts","../src/browser/open.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/commands/interactive.ts","../src/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\r\nimport { execFileSync } from \"node:child_process\";\r\nimport { fileURLToPath } from \"node:url\";\r\n\r\nconst PACKAGE_NAME = \"@asiyst/cli\";\r\nconst REGISTRY_URL = \"https://registry.npmjs.org/%40asiyst%2Fcli/latest\";\r\nconst UPDATE_ATTEMPTED = \"ASIIYST_UPDATE_ATTEMPTED\";\r\nconst TIMEOUT_MS = 1500;\r\n\r\nexport interface UpdateCheckResult {\r\n currentVersion: string;\r\n latestVersion?: string;\r\n}\r\n\r\nexport function readCurrentVersion(): string {\r\n for (const packageUrl of [new URL(\"../package.json\", import.meta.url), new URL(\"../../package.json\", import.meta.url)]) {\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 // Source execution and bundled execution resolve package metadata at different levels.\r\n }\r\n }\r\n return \"0.2.0\";\r\n}\r\n\r\nfunction versionParts(version: string): { numbers: number[]; prerelease: string[] } | undefined {\r\n const match = /^[v=]?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(version.trim());\r\n if (!match) return undefined;\r\n return { numbers: [Number(match[1]), Number(match[2]), Number(match[3])], prerelease: match[4]?.split(\".\") ?? [] };\r\n}\r\n\r\nexport function compareVersions(left: string, right: string): number {\r\n const a = versionParts(left);\r\n const b = versionParts(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 function isCiEnvironment(env: NodeJS.ProcessEnv = process.env): boolean {\r\n return env.CI === \"true\" || env.CI === \"1\" || Boolean(env.GITHUB_ACTIONS || env.BUILD_ID || env.TF_BUILD);\r\n}\r\n\r\nexport function shouldCheckForUpdate(env: NodeJS.ProcessEnv = process.env, isTTY = Boolean(process.stdout.isTTY)): boolean {\r\n return !isCiEnvironment(env) && isTTY && env[UPDATE_ATTEMPTED] !== \"1\";\r\n}\r\n\r\nexport async function checkForUpdate(\r\n currentVersion = readCurrentVersion(),\r\n fetcher: typeof fetch = fetch,\r\n): Promise<UpdateCheckResult> {\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 && versionParts(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 function updateAndRestart(\r\n latestVersion: string,\r\n argv: string[],\r\n env: NodeJS.ProcessEnv = process.env,\r\n runner: typeof execFileSync = execFileSync,\r\n): boolean {\r\n const executable = process.platform === \"win32\" ? \"npx.cmd\" : \"npx\";\r\n try {\r\n runner(executable, [\"--yes\", `${PACKAGE_NAME}@${latestVersion}`, ...argv], {\r\n stdio: \"inherit\",\r\n env: { ...env, [UPDATE_ATTEMPTED]: \"1\" },\r\n });\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport async function checkAndUpdate(argv: string[], env: NodeJS.ProcessEnv = process.env): Promise<boolean> {\r\n if (!shouldCheckForUpdate(env)) return false;\r\n const result = await checkForUpdate(readCurrentVersion());\r\n if (!result.latestVersion || compareVersions(result.latestVersion, result.currentVersion) <= 0) return false;\r\n console.log(`\\nA new version of Asiyst CLI is available.\\n\\n${result.currentVersion} → ${result.latestVersion}\\n\\nUpdating Asiyst CLI...`);\r\n const restarted = updateAndRestart(result.latestVersion, argv, env);\r\n if (!restarted) console.log(\"⚠ Automatic update failed; continuing with the current version.\");\r\n return restarted;\r\n}\r\n","import type { ProjectDetection, VerificationResult } from \"../types.js\";\r\nimport { readCurrentVersion } from \"../update/check.js\";\r\n\r\n// ─── ANSI colour helpers ──────────────────────────────────────────────────────\r\nconst E = \"\\x1b[\";\r\nconst reset = `${E}0m`;\r\nconst bold = `${E}1m`;\r\nconst dim = `${E}2m`;\r\nconst cyan = `${E}96m`;\r\nconst magenta = `${E}95m`;\r\nconst blue = `${E}94m`;\r\nconst yellow = `${E}93m`;\r\nconst green = `${E}92m`;\r\nconst white = `${E}97m`;\r\nconst gray = `${E}90m`;\r\nconst bgBlue = `${E}44m`;\r\n\r\nfunction c(color: string, text: string): string {\r\n return `${color}${text}${reset}`;\r\n}\r\n\r\n// ─── Visible-length helper (strips ANSI) ─────────────────────────────────────\r\nfunction vlen(s: string): number {\r\n return s.replace(/\\x1b\\[[0-9;]*m/g, \"\").length;\r\n}\r\n\r\nfunction rpad(s: string, w: number): string {\r\n return s + \" \".repeat(Math.max(0, w - vlen(s)));\r\n}\r\n\r\n// ─── Box-drawing helpers ─────────────────────────────────────────────────────\r\nconst TL = \"╭\", TR = \"╮\", BL = \"╰\", BR = \"╯\", H = \"─\", V = \"│\";\r\n\r\nfunction boxTop(w: number, col: string) { return `${col}${TL}${H.repeat(w - 2)}${TR}${reset}`; }\r\nfunction boxBottom(w: number, col: string) { return `${col}${BL}${H.repeat(w - 2)}${BR}${reset}`; }\r\nfunction boxRow(inner: string, w: number, col: string): string {\r\n const padded = rpad(inner, w - 4);\r\n return `${col}${V}${reset} ${padded} ${col}${V}${reset}`;\r\n}\r\n\r\n// ─── Status dot ───────────────────────────────────────────────────────────────\r\nconst DOT_OK = c(green, \"●\");\r\nconst DOT_WARN = c(yellow, \"●\");\r\n\r\n// ─── ASCII art ASIYST logo ────────────────────────────────────────────────────\r\nfunction asciiBanner(): string {\r\n const rows = [\r\n \" █████╗ ███████╗██╗██╗ ██╗███████╗████████╗\",\r\n \"██╔══██╗██╔════╝██║╚██╗ ██╔╝██╔════╝╚══██╔══╝\",\r\n \"███████║███████╗██║ ╚████╔╝ ███████╗ ██║ \",\r\n \"██╔══██║╚════██║██║ ╚██╔╝ ╚════██║ ██║ \",\r\n \"██║ ██║███████║██║ ██║ ███████║ ██║ \",\r\n \"╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ╚══════╝ ╚═╝ \",\r\n ];\r\n const cols = [cyan, cyan, `${E}96m`, `${E}35m`, magenta, magenta];\r\n return rows.map((r, i) => `${bold}${cols[i]}${r}${reset}`).join(\"\\n\");\r\n}\r\n\r\n// ─── Tips panel ───────────────────────────────────────────────────────────────\r\nfunction tipsPanel(): string[] {\r\n const w = 42;\r\n const bc = blue;\r\n return [\r\n boxTop(w, bc),\r\n boxRow(`${c(yellow, \"💡 Tips\")}`, w, bc),\r\n boxRow(\"\", w, bc),\r\n boxRow(\"Type natural language or a command.\", w, bc),\r\n boxRow(\"Examples:\", w, bc),\r\n boxRow(` ${c(gray, \">\")} connect my website`, w, bc),\r\n boxRow(` ${c(gray, \">\")} check installation`, w, bc),\r\n boxRow(` ${c(gray, \">\")} open dashboard`, w, bc),\r\n boxRow(` ${c(gray, \">\")} run diagnostics`, w, bc),\r\n boxRow(\"\", w, bc),\r\n boxRow(`Type ${c(cyan, \"'help'\")} to see all commands.`, w, bc),\r\n boxRow(\"\", w, bc),\r\n boxBottom(w, bc),\r\n ];\r\n}\r\n\r\n// ─── Header section (logo + tips side by side) ───────────────────────────────\r\nfunction headerSection(version: string): string {\r\n const banner = asciiBanner().split(\"\\n\");\r\n const logoLines: string[] = [\r\n ` ${bold}${cyan}🤖${reset}`,\r\n \"\",\r\n ...banner,\r\n \"\",\r\n ` ${c(dim + white, \"AI ASSISTANT PLATFORM\")}`,\r\n ` ${c(dim, \"v\" + version)}`,\r\n ];\r\n const tips = tipsPanel();\r\n const maxLines = Math.max(logoLines.length, tips.length);\r\n const rows: string[] = [];\r\n for (let i = 0; i < maxLines; i++) {\r\n const left = logoLines[i] ?? \"\";\r\n const right = tips[i] ?? \"\";\r\n // Pad left to 62 visible chars\r\n const leftPad = left + \" \".repeat(Math.max(0, 62 - vlen(left)));\r\n rows.push(`${leftPad} ${right}`);\r\n }\r\n return rows.join(\"\\n\");\r\n}\r\n\r\n// ─── PROJECT STATUS panel ─────────────────────────────────────────────────────\r\nfunction projectStatusPanel(project: ProjectDetection): string[] {\r\n const w = 52;\r\n const bc = blue;\r\n\r\n const projName = typeof project.packageJson?.name === \"string\"\r\n ? project.packageJson.name : \"Not detected\";\r\n\r\n const deps: Record<string, unknown> = Object.assign(\r\n {},\r\n (project.packageJson as Record<string, unknown> | null)?.[\"dependencies\"],\r\n (project.packageJson as Record<string, unknown> | null)?.[\"devDependencies\"],\r\n );\r\n const fwVer =\r\n (typeof deps[\"next\"] === \"string\" ? `Next.js ${deps[\"next\"].toString().replace(/^[^0-9]/, \"\")}` : null) ||\r\n (typeof deps[\"react\"] === \"string\" ? `React ${deps[\"react\"].toString().replace(/^[^0-9]/, \"\")}` : null) ||\r\n (typeof deps[\"vite\"] === \"string\" ? `Vite ${deps[\"vite\"].toString().replace(/^[^0-9]/, \"\")}` : null) ||\r\n (typeof deps[\"vue\"] === \"string\" ? `Vue ${deps[\"vue\"].toString().replace(/^[^0-9]/, \"\")}` : null) ||\r\n project.framework;\r\n\r\n const sdkOk = Boolean(project.sdkVersion);\r\n\r\n function row(icon: string, label: string, value: string, ok = true): string {\r\n const inner = `${icon} ${c(cyan, label.padEnd(16))} ${c(white, value)} ${ok ? DOT_OK : DOT_WARN}`;\r\n return boxRow(inner, w, bc);\r\n }\r\n\r\n return [\r\n boxTop(w, bc),\r\n boxRow(`${bold}${blue}📁 PROJECT STATUS${reset}`, w, bc),\r\n boxRow(\"\", w, bc),\r\n row(\"📂\", \"Project\", projName),\r\n row(\"Ⓝ\", \"Framework\", fwVer),\r\n row(\"TS\", \"Language\", project.language),\r\n row(\"🟢\", \"Node.js\", process.version),\r\n row(\"📦\", \"Package Manager\", project.packageManager),\r\n row(\"🤖\", \"@asiyst/sdk\", project.sdkVersion ?? \"Not installed\", sdkOk),\r\n boxRow(\"\", w, bc),\r\n boxBottom(w, bc),\r\n ];\r\n}\r\n\r\n// ─── ASIYST STATUS panel ──────────────────────────────────────────────────────\r\nfunction asiystStatusPanel(project: ProjectDetection, connection = \"Not connected\"): string[] {\r\n const w = 48;\r\n const bc = blue;\r\n const connected = connection !== \"Not connected\";\r\n const connVal = connected ? c(green, connection) : c(yellow, \"Not connected\");\r\n const projId = project.config.projectId ?? c(gray, \"—\");\r\n\r\n function row(icon: string, label: string, value: string, warn = false): string {\r\n const inner = `${icon} ${c(cyan, label.padEnd(13))} ${value} ${warn ? DOT_WARN : \"\"}`;\r\n return boxRow(inner, w, bc);\r\n }\r\n\r\n return [\r\n boxTop(w, bc),\r\n boxRow(`${bold}${blue}🤖 ASIYST STATUS${reset}`, w, bc),\r\n boxRow(\"\", w, bc),\r\n row(\"🔗\", \"Connection\", connVal, !connected),\r\n row(\"👤\", \"Avatar\", c(yellow, \"Not configured\"), true),\r\n row(\"🌐\", \"AI Provider\", c(yellow, \"Not configured\"), true),\r\n row(\"🪪\", \"Project ID\", projId, false),\r\n row(\"💻\", \"Environment\", c(blue, \"development\"), false),\r\n boxRow(\"\", w, bc),\r\n boxBottom(w, bc),\r\n ];\r\n}\r\n\r\n// ─── Two-column layout ────────────────────────────────────────────────────────\r\nfunction twoColumns(left: string[], right: string[]): string {\r\n const maxLen = Math.max(left.length, right.length);\r\n const rows: string[] = [];\r\n for (let i = 0; i < maxLen; i++) {\r\n const l = left[i] ?? \" \".repeat(52);\r\n const r = right[i] ?? \"\";\r\n rows.push(`${l} ${r}`);\r\n }\r\n return rows.join(\"\\n\");\r\n}\r\n\r\n// ─── Welcome message box ──────────────────────────────────────────────────────\r\nfunction welcomeBox(): string {\r\n const w = 104;\r\n const bc = blue;\r\n return [\r\n boxTop(w, bc),\r\n boxRow(`${bold}${white}Welcome to Asiyst CLI! 👋${reset}`, w, bc),\r\n boxRow(`I can help you connect, configure, and manage your Asiyst assistant.`, w, bc),\r\n boxRow(`What would you like to do?`, w, bc),\r\n boxRow(\"\", w, bc),\r\n boxBottom(w, bc),\r\n ].join(\"\\n\");\r\n}\r\n\r\n// ─── Suggestions bar ──────────────────────────────────────────────────────────\r\nfunction suggestionsBar(): string {\r\n const chips = [\"connect\", \"status\", \"diagnostics\", \"dashboard\", \"avatar\", \"help\"]\r\n .map((s) => `${bgBlue}${white} ${s} ${reset}`);\r\n return `${c(gray, \"Suggestions:\")} ${chips.join(\" \")}`;\r\n}\r\n\r\n// ─── Bottom status bar ────────────────────────────────────────────────────────\r\nfunction statusBar(): string {\r\n const time = new Date().toLocaleTimeString(\"en-US\", { hour: \"2-digit\", minute: \"2-digit\" });\r\n const leftParts = [\r\n `${c(gray, \"↑↓\")} Navigate`,\r\n `${c(gray, \"Enter\")} Select`,\r\n `${c(gray, \"Ctrl+C\")} Cancel`,\r\n `${c(gray, \"Tab\")} Autocomplete`,\r\n `${c(gray, \"?\")} Help`,\r\n `${c(gray, \"Ctrl+L\")} Clear`,\r\n `${c(gray, \"Ctrl+D\")} Exit`,\r\n ];\r\n const left = leftParts.join(\" \");\r\n const right = `${DOT_OK} Online ${c(white, time)}`;\r\n const totalW = 104;\r\n const gap = Math.max(2, totalW - vlen(left) - vlen(right));\r\n return `${E}40m${left}${\" \".repeat(gap)}${right}${reset}`;\r\n}\r\n\r\n// ─── Full home screen (called by interactiveHome) ─────────────────────────────\r\nexport function homeScreen(project: ProjectDetection, connection = \"Not connected\"): void {\r\n const version = readCurrentVersion();\r\n const divider = c(gray, \"─\".repeat(104));\r\n console.log(\"\");\r\n console.log(headerSection(version));\r\n console.log(\"\");\r\n console.log(divider);\r\n console.log(\"\");\r\n console.log(twoColumns(projectStatusPanel(project), asiystStatusPanel(project, connection)));\r\n console.log(\"\");\r\n console.log(welcomeBox());\r\n console.log(\"\");\r\n console.log(suggestionsBar());\r\n console.log(\"\");\r\n console.log(statusBar());\r\n console.log(\"\");\r\n}\r\n\r\n// ─── Kept exports (used by other commands) ────────────────────────────────────\r\nexport const ok = (label: string, detail = \"\") =>\r\n console.log(`${c(green, \"✓\")} ${label}${detail ? c(gray, ` (${detail})`) : \"\"}`);\r\nexport const fail = (label: string, detail = \"\") =>\r\n console.log(`${c(yellow, \"✗\")} ${label}${detail ? c(gray, `: ${detail}`) : \"\"}`);\r\n\r\nexport function banner(version = readCurrentVersion()): void {\r\n console.log(\r\n `\\n${bold}${cyan}╭──────────────────────────────────────────────╮${reset}\\n` +\r\n `${cyan}│${reset} ${cyan}│${reset}\\n` +\r\n `${cyan}│${reset} ${bold}ASIYST${reset} ${cyan}│${reset}\\n` +\r\n `${cyan}│${reset} AI ASSISTANT PLATFORM ${cyan}│${reset}\\n` +\r\n `${cyan}│${reset} v${version.padEnd(38)}${cyan}│${reset}\\n` +\r\n `${cyan}│${reset} ${cyan}│${reset}\\n` +\r\n `${cyan}╰──────────────────────────────────────────────╯${reset}\\n`,\r\n );\r\n}\r\n\r\nexport function projectChecks(project: ProjectDetection): void {\r\n project.packageJson\r\n ? ok(\"Project detected\", typeof project.packageJson.name === \"string\" ? project.packageJson.name : project.cwd)\r\n : fail(\"Project not detected\", \"package.json is missing\");\r\n ok(\"Framework detected\", project.framework);\r\n ok(\"Language detected\", project.language);\r\n ok(\"Node.js detected\", process.version);\r\n ok(\"Package manager detected\", project.packageManager);\r\n project.sdkVersion\r\n ? ok(\"@asiyst/sdk detected\", project.sdkVersion)\r\n : fail(\"@asiyst/sdk is not installed\", \"npm install @asiyst/sdk\");\r\n}\r\n\r\nexport function homeStatus(project: ProjectDetection, connection = \"Not connected\"): void {\r\n homeScreen(project, connection);\r\n}\r\n\r\nexport function printVerification(results: VerificationResult[]): boolean {\r\n console.log(`\\n${bold}Asiyst Installation Verification${reset}\\n`);\r\n for (const result of results)\r\n result.ok ? ok(result.name, result.detail) : fail(result.name, result.detail ?? \"\");\r\n const success = results.length > 0 && results.every((r) => r.ok);\r\n if (success) console.log(`\\n${c(cyan, \"────────────────────────────\")}\\n\\n${c(green, bold + \"ASIYST IS READY ✓\" + reset)}`);\r\n return success;\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\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\nfunction readEnv(cwd: string): Record<string, string> {\r\n const result: Record<string, string> = {};\r\n const path = resolve(cwd, \".env\");\r\n if (!existsSync(path)) return result;\r\n for (const line of readFileSync(path, \"utf8\").split(/\\r?\\n/)) {\r\n const match = /^\\s*(?:export\\s+)?([A-Z0-9_]+)\\s*=\\s*(.*?)\\s*$/.exec(line);\r\n if (match && !match[1].toLowerCase().includes(\"secret\") && !match[1].toLowerCase().includes(\"token\")) {\r\n result[match[1]] = match[2].replace(/^(['\"])(.*)\\1$/, \"$2\");\r\n }\r\n }\r\n return result;\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 = { ...readEnv(cwd), ...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 { CliSession, SafeProjectInfo, SessionState, VerificationResult } from \"../types.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 || \"https://asiyst.com\", 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: ${error instanceof Error ? error.message : \"network error\"}`);\r\n }\r\n const body: unknown = await response.json().catch(() => undefined);\r\n if (!response.ok) throw new ApiError(`Asiyst API returned HTTP ${response.status}`, response.status);\r\n return body as T;\r\n }\r\n\r\n createSession(): Promise<CliSession> {\r\n return this.request<unknown>(\"/api/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 const localApi = this.baseUrl.startsWith(\"http://localhost\") || this.baseUrl.startsWith(\"http://127.0.0.1\");\r\n if (url.protocol !== \"https:\" && !(localApi && url.protocol === \"http:\")) {\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(`/api/cli/sessions/${encodeURIComponent(sessionId)}/status`);\r\n }\r\n\r\n projectInfo(projectId: string): Promise<SafeProjectInfo> {\r\n return this.request(`/api/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>(\"/api/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 { createInterface } from \"node:readline/promises\";\r\nimport { stdin as input, stdout as output } from \"node:process\";\r\nimport { ApiClient } from \"../api/client.js\";\r\nimport { openBrowser } from \"../browser/open.js\";\r\nimport type { CliSession, SafeProjectInfo } from \"../types.js\";\r\n\r\nexport async function connect(api = new ApiClient()): Promise<{ session: CliSession; project?: SafeProjectInfo }> {\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) return true;\r\n const readline = createInterface({ input, output });\r\n const answer = await readline.question(`${question} [y/N] `);\r\n readline.close();\r\n return /^y(es)?$/i.test(answer.trim());\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 { 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${cwd}\\n\\nAsiyst may read project files and modify Asiyst configuration during setup.`))) {\r\n console.log(\"Folder not trusted.\\nAsiyst setup cancelled.\");\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 name: ${typeof project.packageJson?.name === \"string\" ? project.packageJson.name : \"Unknown\"}\\nSDK version: ${project.sdkVersion || \"Not installed\"}`);\r\n if (!project.config.projectId) { console.log(\"Connection status: Not configured\"); return; }\r\n const info = await api.projectInfo(project.config.projectId);\r\n for (const [key, value] of Object.entries(info)) if (value !== undefined) console.log(`${key}: ${value}`);\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.projectInfo(project.config.projectId || \"\"); ok(\"Asiyst API\"); } catch (error) { fail(\"Asiyst API\", error instanceof Error ? error.message : \"unreachable\"); }\r\n}\r\n","import { openBrowser } from \"../browser/open.js\";\r\nexport async function dashboardCommand(): Promise<void> {\r\n const configured = process.env.ASIIYST_DASHBOARD_URL || \"https://asiyst.com/dashboard\";\r\n const parsed = new URL(configured);\r\n if (parsed.protocol !== \"https:\" && !(parsed.hostname === \"localhost\" && parsed.protocol === \"http:\")) 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\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 = \"https://asiyst.com/dashboard/avatar\";\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 { createInterface } from \"node:readline/promises\";\r\nimport { stdin as input, stdout as output } from \"node:process\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { homeStatus } from \"../ui/output.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 { statusCommand } from \"./status.js\";\r\nimport { logoutCommand } from \"./logout.js\";\r\nimport { revokeTrustCommand, trustCommand } from \"./trust.js\";\r\nimport { readCurrentVersion } from \"../update/check.js\";\r\n\r\nconst commands = [\"connect\", \"status\", \"diagnostics\", \"dashboard\", \"avatar\", \"help\", \"version\", \"trust\", \"revoke-trust\", \"logout\", \"exit\"];\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 (/^(help|\\?)$/.test(input)) return \"help\";\r\n if (/^(version|--version)$/.test(input)) return \"version\";\r\n return input;\r\n}\r\nexport function interactiveHelp(): void {\r\n console.log(\"\\nASIYST CLI\\n\\nUsage: asiyst [command]\\n\\nCore Commands\\n connect Connect this project to Asiyst\\n status Show project and connection status\\n diagnostics Diagnose installation problems\\n dashboard Open Asiyst dashboard\\n avatar Manage avatar configuration\\n help Show available commands\\n version Show CLI version\\n trust Trust this project folder\\n revoke-trust Revoke folder trust\\n\\nExamples\\n asiyst connect\\n asiyst status\\n asiyst diagnostics\\n asiyst dashboard\");\r\n}\r\nexport async function interactiveHome(): Promise<void> {\r\n const project = detectProject();\r\n // homeStatus delegates to homeScreen which renders the full TUI welcome screen\r\n homeStatus(project);\r\n const readline = createInterface({ input, output, historySize: 50, completer: (line) => [commands.filter((item) => item.startsWith(line)), line] });\r\n readline.on(\"SIGINT\", () => readline.close());\r\n for (;;) {\r\n let value: string;\r\n try { value = await readline.question(\"\\x1b[94m>\\x1b[0m \"); } catch { break; }\r\n const command = resolveInput(value);\r\n if (command === \"exit\" || command === \"quit\" || !command) break;\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 === \"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(`\\x1b[90mUnknown command:\\x1b[0m ${value}\\nRun \\x1b[96masiyst help\\x1b[0m for available commands.`);\r\n }\r\n readline.close();\r\n}\r\n","import { banner, 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 { checkAndUpdate } from \"./update/check.js\";\r\nimport { readCurrentVersion } from \"./update/check.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 if (await checkAndUpdate(argv)) return;\r\n const command = argv[0] || \"\";\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 === \"help\") return help();\r\n if (command === \"version\") return console.log(CLI_VERSION);\r\n banner();\r\n if (!process.stdin.isTTY) {\r\n const project = detectProject();\r\n projectChecks(project);\r\n console.log(\"\\nRun `npx asiyst init` to connect this project, or `npx asiyst --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":["banner","ok","readFileSync","existsSync","readFileSync","resolve","resolve","existsSync","readFileSync","resolve","existsSync","readFileSync","resolve","createInterface","input","output","input","createInterface","output","fileURLToPath"]}
|
|
1
|
+
{"version":3,"sources":["../src/update/check.ts","../src/ui/output.ts","../src/detection/project.ts","../src/api/client.ts","../src/config/local.ts","../src/commands/shared.ts","../src/browser/open.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/commands/interactive.ts","../src/index.ts"],"sourcesContent":["import { readFileSync } from \"node:fs\";\r\nimport { execFileSync } from \"node:child_process\";\r\nimport { fileURLToPath } from \"node:url\";\r\n\r\nconst PACKAGE_NAME = \"@asiyst/cli\";\r\nconst REGISTRY_URL = \"https://registry.npmjs.org/%40asiyst%2Fcli/latest\";\r\nconst UPDATE_ATTEMPTED = \"ASIIYST_UPDATE_ATTEMPTED\";\r\nconst TIMEOUT_MS = 1500;\r\n\r\nexport interface UpdateCheckResult {\r\n currentVersion: string;\r\n latestVersion?: string;\r\n}\r\n\r\nexport function readCurrentVersion(): string {\r\n for (const packageUrl of [new URL(\"../package.json\", import.meta.url), new URL(\"../../package.json\", import.meta.url)]) {\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 // Source execution and bundled execution resolve package metadata at different levels.\r\n }\r\n }\r\n return \"0.2.0\";\r\n}\r\n\r\nfunction versionParts(version: string): { numbers: number[]; prerelease: string[] } | undefined {\r\n const match = /^[v=]?(\\d+)\\.(\\d+)\\.(\\d+)(?:-([0-9A-Za-z.-]+))?$/.exec(version.trim());\r\n if (!match) return undefined;\r\n return { numbers: [Number(match[1]), Number(match[2]), Number(match[3])], prerelease: match[4]?.split(\".\") ?? [] };\r\n}\r\n\r\nexport function compareVersions(left: string, right: string): number {\r\n const a = versionParts(left);\r\n const b = versionParts(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 function isCiEnvironment(env: NodeJS.ProcessEnv = process.env): boolean {\r\n return env.CI === \"true\" || env.CI === \"1\" || Boolean(env.GITHUB_ACTIONS || env.BUILD_ID || env.TF_BUILD);\r\n}\r\n\r\nexport function shouldCheckForUpdate(env: NodeJS.ProcessEnv = process.env, isTTY = Boolean(process.stdout.isTTY)): boolean {\r\n return !isCiEnvironment(env) && isTTY && env[UPDATE_ATTEMPTED] !== \"1\";\r\n}\r\n\r\nexport async function checkForUpdate(\r\n currentVersion = readCurrentVersion(),\r\n fetcher: typeof fetch = fetch,\r\n): Promise<UpdateCheckResult> {\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 && versionParts(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 function updateAndRestart(\r\n latestVersion: string,\r\n argv: string[],\r\n env: NodeJS.ProcessEnv = process.env,\r\n runner: typeof execFileSync = execFileSync,\r\n): boolean {\r\n const executable = process.platform === \"win32\" ? \"npx.cmd\" : \"npx\";\r\n try {\r\n runner(executable, [\"--yes\", `${PACKAGE_NAME}@${latestVersion}`, ...argv], {\r\n stdio: \"inherit\",\r\n env: { ...env, [UPDATE_ATTEMPTED]: \"1\" },\r\n });\r\n return true;\r\n } catch {\r\n return false;\r\n }\r\n}\r\n\r\nexport async function checkAndUpdate(argv: string[], env: NodeJS.ProcessEnv = process.env): Promise<boolean> {\r\n if (!shouldCheckForUpdate(env)) return false;\r\n const result = await checkForUpdate(readCurrentVersion());\r\n if (!result.latestVersion || compareVersions(result.latestVersion, result.currentVersion) <= 0) return false;\r\n console.log(`\\n Update available: ${result.currentVersion} → ${result.latestVersion}`);\r\n console.log(` Run: npm install -g @asiyst/cli@${result.latestVersion}\\n`);\r\n return false;\r\n}\r\n","import type { ProjectDetection, VerificationResult } from \"../types.js\";\nimport { readCurrentVersion } from \"../update/check.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 banner(version = readCurrentVersion()): void {\n console.log(`\n ╭──────────────────────────────────────────╮\n │ │\n │ ASIYST CLI │\n │ AI Assistant Platform │\n │ v${version.padEnd(37)}│\n │ │\n ╰──────────────────────────────────────────╯\n`);\n}\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\nfunction readEnv(cwd: string): Record<string, string> {\r\n const result: Record<string, string> = {};\r\n const path = resolve(cwd, \".env\");\r\n if (!existsSync(path)) return result;\r\n for (const line of readFileSync(path, \"utf8\").split(/\\r?\\n/)) {\r\n const match = /^\\s*(?:export\\s+)?([A-Z0-9_]+)\\s*=\\s*(.*?)\\s*$/.exec(line);\r\n if (match && !match[1].toLowerCase().includes(\"secret\") && !match[1].toLowerCase().includes(\"token\")) {\r\n result[match[1]] = match[2].replace(/^(['\"])(.*)\\1$/, \"$2\");\r\n }\r\n }\r\n return result;\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 = { ...readEnv(cwd), ...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 { CliSession, SafeProjectInfo, SessionState, VerificationResult } from \"../types.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 || \"https://asiyst.com\", 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: ${error instanceof Error ? error.message : \"network error\"}`);\r\n }\r\n const body: unknown = await response.json().catch(() => undefined);\r\n if (!response.ok) throw new ApiError(`Asiyst API returned HTTP ${response.status}`, response.status);\r\n return body as T;\r\n }\r\n\r\n createSession(): Promise<CliSession> {\r\n return this.request<unknown>(\"/api/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 const localApi = this.baseUrl.startsWith(\"http://localhost\") || this.baseUrl.startsWith(\"http://127.0.0.1\");\r\n if (url.protocol !== \"https:\" && !(localApi && url.protocol === \"http:\")) {\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(`/api/cli/sessions/${encodeURIComponent(sessionId)}/status`);\r\n }\r\n\r\n projectInfo(projectId: string): Promise<SafeProjectInfo> {\r\n return this.request(`/api/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>(\"/api/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 { createInterface } from \"node:readline/promises\";\r\nimport { stdin as input, stdout as output } from \"node:process\";\r\nimport { ApiClient } from \"../api/client.js\";\r\nimport { openBrowser } from \"../browser/open.js\";\r\nimport type { CliSession, SafeProjectInfo } from \"../types.js\";\r\n\r\nexport async function connect(api = new ApiClient()): Promise<{ session: CliSession; project?: SafeProjectInfo }> {\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) return true;\r\n const readline = createInterface({ input, output });\r\n const answer = await readline.question(`${question} [y/N] `);\r\n readline.close();\r\n return /^y(es)?$/i.test(answer.trim());\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 { 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${cwd}\\n\\nAsiyst may read project files and modify Asiyst configuration during setup.`))) {\r\n console.log(\"Folder not trusted.\\nAsiyst setup cancelled.\");\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 name: ${typeof project.packageJson?.name === \"string\" ? project.packageJson.name : \"Unknown\"}\\nSDK version: ${project.sdkVersion || \"Not installed\"}`);\r\n if (!project.config.projectId) { console.log(\"Connection status: Not configured\"); return; }\r\n const info = await api.projectInfo(project.config.projectId);\r\n for (const [key, value] of Object.entries(info)) if (value !== undefined) console.log(`${key}: ${value}`);\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.projectInfo(project.config.projectId || \"\"); ok(\"Asiyst API\"); } catch (error) { fail(\"Asiyst API\", error instanceof Error ? error.message : \"unreachable\"); }\r\n}\r\n","import { openBrowser } from \"../browser/open.js\";\r\nexport async function dashboardCommand(): Promise<void> {\r\n const configured = process.env.ASIIYST_DASHBOARD_URL || \"https://asiyst.com/dashboard\";\r\n const parsed = new URL(configured);\r\n if (parsed.protocol !== \"https:\" && !(parsed.hostname === \"localhost\" && parsed.protocol === \"http:\")) 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\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 = \"https://asiyst.com/dashboard/avatar\";\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 { createInterface } from \"node:readline/promises\";\r\nimport { stdin as input, stdout as output } from \"node:process\";\r\nimport { detectProject } from \"../detection/project.js\";\r\nimport { homeStatus } from \"../ui/output.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 { statusCommand } from \"./status.js\";\r\nimport { logoutCommand } from \"./logout.js\";\r\nimport { revokeTrustCommand, trustCommand, ensureTrusted } from \"./trust.js\";\r\nimport { readCurrentVersion } from \"../update/check.js\";\r\n\r\nconst commands = [\"connect\", \"status\", \"diagnostics\", \"dashboard\", \"avatar\", \"help\", \"version\", \"trust\", \"revoke-trust\", \"logout\", \"exit\"];\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 (/^(help|\\?)$/.test(input)) return \"help\";\r\n if (/^(version|--version)$/.test(input)) return \"version\";\r\n return input;\r\n}\r\nexport function interactiveHelp(): void {\r\n console.log(\"\\nASIYST CLI\\n\\nUsage: asiyst [command]\\n\\nCore Commands\\n connect Connect this project to Asiyst\\n status Show project and connection status\\n diagnostics Diagnose installation problems\\n dashboard Open Asiyst dashboard\\n avatar Manage avatar configuration\\n help Show available commands\\n version Show CLI version\\n trust Trust this project folder\\n revoke-trust Revoke folder trust\\n\\nExamples\\n asiyst connect\\n asiyst status\\n asiyst diagnostics\\n asiyst dashboard\");\r\n}\r\nexport async function interactiveHome(): Promise<void> {\r\n // Ask user to trust the folder before proceeding\r\n const trusted = await ensureTrusted();\r\n if (!trusted) return;\r\n\r\n const project = detectProject();\r\n homeStatus(project);\r\n console.log(\"\\n Welcome to Asiyst CLI!\");\r\n console.log(\" I can help you connect, configure, and manage your Asiyst assistant.\");\r\n console.log(\" What would you like to do?\\n\");\r\n console.log(\" Suggestions: [connect] [status] [diagnostics] [dashboard] [avatar] [help]\\n\");\r\n const readline = createInterface({ input, output, historySize: 50, completer: (line) => [commands.filter((item) => item.startsWith(line)), line] });\r\n readline.on(\"SIGINT\", () => readline.close());\r\n for (;;) {\r\n let value: string;\r\n try { value = await readline.question(\"> \"); } catch { break; }\r\n const command = resolveInput(value);\r\n if (command === \"exit\" || command === \"quit\" || !command) break;\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 === \"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(`Unknown command: ${value}\\nRun 'asiyst help' for available commands.`);\r\n }\r\n readline.close();\r\n}\r\n\r\n","import { banner, 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 { checkAndUpdate } from \"./update/check.js\";\r\nimport { readCurrentVersion } from \"./update/check.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 if (await checkAndUpdate(argv)) return;\r\n const command = argv[0] || \"\";\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 === \"help\") return help();\r\n if (command === \"version\") return console.log(CLI_VERSION);\r\n banner();\r\n if (!process.stdin.isTTY) {\r\n const project = detectProject();\r\n projectChecks(project);\r\n console.log(\"\\nRun `npx asiyst init` to connect this project, or `npx asiyst --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":["readFileSync","existsSync","readFileSync","resolve","resolve","existsSync","readFileSync","resolve","existsSync","readFileSync","resolve","createInterface","input","output","input","createInterface","output","fileURLToPath"]}
|