amai 0.0.8 → 0.0.9
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/cli.cjs +133 -79
- package/dist/cli.js +131 -77
- package/dist/lib/daemon-entry.cjs +110 -56
- package/dist/lib/daemon-entry.js +108 -54
- package/dist/server.cjs +3 -0
- package/dist/server.js +3 -0
- package/package.json +1 -1
package/dist/cli.cjs
CHANGED
|
@@ -6,7 +6,7 @@ var WebSocket = require('ws');
|
|
|
6
6
|
var zod = require('zod');
|
|
7
7
|
var fs5 = require('fs/promises');
|
|
8
8
|
var path10 = require('path');
|
|
9
|
-
var
|
|
9
|
+
var fs6 = require('fs');
|
|
10
10
|
var os3 = require('os');
|
|
11
11
|
var child_process = require('child_process');
|
|
12
12
|
var util = require('util');
|
|
@@ -23,7 +23,7 @@ var pc5__default = /*#__PURE__*/_interopDefault(pc5);
|
|
|
23
23
|
var WebSocket__default = /*#__PURE__*/_interopDefault(WebSocket);
|
|
24
24
|
var fs5__default = /*#__PURE__*/_interopDefault(fs5);
|
|
25
25
|
var path10__default = /*#__PURE__*/_interopDefault(path10);
|
|
26
|
-
var
|
|
26
|
+
var fs6__default = /*#__PURE__*/_interopDefault(fs6);
|
|
27
27
|
var os3__default = /*#__PURE__*/_interopDefault(os3);
|
|
28
28
|
var readline__default = /*#__PURE__*/_interopDefault(readline);
|
|
29
29
|
|
|
@@ -42,14 +42,14 @@ var ProjectRegistry = class {
|
|
|
42
42
|
}
|
|
43
43
|
load() {
|
|
44
44
|
try {
|
|
45
|
-
if (
|
|
46
|
-
const data =
|
|
45
|
+
if (fs6__default.default.existsSync(REGISTRY_FILE)) {
|
|
46
|
+
const data = fs6__default.default.readFileSync(REGISTRY_FILE, "utf8");
|
|
47
47
|
const parsed = JSON.parse(data);
|
|
48
48
|
if (!Array.isArray(parsed)) {
|
|
49
49
|
console.error("Invalid project registry format: expected array, got", typeof parsed);
|
|
50
50
|
const backupFile = REGISTRY_FILE + ".backup." + Date.now();
|
|
51
|
-
|
|
52
|
-
|
|
51
|
+
fs6__default.default.copyFileSync(REGISTRY_FILE, backupFile);
|
|
52
|
+
fs6__default.default.unlinkSync(REGISTRY_FILE);
|
|
53
53
|
return;
|
|
54
54
|
}
|
|
55
55
|
const projects = parsed;
|
|
@@ -62,11 +62,11 @@ var ProjectRegistry = class {
|
|
|
62
62
|
}
|
|
63
63
|
} catch (error) {
|
|
64
64
|
console.error("Failed to load project registry:", error);
|
|
65
|
-
if (
|
|
65
|
+
if (fs6__default.default.existsSync(REGISTRY_FILE)) {
|
|
66
66
|
try {
|
|
67
67
|
const backupFile = REGISTRY_FILE + ".backup." + Date.now();
|
|
68
|
-
|
|
69
|
-
|
|
68
|
+
fs6__default.default.copyFileSync(REGISTRY_FILE, backupFile);
|
|
69
|
+
fs6__default.default.unlinkSync(REGISTRY_FILE);
|
|
70
70
|
console.log("Corrupted registry file backed up and removed. Starting fresh.");
|
|
71
71
|
} catch (backupError) {
|
|
72
72
|
}
|
|
@@ -75,11 +75,11 @@ var ProjectRegistry = class {
|
|
|
75
75
|
}
|
|
76
76
|
save() {
|
|
77
77
|
try {
|
|
78
|
-
if (!
|
|
79
|
-
|
|
78
|
+
if (!fs6__default.default.existsSync(AMA_DIR)) {
|
|
79
|
+
fs6__default.default.mkdirSync(AMA_DIR, { recursive: true });
|
|
80
80
|
}
|
|
81
81
|
const projects = Array.from(this.projects.values());
|
|
82
|
-
|
|
82
|
+
fs6__default.default.writeFileSync(REGISTRY_FILE, JSON.stringify(projects, null, 2), "utf8");
|
|
83
83
|
} catch (error) {
|
|
84
84
|
console.error("Failed to save project registry:", error);
|
|
85
85
|
}
|
|
@@ -747,20 +747,20 @@ var editFiles = async function(input, projectCwd) {
|
|
|
747
747
|
let existingContent = "";
|
|
748
748
|
if (isNewFile === void 0) {
|
|
749
749
|
try {
|
|
750
|
-
existingContent = await
|
|
750
|
+
existingContent = await fs6__default.default.promises.readFile(filePath, "utf-8");
|
|
751
751
|
isNewFile = false;
|
|
752
752
|
} catch (error) {
|
|
753
753
|
isNewFile = true;
|
|
754
754
|
}
|
|
755
755
|
} else if (!isNewFile) {
|
|
756
756
|
try {
|
|
757
|
-
existingContent = await
|
|
757
|
+
existingContent = await fs6__default.default.promises.readFile(filePath, "utf-8");
|
|
758
758
|
} catch (error) {
|
|
759
759
|
isNewFile = true;
|
|
760
760
|
}
|
|
761
761
|
}
|
|
762
762
|
try {
|
|
763
|
-
await
|
|
763
|
+
await fs6__default.default.promises.writeFile(filePath, content);
|
|
764
764
|
} catch (writeError) {
|
|
765
765
|
throw writeError;
|
|
766
766
|
}
|
|
@@ -1139,6 +1139,9 @@ var list = async function(input, projectCwd) {
|
|
|
1139
1139
|
var startHttpServer = () => {
|
|
1140
1140
|
const app = new hono.Hono();
|
|
1141
1141
|
app.use(cors.cors());
|
|
1142
|
+
app.get("/", (c) => {
|
|
1143
|
+
return c.text("Hello World");
|
|
1144
|
+
});
|
|
1142
1145
|
nodeServer.serve({ fetch: app.fetch, port: 3456 });
|
|
1143
1146
|
};
|
|
1144
1147
|
var sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms));
|
|
@@ -1146,10 +1149,10 @@ var CREDENTIALS_DIR = path10__default.default.join(os3__default.default.homedir(
|
|
|
1146
1149
|
var CREDENTIALS_PATH = path10__default.default.join(CREDENTIALS_DIR, "credentials.json");
|
|
1147
1150
|
function isAuthenticated() {
|
|
1148
1151
|
try {
|
|
1149
|
-
if (!
|
|
1152
|
+
if (!fs6__default.default.existsSync(CREDENTIALS_PATH)) {
|
|
1150
1153
|
return false;
|
|
1151
1154
|
}
|
|
1152
|
-
const raw =
|
|
1155
|
+
const raw = fs6__default.default.readFileSync(CREDENTIALS_PATH, "utf8");
|
|
1153
1156
|
const data = JSON.parse(raw);
|
|
1154
1157
|
return Boolean(data && data.access_token);
|
|
1155
1158
|
} catch {
|
|
@@ -1158,10 +1161,10 @@ function isAuthenticated() {
|
|
|
1158
1161
|
}
|
|
1159
1162
|
function saveTokens(tokens) {
|
|
1160
1163
|
try {
|
|
1161
|
-
if (!
|
|
1162
|
-
|
|
1164
|
+
if (!fs6__default.default.existsSync(CREDENTIALS_DIR)) {
|
|
1165
|
+
fs6__default.default.mkdirSync(CREDENTIALS_DIR, { recursive: true });
|
|
1163
1166
|
}
|
|
1164
|
-
|
|
1167
|
+
fs6__default.default.writeFileSync(
|
|
1165
1168
|
CREDENTIALS_PATH,
|
|
1166
1169
|
JSON.stringify(tokens, null, 2),
|
|
1167
1170
|
"utf8"
|
|
@@ -1172,18 +1175,18 @@ function saveTokens(tokens) {
|
|
|
1172
1175
|
}
|
|
1173
1176
|
function logout() {
|
|
1174
1177
|
try {
|
|
1175
|
-
if (
|
|
1176
|
-
|
|
1178
|
+
if (fs6__default.default.existsSync(CREDENTIALS_PATH)) {
|
|
1179
|
+
fs6__default.default.unlinkSync(CREDENTIALS_PATH);
|
|
1177
1180
|
}
|
|
1178
1181
|
} catch (error) {
|
|
1179
1182
|
console.error(pc5__default.default.red("Failed to logout"), error);
|
|
1180
1183
|
}
|
|
1181
1184
|
}
|
|
1182
1185
|
function getTokens() {
|
|
1183
|
-
if (!
|
|
1186
|
+
if (!fs6__default.default.existsSync(CREDENTIALS_PATH)) {
|
|
1184
1187
|
return null;
|
|
1185
1188
|
}
|
|
1186
|
-
const raw =
|
|
1189
|
+
const raw = fs6__default.default.readFileSync(CREDENTIALS_PATH, "utf8");
|
|
1187
1190
|
const data = JSON.parse(raw);
|
|
1188
1191
|
return data;
|
|
1189
1192
|
}
|
|
@@ -1293,10 +1296,10 @@ async function login() {
|
|
|
1293
1296
|
}
|
|
1294
1297
|
var getUserId = () => {
|
|
1295
1298
|
try {
|
|
1296
|
-
if (!
|
|
1299
|
+
if (!fs6__default.default.existsSync(CREDENTIALS_PATH)) {
|
|
1297
1300
|
return;
|
|
1298
1301
|
}
|
|
1299
|
-
const raw =
|
|
1302
|
+
const raw = fs6__default.default.readFileSync(CREDENTIALS_PATH, "utf8");
|
|
1300
1303
|
const data = JSON.parse(raw);
|
|
1301
1304
|
return {
|
|
1302
1305
|
userId: data.user.id
|
|
@@ -1443,7 +1446,7 @@ var runTerminalCommand = async (input, projectCwd) => {
|
|
|
1443
1446
|
};
|
|
1444
1447
|
var ignoreFiles = ["node_modules", ".git", ".next", ".env", ".env.local", ".env.development.local", ".env.test.local", ".env.production.local"];
|
|
1445
1448
|
var getContext = (dir, base = dir, allFiles = []) => {
|
|
1446
|
-
const filePath =
|
|
1449
|
+
const filePath = fs6.readdirSync(dir, { withFileTypes: true });
|
|
1447
1450
|
for (const file of filePath) {
|
|
1448
1451
|
if (ignoreFiles.includes(file.name)) continue;
|
|
1449
1452
|
const fullPath = path10__default.default.join(dir, file.name);
|
|
@@ -1475,16 +1478,16 @@ function getWorkspaceStoragePath(ide) {
|
|
|
1475
1478
|
function scanWorkspaceStorage(ide) {
|
|
1476
1479
|
const projects = [];
|
|
1477
1480
|
const storagePath = getWorkspaceStoragePath();
|
|
1478
|
-
if (!
|
|
1481
|
+
if (!fs6__default.default.existsSync(storagePath)) {
|
|
1479
1482
|
return projects;
|
|
1480
1483
|
}
|
|
1481
1484
|
try {
|
|
1482
|
-
const workspaces =
|
|
1485
|
+
const workspaces = fs6__default.default.readdirSync(storagePath);
|
|
1483
1486
|
for (const workspace of workspaces) {
|
|
1484
1487
|
const workspaceJsonPath = path10__default.default.join(storagePath, workspace, "workspace.json");
|
|
1485
|
-
if (
|
|
1488
|
+
if (fs6__default.default.existsSync(workspaceJsonPath)) {
|
|
1486
1489
|
try {
|
|
1487
|
-
const content =
|
|
1490
|
+
const content = fs6__default.default.readFileSync(workspaceJsonPath, "utf-8");
|
|
1488
1491
|
const data = JSON.parse(content);
|
|
1489
1492
|
if (data.folder && typeof data.folder === "string") {
|
|
1490
1493
|
let projectPath = data.folder;
|
|
@@ -1492,7 +1495,7 @@ function scanWorkspaceStorage(ide) {
|
|
|
1492
1495
|
projectPath = projectPath.replace("file://", "");
|
|
1493
1496
|
projectPath = decodeURIComponent(projectPath);
|
|
1494
1497
|
}
|
|
1495
|
-
if (
|
|
1498
|
+
if (fs6__default.default.existsSync(projectPath) && fs6__default.default.statSync(projectPath).isDirectory()) {
|
|
1496
1499
|
projects.push({
|
|
1497
1500
|
name: path10__default.default.basename(projectPath),
|
|
1498
1501
|
path: projectPath,
|
|
@@ -1516,11 +1519,11 @@ var scanIdeProjects = async () => {
|
|
|
1516
1519
|
const seenPaths = /* @__PURE__ */ new Set();
|
|
1517
1520
|
const addProject = (projectPath, ide) => {
|
|
1518
1521
|
try {
|
|
1519
|
-
const resolvedPath =
|
|
1520
|
-
if (
|
|
1522
|
+
const resolvedPath = fs6__default.default.realpathSync(projectPath);
|
|
1523
|
+
if (fs6__default.default.existsSync(resolvedPath) && fs6__default.default.statSync(resolvedPath).isDirectory() && !seenPaths.has(resolvedPath)) {
|
|
1521
1524
|
const isIdeProjectsDir = Object.values(IDE_PROJECTS_PATHS).some((ideDir) => {
|
|
1522
1525
|
try {
|
|
1523
|
-
return
|
|
1526
|
+
return fs6__default.default.realpathSync(ideDir) === resolvedPath;
|
|
1524
1527
|
} catch {
|
|
1525
1528
|
return false;
|
|
1526
1529
|
}
|
|
@@ -1543,30 +1546,30 @@ var scanIdeProjects = async () => {
|
|
|
1543
1546
|
}
|
|
1544
1547
|
for (const [ide, dirPath] of Object.entries(IDE_PROJECTS_PATHS)) {
|
|
1545
1548
|
if (ide === "cursor") continue;
|
|
1546
|
-
if (
|
|
1547
|
-
const projects =
|
|
1549
|
+
if (fs6__default.default.existsSync(dirPath)) {
|
|
1550
|
+
const projects = fs6__default.default.readdirSync(dirPath);
|
|
1548
1551
|
projects.forEach((project) => {
|
|
1549
1552
|
const projectPath = path10__default.default.join(dirPath, project);
|
|
1550
1553
|
try {
|
|
1551
|
-
const stats =
|
|
1554
|
+
const stats = fs6__default.default.lstatSync(projectPath);
|
|
1552
1555
|
let actualPath = null;
|
|
1553
1556
|
if (stats.isSymbolicLink()) {
|
|
1554
|
-
actualPath =
|
|
1557
|
+
actualPath = fs6__default.default.realpathSync(projectPath);
|
|
1555
1558
|
} else if (stats.isFile()) {
|
|
1556
1559
|
try {
|
|
1557
|
-
let content =
|
|
1560
|
+
let content = fs6__default.default.readFileSync(projectPath, "utf-8").trim();
|
|
1558
1561
|
if (content.startsWith("~/") || content === "~") {
|
|
1559
1562
|
content = content.replace(/^~/, HOME);
|
|
1560
1563
|
}
|
|
1561
1564
|
const resolvedContent = path10__default.default.isAbsolute(content) ? content : path10__default.default.resolve(path10__default.default.dirname(projectPath), content);
|
|
1562
|
-
if (
|
|
1563
|
-
actualPath =
|
|
1565
|
+
if (fs6__default.default.existsSync(resolvedContent) && fs6__default.default.statSync(resolvedContent).isDirectory()) {
|
|
1566
|
+
actualPath = fs6__default.default.realpathSync(resolvedContent);
|
|
1564
1567
|
}
|
|
1565
1568
|
} catch {
|
|
1566
1569
|
return;
|
|
1567
1570
|
}
|
|
1568
1571
|
} else if (stats.isDirectory()) {
|
|
1569
|
-
actualPath =
|
|
1572
|
+
actualPath = fs6__default.default.realpathSync(projectPath);
|
|
1570
1573
|
}
|
|
1571
1574
|
if (actualPath) {
|
|
1572
1575
|
addProject(actualPath, ide);
|
|
@@ -2205,20 +2208,20 @@ function getCodeServerBin() {
|
|
|
2205
2208
|
}
|
|
2206
2209
|
function isCodeServerInstalled() {
|
|
2207
2210
|
const binPath = getCodeServerBin();
|
|
2208
|
-
return
|
|
2211
|
+
return fs6__default.default.existsSync(binPath);
|
|
2209
2212
|
}
|
|
2210
2213
|
async function installCodeServer() {
|
|
2211
2214
|
const { ext } = getPlatformInfo();
|
|
2212
2215
|
const downloadUrl = getDownloadUrl();
|
|
2213
2216
|
const tarballPath = path10__default.default.join(AMA_DIR, `code-server.${ext}`);
|
|
2214
|
-
if (!
|
|
2215
|
-
|
|
2217
|
+
if (!fs6__default.default.existsSync(AMA_DIR)) {
|
|
2218
|
+
fs6__default.default.mkdirSync(AMA_DIR, { recursive: true });
|
|
2216
2219
|
}
|
|
2217
|
-
if (!
|
|
2218
|
-
|
|
2220
|
+
if (!fs6__default.default.existsSync(CODE_DIR)) {
|
|
2221
|
+
fs6__default.default.mkdirSync(CODE_DIR, { recursive: true });
|
|
2219
2222
|
}
|
|
2220
|
-
if (!
|
|
2221
|
-
|
|
2223
|
+
if (!fs6__default.default.existsSync(STORAGE_DIR)) {
|
|
2224
|
+
fs6__default.default.mkdirSync(STORAGE_DIR, { recursive: true });
|
|
2222
2225
|
}
|
|
2223
2226
|
console.log(pc5__default.default.cyan(`Downloading code-server v${CODE_SERVER_VERSION}...`));
|
|
2224
2227
|
console.log(pc5__default.default.gray(downloadUrl));
|
|
@@ -2227,13 +2230,13 @@ async function installCodeServer() {
|
|
|
2227
2230
|
throw new Error(`Failed to download code-server: ${response.statusText}`);
|
|
2228
2231
|
}
|
|
2229
2232
|
const buffer = await response.arrayBuffer();
|
|
2230
|
-
await
|
|
2233
|
+
await fs6__default.default.promises.writeFile(tarballPath, Buffer.from(buffer));
|
|
2231
2234
|
console.log(pc5__default.default.cyan("Extracting code-server..."));
|
|
2232
2235
|
await execAsync3(`tar -xzf ${tarballPath} -C ${CODE_DIR}`);
|
|
2233
|
-
await
|
|
2236
|
+
await fs6__default.default.promises.unlink(tarballPath);
|
|
2234
2237
|
const binPath = getCodeServerBin();
|
|
2235
|
-
if (
|
|
2236
|
-
await
|
|
2238
|
+
if (fs6__default.default.existsSync(binPath)) {
|
|
2239
|
+
await fs6__default.default.promises.chmod(binPath, 493);
|
|
2237
2240
|
}
|
|
2238
2241
|
console.log(pc5__default.default.green("\u2713 code-server installed successfully"));
|
|
2239
2242
|
}
|
|
@@ -2255,26 +2258,77 @@ async function killExistingCodeServer() {
|
|
|
2255
2258
|
} catch {
|
|
2256
2259
|
}
|
|
2257
2260
|
}
|
|
2261
|
+
async function setupDefaultSettings() {
|
|
2262
|
+
const userDir = path10__default.default.join(STORAGE_DIR, "User");
|
|
2263
|
+
const settingsPath = path10__default.default.join(userDir, "settings.json");
|
|
2264
|
+
if (!fs6__default.default.existsSync(userDir)) {
|
|
2265
|
+
fs6__default.default.mkdirSync(userDir, { recursive: true });
|
|
2266
|
+
}
|
|
2267
|
+
const defaultSettings = {
|
|
2268
|
+
// Disable signature verification for Open VSX extensions
|
|
2269
|
+
"extensions.verifySignature": false,
|
|
2270
|
+
// Theme settings
|
|
2271
|
+
"workbench.colorTheme": "Min Dark",
|
|
2272
|
+
"workbench.startupEditor": "none",
|
|
2273
|
+
// Editor settings
|
|
2274
|
+
"editor.fontSize": 14,
|
|
2275
|
+
"editor.fontFamily": "'JetBrains Mono', 'Fira Code', Menlo, Monaco, 'Courier New', monospace",
|
|
2276
|
+
"editor.minimap.enabled": false,
|
|
2277
|
+
"editor.wordWrap": "on",
|
|
2278
|
+
// UI settings
|
|
2279
|
+
"window.menuBarVisibility": "compact",
|
|
2280
|
+
"workbench.activityBar.location": "top"
|
|
2281
|
+
};
|
|
2282
|
+
let existingSettings = {};
|
|
2283
|
+
if (fs6__default.default.existsSync(settingsPath)) {
|
|
2284
|
+
try {
|
|
2285
|
+
const content = await fs6__default.default.promises.readFile(settingsPath, "utf-8");
|
|
2286
|
+
existingSettings = JSON.parse(content);
|
|
2287
|
+
} catch {
|
|
2288
|
+
}
|
|
2289
|
+
}
|
|
2290
|
+
const mergedSettings = { ...defaultSettings, ...existingSettings };
|
|
2291
|
+
mergedSettings["workbench.colorTheme"] = "Min Dark";
|
|
2292
|
+
mergedSettings["extensions.verifySignature"] = false;
|
|
2293
|
+
await fs6__default.default.promises.writeFile(settingsPath, JSON.stringify(mergedSettings, null, 2));
|
|
2294
|
+
console.log(pc5__default.default.green("ama code-server settings configured"));
|
|
2295
|
+
}
|
|
2296
|
+
async function installExtensions() {
|
|
2297
|
+
const binPath = getCodeServerBin();
|
|
2298
|
+
const extensions = [
|
|
2299
|
+
"castrogusttavo.min-theme"
|
|
2300
|
+
];
|
|
2301
|
+
for (const ext of extensions) {
|
|
2302
|
+
try {
|
|
2303
|
+
console.log(pc5__default.default.cyan(`ama installing extension: ${ext}...`));
|
|
2304
|
+
await execAsync3(`"${binPath}" --user-data-dir "${STORAGE_DIR}" --install-extension ${ext}`);
|
|
2305
|
+
console.log(pc5__default.default.green(`ama extension ${ext} installed`));
|
|
2306
|
+
} catch (error) {
|
|
2307
|
+
console.log(pc5__default.default.yellow(`ama failed to install extension ${ext}`), error);
|
|
2308
|
+
}
|
|
2309
|
+
}
|
|
2310
|
+
}
|
|
2258
2311
|
async function startCodeServer(cwd) {
|
|
2259
2312
|
const binPath = getCodeServerBin();
|
|
2260
2313
|
const workDir = cwd || process.cwd();
|
|
2261
|
-
if (!
|
|
2262
|
-
throw new Error("code-server is not installed. Run installCodeServer() first.");
|
|
2314
|
+
if (!fs6__default.default.existsSync(binPath)) {
|
|
2315
|
+
throw new Error("ama code-server is not installed. Run installCodeServer() first.");
|
|
2263
2316
|
}
|
|
2264
2317
|
await killExistingCodeServer();
|
|
2318
|
+
await setupDefaultSettings();
|
|
2319
|
+
await installExtensions();
|
|
2265
2320
|
const workspaceStoragePath = path10__default.default.join(STORAGE_DIR, "User", "workspaceStorage");
|
|
2266
|
-
path10__default.default.join(STORAGE_DIR, "User", "globalStorage");
|
|
2267
2321
|
try {
|
|
2268
|
-
if (
|
|
2269
|
-
await
|
|
2322
|
+
if (fs6__default.default.existsSync(workspaceStoragePath)) {
|
|
2323
|
+
await fs6__default.default.promises.rm(workspaceStoragePath, { recursive: true, force: true });
|
|
2270
2324
|
}
|
|
2271
2325
|
const stateDbPath = path10__default.default.join(STORAGE_DIR, "User", "globalStorage", "state.vscdb");
|
|
2272
|
-
if (
|
|
2273
|
-
await
|
|
2326
|
+
if (fs6__default.default.existsSync(stateDbPath)) {
|
|
2327
|
+
await fs6__default.default.promises.unlink(stateDbPath);
|
|
2274
2328
|
}
|
|
2275
2329
|
} catch {
|
|
2276
2330
|
}
|
|
2277
|
-
console.log(pc5__default.default.cyan(`
|
|
2331
|
+
console.log(pc5__default.default.cyan(`ama starting code-server`));
|
|
2278
2332
|
const codeServer = child_process.spawn(
|
|
2279
2333
|
binPath,
|
|
2280
2334
|
[
|
|
@@ -2293,7 +2347,7 @@ async function startCodeServer(cwd) {
|
|
|
2293
2347
|
stdio: ["ignore", "pipe", "pipe"]
|
|
2294
2348
|
}
|
|
2295
2349
|
);
|
|
2296
|
-
console.log(pc5__default.default.green(
|
|
2350
|
+
console.log(pc5__default.default.green(`ama code-server running at http://localhost:8081/?folder=${encodeURIComponent(workDir)}`));
|
|
2297
2351
|
return codeServer;
|
|
2298
2352
|
}
|
|
2299
2353
|
var __filename$1 = url.fileURLToPath((typeof document === 'undefined' ? require('u' + 'rl').pathToFileURL(__filename).href : (_documentCurrentScript && _documentCurrentScript.tagName.toUpperCase() === 'SCRIPT' && _documentCurrentScript.src || new URL('cli.cjs', document.baseURI).href)));
|
|
@@ -2301,11 +2355,11 @@ var __dirname$1 = path10.dirname(__filename$1);
|
|
|
2301
2355
|
var DAEMON_PID_FILE = path10__default.default.join(AMA_DIR, "daemon.pid");
|
|
2302
2356
|
var DAEMON_LOG_FILE = path10__default.default.join(AMA_DIR, "daemon.log");
|
|
2303
2357
|
function isDaemonRunning() {
|
|
2304
|
-
if (!
|
|
2358
|
+
if (!fs6__default.default.existsSync(DAEMON_PID_FILE)) {
|
|
2305
2359
|
return false;
|
|
2306
2360
|
}
|
|
2307
2361
|
try {
|
|
2308
|
-
const pid = Number(
|
|
2362
|
+
const pid = Number(fs6__default.default.readFileSync(DAEMON_PID_FILE, "utf8"));
|
|
2309
2363
|
process.kill(pid, 0);
|
|
2310
2364
|
return true;
|
|
2311
2365
|
} catch {
|
|
@@ -2313,30 +2367,30 @@ function isDaemonRunning() {
|
|
|
2313
2367
|
}
|
|
2314
2368
|
}
|
|
2315
2369
|
function stopDaemon() {
|
|
2316
|
-
if (!
|
|
2370
|
+
if (!fs6__default.default.existsSync(DAEMON_PID_FILE)) {
|
|
2317
2371
|
return false;
|
|
2318
2372
|
}
|
|
2319
2373
|
try {
|
|
2320
|
-
const pid = Number(
|
|
2374
|
+
const pid = Number(fs6__default.default.readFileSync(DAEMON_PID_FILE, "utf8"));
|
|
2321
2375
|
process.kill(pid, "SIGTERM");
|
|
2322
|
-
|
|
2376
|
+
fs6__default.default.unlinkSync(DAEMON_PID_FILE);
|
|
2323
2377
|
return true;
|
|
2324
2378
|
} catch (error) {
|
|
2325
2379
|
return false;
|
|
2326
2380
|
}
|
|
2327
2381
|
}
|
|
2328
2382
|
function startDaemon() {
|
|
2329
|
-
if (!
|
|
2330
|
-
|
|
2383
|
+
if (!fs6__default.default.existsSync(AMA_DIR)) {
|
|
2384
|
+
fs6__default.default.mkdirSync(AMA_DIR, { recursive: true });
|
|
2331
2385
|
}
|
|
2332
2386
|
if (isDaemonRunning()) {
|
|
2333
2387
|
stopDaemon();
|
|
2334
2388
|
}
|
|
2335
2389
|
const daemonScript = path10__default.default.join(__dirname$1, "lib", "daemon-entry.js");
|
|
2336
|
-
if (!
|
|
2390
|
+
if (!fs6__default.default.existsSync(daemonScript)) {
|
|
2337
2391
|
throw new Error(`Daemon entry script not found at: ${daemonScript}. Please rebuild the project.`);
|
|
2338
2392
|
}
|
|
2339
|
-
const logFd =
|
|
2393
|
+
const logFd = fs6__default.default.openSync(DAEMON_LOG_FILE, "a");
|
|
2340
2394
|
const daemon = child_process.spawn(process.execPath, [daemonScript], {
|
|
2341
2395
|
detached: true,
|
|
2342
2396
|
stdio: ["ignore", logFd, logFd],
|
|
@@ -2344,20 +2398,20 @@ function startDaemon() {
|
|
|
2344
2398
|
cwd: process.cwd()
|
|
2345
2399
|
});
|
|
2346
2400
|
daemon.unref();
|
|
2347
|
-
|
|
2348
|
-
|
|
2401
|
+
fs6__default.default.writeFileSync(DAEMON_PID_FILE, String(daemon.pid));
|
|
2402
|
+
fs6__default.default.closeSync(logFd);
|
|
2349
2403
|
}
|
|
2350
2404
|
function getDaemonPid() {
|
|
2351
|
-
if (!
|
|
2405
|
+
if (!fs6__default.default.existsSync(DAEMON_PID_FILE)) {
|
|
2352
2406
|
return null;
|
|
2353
2407
|
}
|
|
2354
2408
|
try {
|
|
2355
|
-
return Number(
|
|
2409
|
+
return Number(fs6__default.default.readFileSync(DAEMON_PID_FILE, "utf8"));
|
|
2356
2410
|
} catch {
|
|
2357
2411
|
return null;
|
|
2358
2412
|
}
|
|
2359
2413
|
}
|
|
2360
|
-
var VERSION = "0.0.
|
|
2414
|
+
var VERSION = "0.0.9";
|
|
2361
2415
|
var PROJECT_DIR = process.cwd();
|
|
2362
2416
|
function promptUser(question) {
|
|
2363
2417
|
const rl = readline__default.default.createInterface({
|
|
@@ -2469,11 +2523,11 @@ if (args[0] === "project") {
|
|
|
2469
2523
|
process.exit(1);
|
|
2470
2524
|
}
|
|
2471
2525
|
const resolvedPath = path10__default.default.resolve(projectPath);
|
|
2472
|
-
if (!
|
|
2526
|
+
if (!fs6__default.default.existsSync(resolvedPath)) {
|
|
2473
2527
|
console.error(pc5__default.default.red(`Path does not exist: ${resolvedPath}`));
|
|
2474
2528
|
process.exit(1);
|
|
2475
2529
|
}
|
|
2476
|
-
if (!
|
|
2530
|
+
if (!fs6__default.default.statSync(resolvedPath).isDirectory()) {
|
|
2477
2531
|
console.error(pc5__default.default.red(`Path is not a directory: ${resolvedPath}`));
|
|
2478
2532
|
process.exit(1);
|
|
2479
2533
|
}
|