loadouts 0.2.0 → 0.2.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/cli/commands/doctor.d.ts.map +1 -1
- package/dist/cli/commands/doctor.js +484 -50
- package/dist/cli/commands/doctor.js.map +1 -1
- package/dist/cli/commands/init.d.ts.map +1 -1
- package/dist/cli/commands/init.js +6 -1
- package/dist/cli/commands/init.js.map +1 -1
- package/dist/cli/commands/install.d.ts +5 -2
- package/dist/cli/commands/install.d.ts.map +1 -1
- package/dist/cli/commands/install.js +101 -78
- package/dist/cli/commands/install.js.map +1 -1
- package/dist/core/import-discovery.d.ts +7 -4
- package/dist/core/import-discovery.d.ts.map +1 -1
- package/dist/core/import-discovery.js +287 -142
- package/dist/core/import-discovery.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,34 +3,14 @@
|
|
|
3
3
|
* that can be imported into loadout.
|
|
4
4
|
*/
|
|
5
5
|
import * as fs from "node:fs";
|
|
6
|
+
import * as os from "node:os";
|
|
6
7
|
import * as path from "node:path";
|
|
7
|
-
import { fileExists, isDirectory, isSymlink, listFiles,
|
|
8
|
-
|
|
9
|
-
"claude-code": {
|
|
10
|
-
rules: { dir: ".claude/rules", ext: ".md" },
|
|
11
|
-
skills: { dir: ".claude/skills" },
|
|
12
|
-
},
|
|
13
|
-
cursor: {
|
|
14
|
-
rules: { dir: ".cursor/rules", ext: ".mdc" },
|
|
15
|
-
skills: { dir: ".cursor/skills" },
|
|
16
|
-
},
|
|
17
|
-
opencode: {
|
|
18
|
-
rules: { dir: ".opencode/rules", ext: ".md" },
|
|
19
|
-
skills: { dir: ".opencode/skills" },
|
|
20
|
-
},
|
|
21
|
-
codex: {
|
|
22
|
-
// codex doesn't support rules
|
|
23
|
-
skills: { dir: ".agents/skills" },
|
|
24
|
-
},
|
|
25
|
-
pi: {
|
|
26
|
-
// pi doesn't have native rules support
|
|
27
|
-
skills: { dir: ".pi/skills" },
|
|
28
|
-
},
|
|
29
|
-
};
|
|
8
|
+
import { fileExists, isDirectory, isSymlink, listFiles, walkDir } from "../lib/fs.js";
|
|
9
|
+
import { registry } from "./registry.js";
|
|
30
10
|
// Instruction file locations to check (in priority order)
|
|
31
11
|
const INSTRUCTION_FILES = ["AGENTS.md", "CLAUDE.md"];
|
|
32
12
|
// ---------------------------------------------------------------------------
|
|
33
|
-
//
|
|
13
|
+
// Filesystem helpers
|
|
34
14
|
// ---------------------------------------------------------------------------
|
|
35
15
|
/**
|
|
36
16
|
* Get file/directory size.
|
|
@@ -53,86 +33,108 @@ function getSize(filePath) {
|
|
|
53
33
|
function getMtime(filePath) {
|
|
54
34
|
return fs.statSync(filePath).mtime;
|
|
55
35
|
}
|
|
36
|
+
function readArtifactMetadata(filePath) {
|
|
37
|
+
try {
|
|
38
|
+
return {
|
|
39
|
+
size: getSize(filePath),
|
|
40
|
+
mtime: getMtime(filePath),
|
|
41
|
+
};
|
|
42
|
+
}
|
|
43
|
+
catch {
|
|
44
|
+
return null;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
56
47
|
/**
|
|
57
|
-
*
|
|
48
|
+
* Convert Windows path separators to POSIX-style separators.
|
|
58
49
|
*/
|
|
59
|
-
function
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
50
|
+
function toPosix(filePath) {
|
|
51
|
+
return filePath.split(path.sep).join("/");
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Escape string for safe regex inclusion.
|
|
55
|
+
*/
|
|
56
|
+
function escapeRegex(value) {
|
|
57
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* Select the path template for the requested scope.
|
|
61
|
+
*/
|
|
62
|
+
function getScopeTemplate(mappingPath, scope) {
|
|
63
|
+
return typeof mappingPath === "string" ? mappingPath : mappingPath[scope];
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Resolve a tool base path to absolute for the current scope.
|
|
67
|
+
*/
|
|
68
|
+
function resolveAbsoluteBasePath(scanRoot, basePath) {
|
|
69
|
+
return path.isAbsolute(basePath) ? basePath : path.join(scanRoot, basePath);
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Format a path for display relative to scan root when possible.
|
|
73
|
+
*/
|
|
74
|
+
function toDisplayPath(scanRoot, absolutePath) {
|
|
75
|
+
const rel = path.relative(scanRoot, absolutePath);
|
|
76
|
+
if (!rel.startsWith("..") && !path.isAbsolute(rel)) {
|
|
77
|
+
return toPosix(rel);
|
|
80
78
|
}
|
|
81
|
-
|
|
79
|
+
const home = os.homedir();
|
|
80
|
+
if (absolutePath === home)
|
|
81
|
+
return "~";
|
|
82
|
+
if (absolutePath.startsWith(`${home}${path.sep}`)) {
|
|
83
|
+
return `~/${toPosix(path.relative(home, absolutePath))}`;
|
|
84
|
+
}
|
|
85
|
+
return toPosix(absolutePath);
|
|
82
86
|
}
|
|
83
87
|
/**
|
|
84
|
-
*
|
|
85
|
-
*
|
|
86
|
-
* to avoid duplicate detection.
|
|
88
|
+
* Build a regex matcher for a concrete template path.
|
|
89
|
+
* Supported tokens: {base} {home} {stem} {ext} {name} {relative} {kind}
|
|
87
90
|
*/
|
|
88
|
-
function
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
// Check if target is inside another tool's directory
|
|
100
|
-
for (const [otherTool, otherLoc] of Object.entries(TOOL_LOCATIONS)) {
|
|
101
|
-
if (otherTool === tool || !otherLoc.skills)
|
|
102
|
-
continue;
|
|
103
|
-
const otherSkillsDir = path.join(projectRoot, otherLoc.skills.dir);
|
|
104
|
-
if (target.startsWith(fs.realpathSync(path.dirname(otherSkillsDir)))) {
|
|
105
|
-
// This is a symlink to another tool's skills - skip to avoid duplicates
|
|
106
|
-
return [];
|
|
107
|
-
}
|
|
91
|
+
function matchTemplatePath(templatePath, actualPath) {
|
|
92
|
+
const captures = {};
|
|
93
|
+
const tokens = [];
|
|
94
|
+
let pattern = "";
|
|
95
|
+
for (let i = 0; i < templatePath.length; i += 1) {
|
|
96
|
+
const ch = templatePath[i];
|
|
97
|
+
if (ch === "{") {
|
|
98
|
+
const end = templatePath.indexOf("}", i + 1);
|
|
99
|
+
if (end === -1) {
|
|
100
|
+
pattern += escapeRegex(ch);
|
|
101
|
+
continue;
|
|
108
102
|
}
|
|
103
|
+
const token = templatePath.slice(i + 1, end);
|
|
104
|
+
tokens.push(token);
|
|
105
|
+
switch (token) {
|
|
106
|
+
case "stem":
|
|
107
|
+
case "name":
|
|
108
|
+
case "kind":
|
|
109
|
+
pattern += "([^/]+)";
|
|
110
|
+
break;
|
|
111
|
+
case "ext":
|
|
112
|
+
pattern += "([^/]*)";
|
|
113
|
+
break;
|
|
114
|
+
case "relative":
|
|
115
|
+
pattern += "(.+)";
|
|
116
|
+
break;
|
|
117
|
+
case "base":
|
|
118
|
+
case "home":
|
|
119
|
+
pattern += "(.+)";
|
|
120
|
+
break;
|
|
121
|
+
default:
|
|
122
|
+
pattern += "(.+)";
|
|
123
|
+
break;
|
|
124
|
+
}
|
|
125
|
+
i = end;
|
|
126
|
+
continue;
|
|
109
127
|
}
|
|
110
|
-
|
|
111
|
-
// If we can't resolve the symlink, proceed normally
|
|
112
|
-
}
|
|
128
|
+
pattern += escapeRegex(ch);
|
|
113
129
|
}
|
|
114
|
-
const
|
|
115
|
-
const
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
// Check for SKILL.md to confirm it's a valid skill
|
|
121
|
-
const skillMdPath = path.join(skillPath, "SKILL.md");
|
|
122
|
-
if (!fileExists(skillMdPath))
|
|
123
|
-
continue;
|
|
124
|
-
artifacts.push({
|
|
125
|
-
kind: "skill",
|
|
126
|
-
name: entry,
|
|
127
|
-
sourcePath: skillPath,
|
|
128
|
-
displayPath: path.join(locations.skills.dir, entry),
|
|
129
|
-
tool,
|
|
130
|
-
size: getSize(skillPath),
|
|
131
|
-
mtime: getMtime(skillPath),
|
|
132
|
-
destPath: `skills/${entry}`,
|
|
133
|
-
});
|
|
130
|
+
const regex = new RegExp(`^${pattern}$`);
|
|
131
|
+
const match = actualPath.match(regex);
|
|
132
|
+
if (!match)
|
|
133
|
+
return { matched: false, captures };
|
|
134
|
+
for (let i = 0; i < tokens.length; i += 1) {
|
|
135
|
+
captures[tokens[i]] = match[i + 1] ?? "";
|
|
134
136
|
}
|
|
135
|
-
return
|
|
137
|
+
return { matched: true, captures };
|
|
136
138
|
}
|
|
137
139
|
/**
|
|
138
140
|
* Check if a file at project root is managed by loadout.
|
|
@@ -168,90 +170,236 @@ function isClaudeWrapper(filePath) {
|
|
|
168
170
|
return false;
|
|
169
171
|
}
|
|
170
172
|
}
|
|
173
|
+
/**
|
|
174
|
+
* Infer destination path for a discovered artifact.
|
|
175
|
+
*
|
|
176
|
+
* For built-ins we preserve canonical layout.
|
|
177
|
+
* For custom/future kinds we try several heuristics and keep whichever
|
|
178
|
+
* path is accepted by the kind's detect() predicate.
|
|
179
|
+
*/
|
|
180
|
+
function inferDestPath(kindId, toolName, strippedTargetPath, captures) {
|
|
181
|
+
const kind = registry.getKind(kindId);
|
|
182
|
+
if (!kind)
|
|
183
|
+
return null;
|
|
184
|
+
const stem = captures.stem || captures.name || path.basename(strippedTargetPath, path.extname(strippedTargetPath));
|
|
185
|
+
const ext = captures.ext || path.extname(strippedTargetPath);
|
|
186
|
+
// Canonical built-ins.
|
|
187
|
+
if (kindId === "instruction") {
|
|
188
|
+
return "instructions/AGENTS.base.md";
|
|
189
|
+
}
|
|
190
|
+
if (kindId === "rule") {
|
|
191
|
+
return `rules/${stem}.md`;
|
|
192
|
+
}
|
|
193
|
+
const candidates = [
|
|
194
|
+
strippedTargetPath,
|
|
195
|
+
`${toolName}/${strippedTargetPath}`,
|
|
196
|
+
`${kindId}/${strippedTargetPath}`,
|
|
197
|
+
`${kindId.replace(/-/g, "/")}/${strippedTargetPath}`,
|
|
198
|
+
`${kindId}/${stem}${ext}`,
|
|
199
|
+
`${kindId.replace(/-/g, "/")}/${stem}${ext}`,
|
|
200
|
+
];
|
|
201
|
+
for (const candidate of candidates) {
|
|
202
|
+
const rel = toPosix(candidate).replace(/^\/+/, "");
|
|
203
|
+
if (kind.detect(rel)) {
|
|
204
|
+
return rel;
|
|
205
|
+
}
|
|
206
|
+
}
|
|
207
|
+
return null;
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Check whether a given destination path already exists in .loadouts/.
|
|
211
|
+
*/
|
|
212
|
+
function artifactExistsInLoadout(loadoutPath, artifact) {
|
|
213
|
+
if (artifact.kind === "instruction") {
|
|
214
|
+
return false;
|
|
215
|
+
}
|
|
216
|
+
const kind = registry.getKind(artifact.kind);
|
|
217
|
+
if (!kind)
|
|
218
|
+
return false;
|
|
219
|
+
const destPath = path.join(loadoutPath, artifact.destPath);
|
|
220
|
+
return kind.layout === "dir" ? isDirectory(destPath) : fileExists(destPath);
|
|
221
|
+
}
|
|
171
222
|
/**
|
|
172
223
|
* Discover instruction files at project root.
|
|
173
224
|
* Only discovers files that are NOT managed by loadout.
|
|
174
225
|
*/
|
|
175
|
-
function discoverInstructions(
|
|
226
|
+
function discoverInstructions(scanRoot, loadoutPath) {
|
|
227
|
+
const kind = registry.getKind("instruction");
|
|
228
|
+
if (!kind)
|
|
229
|
+
return [];
|
|
176
230
|
const artifacts = [];
|
|
177
231
|
for (const filename of INSTRUCTION_FILES) {
|
|
178
|
-
const filePath = path.join(
|
|
232
|
+
const filePath = path.join(scanRoot, filename);
|
|
179
233
|
if (!fileExists(filePath))
|
|
180
234
|
continue;
|
|
181
|
-
// Skip if this file is managed by loadout (symlink to .loadouts/)
|
|
182
235
|
if (isManagedByLoadout(filePath, loadoutPath))
|
|
183
236
|
continue;
|
|
184
|
-
// Skip auto-generated CLAUDE.md wrapper
|
|
185
237
|
if (filename === "CLAUDE.md" && isClaudeWrapper(filePath))
|
|
186
238
|
continue;
|
|
239
|
+
const metadata = readArtifactMetadata(filePath);
|
|
240
|
+
if (!metadata)
|
|
241
|
+
continue;
|
|
187
242
|
artifacts.push({
|
|
188
243
|
kind: "instruction",
|
|
189
244
|
name: "AGENTS.md",
|
|
190
245
|
sourcePath: filePath,
|
|
191
246
|
displayPath: filename,
|
|
192
247
|
tool: "project-root",
|
|
193
|
-
size:
|
|
194
|
-
mtime:
|
|
195
|
-
destPath: "instructions/AGENTS.base.md",
|
|
248
|
+
size: metadata.size,
|
|
249
|
+
mtime: metadata.mtime,
|
|
250
|
+
destPath: "instructions/AGENTS.base.md",
|
|
196
251
|
});
|
|
197
252
|
}
|
|
198
253
|
return artifacts;
|
|
199
254
|
}
|
|
200
255
|
/**
|
|
201
|
-
*
|
|
202
|
-
* For instructions, we DON'T filter them out since unmanaged files at project root
|
|
203
|
-
* should be offered for import (to replace the template).
|
|
256
|
+
* Discover artifacts for one (tool, kind) pair by matching tool target templates.
|
|
204
257
|
*/
|
|
205
|
-
function
|
|
206
|
-
//
|
|
207
|
-
//
|
|
208
|
-
if (
|
|
209
|
-
return
|
|
258
|
+
function discoverForToolKind(scanRoot, scope, toolName, kindId, warnings) {
|
|
259
|
+
// Instruction files are discovered centrally at project root to avoid
|
|
260
|
+
// duplicate detection across tools that map to AGENTS.md / CLAUDE.md.
|
|
261
|
+
if (kindId === "instruction")
|
|
262
|
+
return [];
|
|
263
|
+
const tool = registry.getTool(toolName);
|
|
264
|
+
const kind = registry.getKind(kindId);
|
|
265
|
+
if (!tool || !kind)
|
|
266
|
+
return [];
|
|
267
|
+
const mapping = registry.resolveMapping(toolName, kindId);
|
|
268
|
+
if (!mapping)
|
|
269
|
+
return [];
|
|
270
|
+
const template = getScopeTemplate(mapping.path, scope);
|
|
271
|
+
const absoluteBasePath = resolveAbsoluteBasePath(scanRoot, tool.basePath[scope]);
|
|
272
|
+
const concreteTemplate = toPosix(template)
|
|
273
|
+
.replaceAll("{base}", toPosix(absoluteBasePath))
|
|
274
|
+
.replaceAll("{home}", toPosix(os.homedir()));
|
|
275
|
+
const parentTemplate = path.posix.dirname(concreteTemplate);
|
|
276
|
+
const leafTemplate = path.posix.basename(concreteTemplate);
|
|
277
|
+
const templateIsAbsolute = path.posix.isAbsolute(concreteTemplate);
|
|
278
|
+
// If parent path still has unresolved tokens, we cannot reliably scan.
|
|
279
|
+
if (/{[^}]+}/.test(parentTemplate)) {
|
|
280
|
+
warnings.push(`Skipped ${toolName}:${kindId} import scan (unsupported template parent: ${template})`);
|
|
281
|
+
return [];
|
|
210
282
|
}
|
|
211
|
-
const
|
|
212
|
-
|
|
283
|
+
const parentAbs = templateIsAbsolute
|
|
284
|
+
? parentTemplate
|
|
285
|
+
: path.join(scanRoot, parentTemplate);
|
|
286
|
+
if (!isDirectory(parentAbs))
|
|
287
|
+
return [];
|
|
288
|
+
let candidateAbsPaths = [];
|
|
289
|
+
if (kind.layout === "dir") {
|
|
290
|
+
// Prefer one-level dir scanning for templates like .../{name}.
|
|
291
|
+
if (leafTemplate === "{name}" || leafTemplate === "{stem}") {
|
|
292
|
+
candidateAbsPaths = listFiles(parentAbs)
|
|
293
|
+
.map((entry) => path.join(parentAbs, entry))
|
|
294
|
+
.filter((absolutePath) => isDirectory(absolutePath));
|
|
295
|
+
}
|
|
296
|
+
else if (!/{[^}]+}/.test(leafTemplate)) {
|
|
297
|
+
const absolutePath = path.join(parentAbs, leafTemplate);
|
|
298
|
+
if (isDirectory(absolutePath)) {
|
|
299
|
+
candidateAbsPaths = [absolutePath];
|
|
300
|
+
}
|
|
301
|
+
}
|
|
302
|
+
}
|
|
303
|
+
else {
|
|
304
|
+
if (/{relative}/.test(template)) {
|
|
305
|
+
candidateAbsPaths = walkDir(parentAbs).map((entry) => path.join(parentAbs, entry));
|
|
306
|
+
}
|
|
307
|
+
else if (!/{[^}]+}/.test(leafTemplate)) {
|
|
308
|
+
const absolutePath = path.join(parentAbs, leafTemplate);
|
|
309
|
+
if (fileExists(absolutePath)) {
|
|
310
|
+
candidateAbsPaths = [absolutePath];
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
else {
|
|
314
|
+
candidateAbsPaths = listFiles(parentAbs)
|
|
315
|
+
.map((entry) => path.join(parentAbs, entry))
|
|
316
|
+
.filter((absolutePath) => fileExists(absolutePath));
|
|
317
|
+
}
|
|
318
|
+
}
|
|
319
|
+
const artifacts = [];
|
|
320
|
+
for (const sourcePath of candidateAbsPaths) {
|
|
321
|
+
const sourcePathPosix = toPosix(sourcePath);
|
|
322
|
+
const matchPath = templateIsAbsolute
|
|
323
|
+
? sourcePathPosix
|
|
324
|
+
: toPosix(path.relative(scanRoot, sourcePath));
|
|
325
|
+
const match = matchTemplatePath(concreteTemplate, matchPath);
|
|
326
|
+
if (!match.matched)
|
|
327
|
+
continue;
|
|
328
|
+
// Skip tool directories symlinked to another tool to avoid duplicates.
|
|
329
|
+
if (kind.layout === "dir" && isSymlink(sourcePath)) {
|
|
330
|
+
continue;
|
|
331
|
+
}
|
|
332
|
+
const basePrefix = `${toPosix(absoluteBasePath)}/`;
|
|
333
|
+
const stripped = sourcePathPosix.startsWith(basePrefix)
|
|
334
|
+
? sourcePathPosix.slice(basePrefix.length)
|
|
335
|
+
: matchPath;
|
|
336
|
+
const destPath = inferDestPath(kindId, toolName, stripped, match.captures);
|
|
337
|
+
if (!destPath) {
|
|
338
|
+
warnings.push(`Skipped ${toolName}:${kindId} artifact (cannot infer loadout path for ${matchPath})`);
|
|
339
|
+
continue;
|
|
340
|
+
}
|
|
341
|
+
const metadata = readArtifactMetadata(sourcePath);
|
|
342
|
+
if (!metadata) {
|
|
343
|
+
warnings.push(`Skipped ${toolName}:${kindId} artifact (unreadable path: ${toDisplayPath(scanRoot, sourcePath)})`);
|
|
344
|
+
continue;
|
|
345
|
+
}
|
|
346
|
+
const name = kind.layout === "dir"
|
|
347
|
+
? path.basename(destPath)
|
|
348
|
+
: path.basename(destPath, path.extname(destPath));
|
|
349
|
+
artifacts.push({
|
|
350
|
+
kind: kindId,
|
|
351
|
+
name,
|
|
352
|
+
sourcePath,
|
|
353
|
+
displayPath: toDisplayPath(scanRoot, sourcePath),
|
|
354
|
+
tool: toolName,
|
|
355
|
+
size: metadata.size,
|
|
356
|
+
mtime: metadata.mtime,
|
|
357
|
+
destPath,
|
|
358
|
+
});
|
|
359
|
+
}
|
|
360
|
+
return artifacts;
|
|
213
361
|
}
|
|
362
|
+
// ---------------------------------------------------------------------------
|
|
363
|
+
// Public discovery API
|
|
364
|
+
// ---------------------------------------------------------------------------
|
|
214
365
|
/**
|
|
215
366
|
* Discover all importable artifacts in a project.
|
|
216
367
|
*/
|
|
217
|
-
export function discoverImportableArtifacts(
|
|
368
|
+
export function discoverImportableArtifacts(scanRoot, options = {}) {
|
|
218
369
|
const artifacts = [];
|
|
219
370
|
const warnings = [];
|
|
220
|
-
const { tools, kinds, loadoutPath } = options;
|
|
221
|
-
|
|
371
|
+
const { scope = "project", tools, kinds, loadoutPath } = options;
|
|
372
|
+
const allTools = registry.allToolNames();
|
|
222
373
|
const toolsToScan = tools
|
|
223
|
-
?
|
|
224
|
-
:
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
// Skills
|
|
233
|
-
if (!kinds || kinds.includes("skill")) {
|
|
234
|
-
artifacts.push(...discoverSkills(projectRoot, tool, locations));
|
|
374
|
+
? allTools.filter((tool) => tools.includes(tool))
|
|
375
|
+
: allTools;
|
|
376
|
+
const allKinds = registry.allKinds().map((kind) => kind.id);
|
|
377
|
+
const kindsToScan = kinds && kinds.length > 0
|
|
378
|
+
? allKinds.filter((kind) => kinds.includes(kind))
|
|
379
|
+
: allKinds;
|
|
380
|
+
for (const toolName of toolsToScan) {
|
|
381
|
+
for (const kindId of kindsToScan) {
|
|
382
|
+
artifacts.push(...discoverForToolKind(scanRoot, scope, toolName, kindId, warnings));
|
|
235
383
|
}
|
|
236
384
|
}
|
|
237
|
-
//
|
|
238
|
-
if (!kinds || kinds.includes("instruction")) {
|
|
239
|
-
artifacts.push(...discoverInstructions(
|
|
385
|
+
// Keep root-level instruction import behavior for unmanaged AGENTS/CLAUDE files.
|
|
386
|
+
if (!kinds || kinds.length === 0 || kinds.includes("instruction")) {
|
|
387
|
+
artifacts.push(...discoverInstructions(scanRoot, loadoutPath));
|
|
240
388
|
}
|
|
241
|
-
// Filter out artifacts
|
|
389
|
+
// Filter out artifacts already present in .loadouts/.
|
|
242
390
|
const filteredArtifacts = loadoutPath
|
|
243
|
-
? artifacts.filter((
|
|
391
|
+
? artifacts.filter((artifact) => !artifactExistsInLoadout(loadoutPath, artifact))
|
|
244
392
|
: artifacts;
|
|
245
|
-
// Detect conflicts
|
|
246
|
-
const
|
|
393
|
+
// Detect conflicts by canonical destination path.
|
|
394
|
+
const byDest = new Map();
|
|
247
395
|
for (const artifact of filteredArtifacts) {
|
|
248
|
-
const key = `${artifact.kind}:${artifact.
|
|
249
|
-
const existing =
|
|
396
|
+
const key = `${artifact.kind}:${artifact.destPath}`;
|
|
397
|
+
const existing = byDest.get(key) ?? [];
|
|
250
398
|
existing.push(artifact);
|
|
251
|
-
|
|
399
|
+
byDest.set(key, existing);
|
|
252
400
|
}
|
|
253
401
|
const conflicts = new Map();
|
|
254
|
-
for (const [key, items] of
|
|
402
|
+
for (const [key, items] of byDest) {
|
|
255
403
|
if (items.length > 1) {
|
|
256
404
|
conflicts.set(key, items);
|
|
257
405
|
}
|
|
@@ -262,12 +410,9 @@ export function discoverImportableArtifacts(projectRoot, options = {}) {
|
|
|
262
410
|
* Group artifacts by kind for display.
|
|
263
411
|
*/
|
|
264
412
|
export function groupByKind(artifacts) {
|
|
265
|
-
const groups = {
|
|
266
|
-
instruction: [],
|
|
267
|
-
rule: [],
|
|
268
|
-
skill: [],
|
|
269
|
-
};
|
|
413
|
+
const groups = {};
|
|
270
414
|
for (const artifact of artifacts) {
|
|
415
|
+
groups[artifact.kind] ??= [];
|
|
271
416
|
groups[artifact.kind].push(artifact);
|
|
272
417
|
}
|
|
273
418
|
return groups;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"import-discovery.js","sourceRoot":"","sources":["../../src/core/import-discovery.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"import-discovery.js","sourceRoot":"","sources":["../../src/core/import-discovery.ts"],"names":[],"mappings":"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"}
|