agentpacks 1.7.13 → 1.8.0
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/api.js +48 -3658
- package/dist/cli/export-cmd.js +7 -1027
- package/dist/cli/generate.js +39 -2731
- package/dist/cli/import-cmd.js +19 -770
- package/dist/cli/info.js +4 -231
- package/dist/cli/init.js +9 -185
- package/dist/cli/install.js +4 -902
- package/dist/cli/login.js +6 -201
- package/dist/cli/models-explain.js +14 -1266
- package/dist/cli/pack/create.js +4 -146
- package/dist/cli/pack/enable.js +2 -65
- package/dist/cli/pack/list.js +5 -893
- package/dist/cli/pack/validate.js +4 -642
- package/dist/cli/publish.js +8 -679
- package/dist/cli/search.js +4 -209
- package/dist/core/config.d.ts +1 -1
- package/dist/core/config.js +1 -145
- package/dist/core/dependency-resolver.js +1 -126
- package/dist/core/feature-merger.js +3 -398
- package/dist/core/index.js +5 -1129
- package/dist/core/lockfile.js +2 -43
- package/dist/core/metarepo.js +1 -183
- package/dist/core/pack-loader.js +4 -841
- package/dist/core/profile-resolver.js +1 -110
- package/dist/exporters/cursor-plugin.js +6 -404
- package/dist/exporters/index.js +6 -404
- package/dist/features/agents.js +3 -161
- package/dist/features/commands.js +3 -161
- package/dist/features/hooks.js +3 -153
- package/dist/features/ignore.js +2 -43
- package/dist/features/index.js +4 -629
- package/dist/features/mcp.js +3 -143
- package/dist/features/models.js +3 -292
- package/dist/features/plugins.js +3 -139
- package/dist/features/rules.d.ts +0 -1
- package/dist/features/rules.js +3 -169
- package/dist/features/skills.js +3 -228
- package/dist/importers/claude-code.js +6 -195
- package/dist/importers/cursor.js +5 -355
- package/dist/importers/opencode.js +6 -346
- package/dist/importers/rulesync.js +5 -365
- package/dist/index.js +89 -4934
- package/dist/node/api.js +48 -3659
- package/dist/node/cli/export-cmd.js +7 -1028
- package/dist/node/cli/generate.js +39 -2732
- package/dist/node/cli/import-cmd.js +19 -771
- package/dist/node/cli/info.js +4 -232
- package/dist/node/cli/init.js +9 -186
- package/dist/node/cli/install.js +4 -903
- package/dist/node/cli/login.js +6 -202
- package/dist/node/cli/models-explain.js +14 -1267
- package/dist/node/cli/pack/create.js +4 -147
- package/dist/node/cli/pack/enable.js +2 -66
- package/dist/node/cli/pack/list.js +5 -894
- package/dist/node/cli/pack/validate.js +4 -643
- package/dist/node/cli/publish.js +8 -680
- package/dist/node/cli/search.js +4 -210
- package/dist/node/core/config.js +1 -146
- package/dist/node/core/dependency-resolver.js +1 -127
- package/dist/node/core/feature-merger.js +3 -399
- package/dist/node/core/index.js +5 -1130
- package/dist/node/core/lockfile.js +2 -44
- package/dist/node/core/metarepo.js +1 -184
- package/dist/node/core/pack-loader.js +4 -842
- package/dist/node/core/profile-resolver.js +1 -111
- package/dist/node/exporters/cursor-plugin.js +6 -405
- package/dist/node/exporters/index.js +6 -405
- package/dist/node/features/agents.js +3 -162
- package/dist/node/features/commands.js +3 -162
- package/dist/node/features/hooks.js +3 -154
- package/dist/node/features/ignore.js +2 -44
- package/dist/node/features/index.js +4 -630
- package/dist/node/features/mcp.js +3 -144
- package/dist/node/features/models.js +3 -293
- package/dist/node/features/plugins.js +3 -140
- package/dist/node/features/rules.js +3 -170
- package/dist/node/features/skills.js +3 -229
- package/dist/node/importers/claude-code.js +6 -196
- package/dist/node/importers/cursor.js +5 -356
- package/dist/node/importers/opencode.js +6 -347
- package/dist/node/importers/rulesync.js +5 -366
- package/dist/node/index.js +89 -4935
- package/dist/node/sources/git-ref.js +1 -56
- package/dist/node/sources/git.js +2 -222
- package/dist/node/sources/index.js +4 -714
- package/dist/node/sources/local.js +1 -24
- package/dist/node/sources/npm-ref.js +1 -56
- package/dist/node/sources/npm.js +2 -184
- package/dist/node/sources/registry-ref.js +1 -37
- package/dist/node/sources/registry.js +4 -355
- package/dist/node/targets/additional-targets.js +6 -587
- package/dist/node/targets/base-target.js +1 -23
- package/dist/node/targets/claude-code.js +6 -714
- package/dist/node/targets/codex-cli.js +3 -324
- package/dist/node/targets/copilot.js +5 -603
- package/dist/node/targets/cursor.js +6 -700
- package/dist/node/targets/gemini-cli.js +10 -319
- package/dist/node/targets/generic-md-target.js +6 -478
- package/dist/node/targets/index.js +32 -1873
- package/dist/node/targets/mistral-vibe.js +7 -661
- package/dist/node/targets/opencode.js +13 -723
- package/dist/node/targets/registry.js +32 -1864
- package/dist/node/utils/credentials.js +3 -38
- package/dist/node/utils/diff.js +5 -132
- package/dist/node/utils/filesystem.js +3 -124
- package/dist/node/utils/frontmatter.js +1 -24
- package/dist/node/utils/global.js +1 -53
- package/dist/node/utils/markdown.js +3 -30
- package/dist/node/utils/model-allowlist.js +1 -126
- package/dist/node/utils/model-guidance.js +2 -78
- package/dist/node/utils/registry-client.js +1 -142
- package/dist/node/utils/tarball.js +1 -49
- package/dist/sources/git-ref.js +1 -55
- package/dist/sources/git.js +2 -221
- package/dist/sources/index.js +4 -713
- package/dist/sources/local.js +1 -23
- package/dist/sources/npm-ref.js +1 -55
- package/dist/sources/npm.js +2 -183
- package/dist/sources/registry-ref.js +1 -36
- package/dist/sources/registry.js +4 -354
- package/dist/targets/additional-targets.js +6 -586
- package/dist/targets/base-target.js +1 -22
- package/dist/targets/claude-code.js +6 -713
- package/dist/targets/codex-cli.js +3 -323
- package/dist/targets/copilot.js +5 -602
- package/dist/targets/cursor.js +6 -699
- package/dist/targets/gemini-cli.js +10 -318
- package/dist/targets/generic-md-target.js +6 -477
- package/dist/targets/index.d.ts +0 -1
- package/dist/targets/index.js +32 -1872
- package/dist/targets/mistral-vibe.js +7 -660
- package/dist/targets/opencode.js +13 -722
- package/dist/targets/registry.js +32 -1863
- package/dist/utils/credentials.js +3 -37
- package/dist/utils/diff.js +5 -131
- package/dist/utils/filesystem.js +3 -123
- package/dist/utils/frontmatter.js +1 -23
- package/dist/utils/global.js +1 -52
- package/dist/utils/markdown.js +3 -29
- package/dist/utils/model-allowlist.js +1 -125
- package/dist/utils/model-guidance.js +2 -77
- package/dist/utils/registry-client.js +1 -141
- package/dist/utils/tarball.js +1 -48
- package/package.json +4 -16
- package/dist/node/targets/agents-md.js +0 -211
- package/dist/targets/agents-md.d.ts +0 -13
- package/dist/targets/agents-md.js +0 -211
|
@@ -1,44 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
// src/core/lockfile.ts
|
|
5
|
-
import { createHash } from "crypto";
|
|
6
|
-
import { existsSync, readFileSync, writeFileSync } from "fs";
|
|
7
|
-
import { resolve } from "path";
|
|
8
|
-
var LOCKFILE_VERSION = 1;
|
|
9
|
-
var LOCKFILE_NAME = "agentpacks.lock";
|
|
10
|
-
function loadLockfile(projectRoot) {
|
|
11
|
-
const filepath = resolve(projectRoot, LOCKFILE_NAME);
|
|
12
|
-
if (!existsSync(filepath)) {
|
|
13
|
-
return { lockfileVersion: LOCKFILE_VERSION, sources: {} };
|
|
14
|
-
}
|
|
15
|
-
const raw = readFileSync(filepath, "utf-8");
|
|
16
|
-
return JSON.parse(raw);
|
|
17
|
-
}
|
|
18
|
-
function saveLockfile(projectRoot, lockfile) {
|
|
19
|
-
const filepath = resolve(projectRoot, LOCKFILE_NAME);
|
|
20
|
-
writeFileSync(filepath, JSON.stringify(lockfile, null, 2) + `
|
|
21
|
-
`);
|
|
22
|
-
}
|
|
23
|
-
function getLockedSource(lockfile, sourceKey) {
|
|
24
|
-
return lockfile.sources[sourceKey];
|
|
25
|
-
}
|
|
26
|
-
function setLockedSource(lockfile, sourceKey, entry) {
|
|
27
|
-
lockfile.sources[sourceKey] = entry;
|
|
28
|
-
}
|
|
29
|
-
function computeIntegrity(content) {
|
|
30
|
-
const hash = createHash("sha256").update(content).digest("hex");
|
|
31
|
-
return `sha256-${hash}`;
|
|
32
|
-
}
|
|
33
|
-
function isLockfileFrozenValid(lockfile, sourceKeys) {
|
|
34
|
-
const missing = sourceKeys.filter((key) => !(key in lockfile.sources));
|
|
35
|
-
return { valid: missing.length === 0, missing };
|
|
36
|
-
}
|
|
37
|
-
export {
|
|
38
|
-
setLockedSource,
|
|
39
|
-
saveLockfile,
|
|
40
|
-
loadLockfile,
|
|
41
|
-
isLockfileFrozenValid,
|
|
42
|
-
getLockedSource,
|
|
43
|
-
computeIntegrity
|
|
44
|
-
};
|
|
1
|
+
import{createRequire as J}from"node:module";var Y=J(import.meta.url);import{createHash as P}from"crypto";import{existsSync as Q,readFileSync as T,writeFileSync as U}from"fs";import{resolve as B}from"path";var W=1,D="agentpacks.lock";function V(b){let q=B(b,D);if(!Q(q))return{lockfileVersion:W,sources:{}};let z=T(q,"utf-8");return JSON.parse(z)}function g(b,q){let z=B(b,D);U(z,JSON.stringify(q,null,2)+`
|
|
2
|
+
`)}function m(b,q){return b.sources[q]}function w(b,q,z){b.sources[q]=z}function A(b){return`sha256-${P("sha256").update(b).digest("hex")}`}function M(b,q){let z=q.filter((G)=>!(G in b.sources));return{valid:z.length===0,missing:z}}export{w as setLockedSource,g as saveLockfile,V as loadLockfile,M as isLockfileFrozenValid,m as getLockedSource,A as computeIntegrity};
|
|
@@ -1,184 +1 @@
|
|
|
1
|
-
import {
|
|
2
|
-
var __require = /* @__PURE__ */ createRequire(import.meta.url);
|
|
3
|
-
|
|
4
|
-
// src/core/config.ts
|
|
5
|
-
import { existsSync, readFileSync } from "fs";
|
|
6
|
-
import { parse as parseJsonc } from "jsonc-parser";
|
|
7
|
-
import { resolve } from "path";
|
|
8
|
-
import { z } from "zod";
|
|
9
|
-
var TARGET_IDS = [
|
|
10
|
-
"opencode",
|
|
11
|
-
"cursor",
|
|
12
|
-
"claudecode",
|
|
13
|
-
"codexcli",
|
|
14
|
-
"mistralvibe",
|
|
15
|
-
"geminicli",
|
|
16
|
-
"copilot",
|
|
17
|
-
"agentsmd",
|
|
18
|
-
"cline",
|
|
19
|
-
"kilo",
|
|
20
|
-
"roo",
|
|
21
|
-
"qwencode",
|
|
22
|
-
"kiro",
|
|
23
|
-
"factorydroid",
|
|
24
|
-
"antigravity",
|
|
25
|
-
"junie",
|
|
26
|
-
"augmentcode",
|
|
27
|
-
"windsurf",
|
|
28
|
-
"warp",
|
|
29
|
-
"replit",
|
|
30
|
-
"zed"
|
|
31
|
-
];
|
|
32
|
-
var FEATURE_IDS = [
|
|
33
|
-
"rules",
|
|
34
|
-
"commands",
|
|
35
|
-
"agents",
|
|
36
|
-
"skills",
|
|
37
|
-
"hooks",
|
|
38
|
-
"plugins",
|
|
39
|
-
"mcp",
|
|
40
|
-
"ignore",
|
|
41
|
-
"models"
|
|
42
|
-
];
|
|
43
|
-
var REPO_MODES = ["repo", "monorepo", "metarepo"];
|
|
44
|
-
var PackManifestSchema = z.object({
|
|
45
|
-
name: z.string().min(1),
|
|
46
|
-
version: z.string().default("1.0.0"),
|
|
47
|
-
description: z.string().default(""),
|
|
48
|
-
author: z.union([
|
|
49
|
-
z.string(),
|
|
50
|
-
z.object({ name: z.string(), email: z.string().optional() })
|
|
51
|
-
]).optional(),
|
|
52
|
-
homepage: z.string().optional(),
|
|
53
|
-
repository: z.union([
|
|
54
|
-
z.string(),
|
|
55
|
-
z.object({ url: z.string(), type: z.string().optional() })
|
|
56
|
-
]).optional(),
|
|
57
|
-
license: z.string().optional(),
|
|
58
|
-
logo: z.string().optional(),
|
|
59
|
-
tags: z.array(z.string()).default([]),
|
|
60
|
-
dependencies: z.array(z.string()).default([]),
|
|
61
|
-
conflicts: z.array(z.string()).default([]),
|
|
62
|
-
targets: z.union([z.literal("*"), z.array(z.string())]).default("*"),
|
|
63
|
-
features: z.union([z.literal("*"), z.array(z.string())]).default("*")
|
|
64
|
-
});
|
|
65
|
-
var FeaturesSchema = z.union([
|
|
66
|
-
z.literal("*"),
|
|
67
|
-
z.array(z.string()),
|
|
68
|
-
z.record(z.string(), z.union([z.literal("*"), z.array(z.string())]))
|
|
69
|
-
]);
|
|
70
|
-
var WorkspaceConfigSchema = z.object({
|
|
71
|
-
$schema: z.string().optional(),
|
|
72
|
-
packs: z.array(z.string()).default(["./packs/default"]),
|
|
73
|
-
disabled: z.array(z.string()).default([]),
|
|
74
|
-
targets: z.union([z.literal("*"), z.array(z.string())]).default("*"),
|
|
75
|
-
features: FeaturesSchema.default("*"),
|
|
76
|
-
mode: z.enum(REPO_MODES).default("repo"),
|
|
77
|
-
baseDirs: z.array(z.string()).default(["."]),
|
|
78
|
-
global: z.boolean().default(false),
|
|
79
|
-
delete: z.boolean().default(true),
|
|
80
|
-
verbose: z.boolean().default(false),
|
|
81
|
-
silent: z.boolean().default(false),
|
|
82
|
-
overrides: z.record(z.string(), z.record(z.string(), z.string())).default({}),
|
|
83
|
-
sources: z.array(z.object({
|
|
84
|
-
source: z.string(),
|
|
85
|
-
packs: z.array(z.string()).optional(),
|
|
86
|
-
skills: z.array(z.string()).optional()
|
|
87
|
-
})).default([]),
|
|
88
|
-
modelProfile: z.string().optional()
|
|
89
|
-
});
|
|
90
|
-
var CONFIG_FILES = ["agentpacks.local.jsonc", "agentpacks.jsonc"];
|
|
91
|
-
function loadWorkspaceConfig(projectRoot) {
|
|
92
|
-
for (const filename of CONFIG_FILES) {
|
|
93
|
-
const filepath = resolve(projectRoot, filename);
|
|
94
|
-
if (existsSync(filepath)) {
|
|
95
|
-
const raw = readFileSync(filepath, "utf-8");
|
|
96
|
-
const parsed = parseJsonc(raw);
|
|
97
|
-
return WorkspaceConfigSchema.parse(parsed);
|
|
98
|
-
}
|
|
99
|
-
}
|
|
100
|
-
return WorkspaceConfigSchema.parse({});
|
|
101
|
-
}
|
|
102
|
-
function loadPackManifest(packDir) {
|
|
103
|
-
const filepath = resolve(packDir, "pack.json");
|
|
104
|
-
if (!existsSync(filepath)) {
|
|
105
|
-
const dirName = packDir.split("/").pop() ?? "unknown";
|
|
106
|
-
return PackManifestSchema.parse({ name: dirName });
|
|
107
|
-
}
|
|
108
|
-
const raw = readFileSync(filepath, "utf-8");
|
|
109
|
-
const parsed = JSON.parse(raw);
|
|
110
|
-
return PackManifestSchema.parse(parsed);
|
|
111
|
-
}
|
|
112
|
-
function resolveFeatures(config, targetId) {
|
|
113
|
-
const { features } = config;
|
|
114
|
-
if (features === "*") {
|
|
115
|
-
return [...FEATURE_IDS];
|
|
116
|
-
}
|
|
117
|
-
if (Array.isArray(features)) {
|
|
118
|
-
if (features.includes("*"))
|
|
119
|
-
return [...FEATURE_IDS];
|
|
120
|
-
return features.filter((f) => FEATURE_IDS.includes(f));
|
|
121
|
-
}
|
|
122
|
-
const targetFeatures = features[targetId];
|
|
123
|
-
if (!targetFeatures)
|
|
124
|
-
return [];
|
|
125
|
-
if (targetFeatures === "*")
|
|
126
|
-
return [...FEATURE_IDS];
|
|
127
|
-
if (Array.isArray(targetFeatures) && targetFeatures.includes("*"))
|
|
128
|
-
return [...FEATURE_IDS];
|
|
129
|
-
return targetFeatures.filter((f) => FEATURE_IDS.includes(f));
|
|
130
|
-
}
|
|
131
|
-
function resolveTargets(config) {
|
|
132
|
-
if (config.targets === "*")
|
|
133
|
-
return [...TARGET_IDS];
|
|
134
|
-
return config.targets;
|
|
135
|
-
}
|
|
136
|
-
|
|
137
|
-
// src/core/metarepo.ts
|
|
138
|
-
import { existsSync as existsSync2, readdirSync } from "fs";
|
|
139
|
-
import { join, relative } from "path";
|
|
140
|
-
function discoverMetarepoEntries(metarepoRoot, options = {}) {
|
|
141
|
-
const maxDepth = options.maxDepth ?? 2;
|
|
142
|
-
const entries = [];
|
|
143
|
-
scanDir(metarepoRoot, metarepoRoot, 0, maxDepth, entries);
|
|
144
|
-
return entries;
|
|
145
|
-
}
|
|
146
|
-
function scanDir(root, dir, depth, maxDepth, entries) {
|
|
147
|
-
if (depth > maxDepth)
|
|
148
|
-
return;
|
|
149
|
-
const children = readdirSync(dir, { withFileTypes: true });
|
|
150
|
-
for (const child of children) {
|
|
151
|
-
if (!child.isDirectory())
|
|
152
|
-
continue;
|
|
153
|
-
if (child.name.startsWith(".") || child.name === "node_modules")
|
|
154
|
-
continue;
|
|
155
|
-
const childPath = join(dir, child.name);
|
|
156
|
-
const hasConfig = existsSync2(join(childPath, "agentpacks.jsonc")) || existsSync2(join(childPath, "agentpacks.local.jsonc"));
|
|
157
|
-
const hasPackageJson = existsSync2(join(childPath, "package.json"));
|
|
158
|
-
if (hasConfig || hasPackageJson) {
|
|
159
|
-
let config = null;
|
|
160
|
-
if (hasConfig) {
|
|
161
|
-
try {
|
|
162
|
-
config = loadWorkspaceConfig(childPath);
|
|
163
|
-
} catch {
|
|
164
|
-
config = null;
|
|
165
|
-
}
|
|
166
|
-
}
|
|
167
|
-
entries.push({
|
|
168
|
-
path: relative(root, childPath),
|
|
169
|
-
absolutePath: childPath,
|
|
170
|
-
hasConfig,
|
|
171
|
-
config
|
|
172
|
-
});
|
|
173
|
-
}
|
|
174
|
-
scanDir(root, childPath, depth + 1, maxDepth, entries);
|
|
175
|
-
}
|
|
176
|
-
}
|
|
177
|
-
function getMetarepoBaseDirs(metarepoRoot) {
|
|
178
|
-
const entries = discoverMetarepoEntries(metarepoRoot);
|
|
179
|
-
return entries.filter((e) => e.hasConfig).map((e) => e.path);
|
|
180
|
-
}
|
|
181
|
-
export {
|
|
182
|
-
getMetarepoBaseDirs,
|
|
183
|
-
discoverMetarepoEntries
|
|
184
|
-
};
|
|
1
|
+
import{createRequire as C}from"node:module";var F=C(import.meta.url);import{existsSync as O,readFileSync as W}from"fs";import{parse as j}from"jsonc-parser";import{resolve as w}from"path";import{z as q}from"zod";var y=["opencode","cursor","claudecode","codexcli","mistralvibe","geminicli","copilot","cline","kilo","roo","qwencode","kiro","factorydroid","antigravity","junie","augmentcode","windsurf","warp","replit","zed"],Y=["rules","commands","agents","skills","hooks","plugins","mcp","ignore","models"],T=["repo","monorepo","metarepo"],N=q.object({name:q.string().min(1),version:q.string().default("1.0.0"),description:q.string().default(""),author:q.union([q.string(),q.object({name:q.string(),email:q.string().optional()})]).optional(),homepage:q.string().optional(),repository:q.union([q.string(),q.object({url:q.string(),type:q.string().optional()})]).optional(),license:q.string().optional(),logo:q.string().optional(),tags:q.array(q.string()).default([]),dependencies:q.array(q.string()).default([]),conflicts:q.array(q.string()).default([]),targets:q.union([q.literal("*"),q.array(q.string())]).default("*"),features:q.union([q.literal("*"),q.array(q.string())]).default("*")}),_=q.union([q.literal("*"),q.array(q.string()),q.record(q.string(),q.union([q.literal("*"),q.array(q.string())]))]),G=q.object({$schema:q.string().optional(),packs:q.array(q.string()).default(["./packs/default"]),disabled:q.array(q.string()).default([]),targets:q.union([q.literal("*"),q.array(q.string())]).default("*"),features:_.default("*"),mode:q.enum(T).default("repo"),baseDirs:q.array(q.string()).default(["."]),global:q.boolean().default(!1),delete:q.boolean().default(!0),verbose:q.boolean().default(!1),silent:q.boolean().default(!1),overrides:q.record(q.string(),q.record(q.string(),q.string())).default({}),sources:q.array(q.object({source:q.string(),packs:q.array(q.string()).optional(),skills:q.array(q.string()).optional()})).default([]),modelProfile:q.string().optional()}),k=["agentpacks.local.jsonc","agentpacks.jsonc"];function M(H){for(let Q of k){let B=w(H,Q);if(O(B)){let K=W(B,"utf-8"),V=j(K);return G.parse(V)}}return G.parse({})}function g(H){let Q=w(H,"pack.json");if(!O(Q)){let V=H.split("/").pop()??"unknown";return N.parse({name:V})}let B=W(Q,"utf-8"),K=JSON.parse(B);return N.parse(K)}function l(H,Q){let{features:B}=H;if(B==="*")return[...Y];if(Array.isArray(B)){if(B.includes("*"))return[...Y];return B.filter((V)=>Y.includes(V))}let K=B[Q];if(!K)return[];if(K==="*")return[...Y];if(Array.isArray(K)&&K.includes("*"))return[...Y];return K.filter((V)=>Y.includes(V))}function d(H){if(H.targets==="*")return[...y];return H.targets}import{existsSync as J,readdirSync as x}from"fs";import{join as $,relative as I}from"path";function P(H,Q={}){let B=Q.maxDepth??2,K=[];return v(H,H,0,B,K),K}function v(H,Q,B,K,V){if(B>K)return;let U=x(Q,{withFileTypes:!0});for(let Z of U){if(!Z.isDirectory())continue;if(Z.name.startsWith(".")||Z.name==="node_modules")continue;let X=$(Q,Z.name),b=J($(X,"agentpacks.jsonc"))||J($(X,"agentpacks.local.jsonc")),A=J($(X,"package.json"));if(b||A){let L=null;if(b)try{L=M(X)}catch{L=null}V.push({path:I(H,X),absolutePath:X,hasConfig:b,config:L})}v(H,X,B+1,K,V)}}function c(H){return P(H).filter((B)=>B.hasConfig).map((B)=>B.path)}export{c as getMetarepoBaseDirs,P as discoverMetarepoEntries};
|