md4ai 0.14.0 → 0.14.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.bundled.js +43 -29
- package/package.json +2 -2
package/dist/index.bundled.js
CHANGED
|
@@ -122,7 +122,7 @@ var CURRENT_VERSION;
|
|
|
122
122
|
var init_check_update = __esm({
|
|
123
123
|
"dist/check-update.js"() {
|
|
124
124
|
"use strict";
|
|
125
|
-
CURRENT_VERSION = true ? "0.14.
|
|
125
|
+
CURRENT_VERSION = true ? "0.14.1" : "0.0.0-dev";
|
|
126
126
|
}
|
|
127
127
|
});
|
|
128
128
|
|
|
@@ -1151,11 +1151,23 @@ var init_auth2 = __esm({
|
|
|
1151
1151
|
});
|
|
1152
1152
|
|
|
1153
1153
|
// dist/vercel/discover-projects.js
|
|
1154
|
-
import { readFile as readFile6,
|
|
1154
|
+
import { readFile as readFile6, readdir as readdir2 } from "node:fs/promises";
|
|
1155
1155
|
import { join as join8, dirname as dirname2, relative } from "node:path";
|
|
1156
1156
|
async function discoverVercelProjects(projectRoot) {
|
|
1157
1157
|
const found = /* @__PURE__ */ new Map();
|
|
1158
|
-
|
|
1158
|
+
let entries;
|
|
1159
|
+
try {
|
|
1160
|
+
entries = await readdir2(projectRoot, { recursive: true, withFileTypes: true });
|
|
1161
|
+
} catch {
|
|
1162
|
+
return [];
|
|
1163
|
+
}
|
|
1164
|
+
for (const entry of entries) {
|
|
1165
|
+
if (!entry.isFile() || entry.name !== "project.json")
|
|
1166
|
+
continue;
|
|
1167
|
+
const parentName = typeof entry.parentPath === "string" ? entry.parentPath : entry.path;
|
|
1168
|
+
if (!parentName.endsWith(".vercel"))
|
|
1169
|
+
continue;
|
|
1170
|
+
const filePath = join8(parentName, entry.name);
|
|
1159
1171
|
try {
|
|
1160
1172
|
const data = await readFile6(filePath, "utf-8");
|
|
1161
1173
|
const parsed = JSON.parse(data);
|
|
@@ -1250,7 +1262,7 @@ var init_fetch_env_vars = __esm({
|
|
|
1250
1262
|
});
|
|
1251
1263
|
|
|
1252
1264
|
// dist/scanner/env-manifest-scanner.js
|
|
1253
|
-
import { readFile as readFile7,
|
|
1265
|
+
import { readFile as readFile7, readdir as readdir3 } from "node:fs/promises";
|
|
1254
1266
|
import { execFile } from "node:child_process";
|
|
1255
1267
|
import { promisify } from "node:util";
|
|
1256
1268
|
import { join as join9, relative as relative2 } from "node:path";
|
|
@@ -1519,21 +1531,23 @@ async function parseWorkflowSecrets(projectRoot) {
|
|
|
1519
1531
|
return [];
|
|
1520
1532
|
const refs = [];
|
|
1521
1533
|
const secretRe = /\$\{\{\s*secrets\.([A-Za-z_][A-Za-z0-9_]*)\s*\}\}/g;
|
|
1522
|
-
|
|
1523
|
-
|
|
1524
|
-
|
|
1525
|
-
|
|
1526
|
-
|
|
1527
|
-
|
|
1528
|
-
|
|
1529
|
-
|
|
1530
|
-
|
|
1531
|
-
|
|
1532
|
-
|
|
1533
|
-
|
|
1534
|
-
|
|
1535
|
-
|
|
1536
|
-
|
|
1534
|
+
const files = await readdir3(workflowsDir);
|
|
1535
|
+
for (const file of files) {
|
|
1536
|
+
if (!file.endsWith(".yml") && !file.endsWith(".yaml"))
|
|
1537
|
+
continue;
|
|
1538
|
+
const filePath = join9(workflowsDir, file);
|
|
1539
|
+
const content = await readFile7(filePath, "utf-8");
|
|
1540
|
+
const secrets = /* @__PURE__ */ new Set();
|
|
1541
|
+
let m;
|
|
1542
|
+
while ((m = secretRe.exec(content)) !== null) {
|
|
1543
|
+
secrets.add(m[1]);
|
|
1544
|
+
}
|
|
1545
|
+
secretRe.lastIndex = 0;
|
|
1546
|
+
if (secrets.size > 0) {
|
|
1547
|
+
refs.push({
|
|
1548
|
+
workflowFile: relative2(projectRoot, filePath),
|
|
1549
|
+
secretsUsed: [...secrets].sort()
|
|
1550
|
+
});
|
|
1537
1551
|
}
|
|
1538
1552
|
}
|
|
1539
1553
|
return refs;
|
|
@@ -1660,7 +1674,7 @@ var init_env_manifest_scanner = __esm({
|
|
|
1660
1674
|
});
|
|
1661
1675
|
|
|
1662
1676
|
// dist/scanner/marketplace-scanner.js
|
|
1663
|
-
import { readFile as readFile8, readdir as
|
|
1677
|
+
import { readFile as readFile8, readdir as readdir4, stat } from "node:fs/promises";
|
|
1664
1678
|
import { join as join10, resolve as resolve3 } from "node:path";
|
|
1665
1679
|
import { existsSync as existsSync5 } from "node:fs";
|
|
1666
1680
|
import { homedir as homedir6 } from "node:os";
|
|
@@ -1729,7 +1743,7 @@ async function discoverSkills(installPath) {
|
|
|
1729
1743
|
return [];
|
|
1730
1744
|
const skills = [];
|
|
1731
1745
|
try {
|
|
1732
|
-
const entries = await
|
|
1746
|
+
const entries = await readdir4(skillsDir, { withFileTypes: true });
|
|
1733
1747
|
for (const entry of entries) {
|
|
1734
1748
|
if (!entry.isDirectory())
|
|
1735
1749
|
continue;
|
|
@@ -1986,7 +2000,7 @@ var init_doppler_scanner = __esm({
|
|
|
1986
2000
|
});
|
|
1987
2001
|
|
|
1988
2002
|
// dist/scanner/index.js
|
|
1989
|
-
import { readdir as
|
|
2003
|
+
import { readdir as readdir5 } from "node:fs/promises";
|
|
1990
2004
|
import { join as join12, relative as relative3 } from "node:path";
|
|
1991
2005
|
import { existsSync as existsSync7 } from "node:fs";
|
|
1992
2006
|
import { homedir as homedir7 } from "node:os";
|
|
@@ -2073,7 +2087,7 @@ async function discoverFiles(projectRoot) {
|
|
|
2073
2087
|
return [...new Set(files)];
|
|
2074
2088
|
}
|
|
2075
2089
|
async function walkDir(dir, projectRoot, files) {
|
|
2076
|
-
const entries = await
|
|
2090
|
+
const entries = await readdir5(dir, { withFileTypes: true });
|
|
2077
2091
|
for (const entry of entries) {
|
|
2078
2092
|
const fullPath = join12(dir, entry.name);
|
|
2079
2093
|
if (entry.isDirectory()) {
|
|
@@ -2878,7 +2892,7 @@ import { readFile as readFile12 } from "node:fs/promises";
|
|
|
2878
2892
|
import { join as join15 } from "node:path";
|
|
2879
2893
|
import { homedir as homedir9 } from "node:os";
|
|
2880
2894
|
import { existsSync as existsSync13 } from "node:fs";
|
|
2881
|
-
import { readdir as
|
|
2895
|
+
import { readdir as readdir6 } from "node:fs/promises";
|
|
2882
2896
|
async function readJsonSafe(path) {
|
|
2883
2897
|
try {
|
|
2884
2898
|
if (!existsSync13(path))
|
|
@@ -2954,14 +2968,14 @@ async function readAllMcpConfigs() {
|
|
|
2954
2968
|
const pluginsBase = join15(home, ".claude", "plugins", "marketplaces");
|
|
2955
2969
|
if (existsSync13(pluginsBase)) {
|
|
2956
2970
|
try {
|
|
2957
|
-
const marketplaces = await
|
|
2971
|
+
const marketplaces = await readdir6(pluginsBase, { withFileTypes: true });
|
|
2958
2972
|
for (const mp of marketplaces) {
|
|
2959
2973
|
if (!mp.isDirectory())
|
|
2960
2974
|
continue;
|
|
2961
2975
|
const extDir = join15(pluginsBase, mp.name, "external_plugins");
|
|
2962
2976
|
if (!existsSync13(extDir))
|
|
2963
2977
|
continue;
|
|
2964
|
-
const plugins = await
|
|
2978
|
+
const plugins = await readdir6(extDir, { withFileTypes: true });
|
|
2965
2979
|
for (const plugin of plugins) {
|
|
2966
2980
|
if (!plugin.isDirectory())
|
|
2967
2981
|
continue;
|
|
@@ -2975,16 +2989,16 @@ async function readAllMcpConfigs() {
|
|
|
2975
2989
|
const cacheBase = join15(home, ".claude", "plugins", "cache");
|
|
2976
2990
|
if (existsSync13(cacheBase)) {
|
|
2977
2991
|
try {
|
|
2978
|
-
const registries = await
|
|
2992
|
+
const registries = await readdir6(cacheBase, { withFileTypes: true });
|
|
2979
2993
|
for (const reg of registries) {
|
|
2980
2994
|
if (!reg.isDirectory())
|
|
2981
2995
|
continue;
|
|
2982
2996
|
const regDir = join15(cacheBase, reg.name);
|
|
2983
|
-
const plugins = await
|
|
2997
|
+
const plugins = await readdir6(regDir, { withFileTypes: true });
|
|
2984
2998
|
for (const plugin of plugins) {
|
|
2985
2999
|
if (!plugin.isDirectory())
|
|
2986
3000
|
continue;
|
|
2987
|
-
const versionDirs = await
|
|
3001
|
+
const versionDirs = await readdir6(join15(regDir, plugin.name), { withFileTypes: true });
|
|
2988
3002
|
for (const ver of versionDirs) {
|
|
2989
3003
|
if (!ver.isDirectory())
|
|
2990
3004
|
continue;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "md4ai",
|
|
3
|
-
"version": "0.14.
|
|
3
|
+
"version": "0.14.1",
|
|
4
4
|
"description": "CLI for MD4AI — scan Claude projects and sync to your dashboard",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -31,7 +31,7 @@
|
|
|
31
31
|
"directory": "cli"
|
|
32
32
|
},
|
|
33
33
|
"engines": {
|
|
34
|
-
"node": ">=
|
|
34
|
+
"node": ">=20"
|
|
35
35
|
},
|
|
36
36
|
"dependencies": {
|
|
37
37
|
"@inquirer/prompts": "^8.3.0",
|