loadouts 0.1.11
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/LICENSE +201 -0
- package/README.md +108 -0
- package/bundled/loadouts/loadouts.yaml +5 -0
- package/bundled/skills/loadout-usage/SKILL.md +110 -0
- package/dist/builtins/index.d.ts +14 -0
- package/dist/builtins/index.d.ts.map +1 -0
- package/dist/builtins/index.js +58 -0
- package/dist/builtins/index.js.map +1 -0
- package/dist/builtins/kinds/extension.d.ts +3 -0
- package/dist/builtins/kinds/extension.d.ts.map +1 -0
- package/dist/builtins/kinds/extension.js +9 -0
- package/dist/builtins/kinds/extension.js.map +1 -0
- package/dist/builtins/kinds/instruction.d.ts +3 -0
- package/dist/builtins/kinds/instruction.d.ts.map +1 -0
- package/dist/builtins/kinds/instruction.js +8 -0
- package/dist/builtins/kinds/instruction.js.map +1 -0
- package/dist/builtins/kinds/prompt.d.ts +3 -0
- package/dist/builtins/kinds/prompt.d.ts.map +1 -0
- package/dist/builtins/kinds/prompt.js +8 -0
- package/dist/builtins/kinds/prompt.js.map +1 -0
- package/dist/builtins/kinds/rule.d.ts +3 -0
- package/dist/builtins/kinds/rule.d.ts.map +1 -0
- package/dist/builtins/kinds/rule.js +10 -0
- package/dist/builtins/kinds/rule.js.map +1 -0
- package/dist/builtins/kinds/skill.d.ts +3 -0
- package/dist/builtins/kinds/skill.d.ts.map +1 -0
- package/dist/builtins/kinds/skill.js +8 -0
- package/dist/builtins/kinds/skill.js.map +1 -0
- package/dist/builtins/kinds/theme.d.ts +3 -0
- package/dist/builtins/kinds/theme.d.ts.map +1 -0
- package/dist/builtins/kinds/theme.js +8 -0
- package/dist/builtins/kinds/theme.js.map +1 -0
- package/dist/builtins/tools/claude-code.d.ts +3 -0
- package/dist/builtins/tools/claude-code.d.ts.map +1 -0
- package/dist/builtins/tools/claude-code.js +30 -0
- package/dist/builtins/tools/claude-code.js.map +1 -0
- package/dist/builtins/tools/codex.d.ts +3 -0
- package/dist/builtins/tools/codex.d.ts.map +1 -0
- package/dist/builtins/tools/codex.js +17 -0
- package/dist/builtins/tools/codex.js.map +1 -0
- package/dist/builtins/tools/cursor.d.ts +3 -0
- package/dist/builtins/tools/cursor.d.ts.map +1 -0
- package/dist/builtins/tools/cursor.js +22 -0
- package/dist/builtins/tools/cursor.js.map +1 -0
- package/dist/builtins/tools/opencode.d.ts +3 -0
- package/dist/builtins/tools/opencode.d.ts.map +1 -0
- package/dist/builtins/tools/opencode.js +45 -0
- package/dist/builtins/tools/opencode.js.map +1 -0
- package/dist/builtins/tools/pi.d.ts +3 -0
- package/dist/builtins/tools/pi.d.ts.map +1 -0
- package/dist/builtins/tools/pi.js +22 -0
- package/dist/builtins/tools/pi.js.map +1 -0
- package/dist/cli/commands/activate.d.ts +12 -0
- package/dist/cli/commands/activate.d.ts.map +1 -0
- package/dist/cli/commands/activate.js +70 -0
- package/dist/cli/commands/activate.js.map +1 -0
- package/dist/cli/commands/check.d.ts +12 -0
- package/dist/cli/commands/check.d.ts.map +1 -0
- package/dist/cli/commands/check.js +152 -0
- package/dist/cli/commands/check.js.map +1 -0
- package/dist/cli/commands/clear.d.ts +12 -0
- package/dist/cli/commands/clear.d.ts.map +1 -0
- package/dist/cli/commands/clear.js +25 -0
- package/dist/cli/commands/clear.js.map +1 -0
- package/dist/cli/commands/create.d.ts +11 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +113 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/deactivate.d.ts +12 -0
- package/dist/cli/commands/deactivate.d.ts.map +1 -0
- package/dist/cli/commands/deactivate.js +67 -0
- package/dist/cli/commands/deactivate.js.map +1 -0
- package/dist/cli/commands/diff.d.ts +16 -0
- package/dist/cli/commands/diff.d.ts.map +1 -0
- package/dist/cli/commands/diff.js +144 -0
- package/dist/cli/commands/diff.js.map +1 -0
- package/dist/cli/commands/docs.d.ts +12 -0
- package/dist/cli/commands/docs.d.ts.map +1 -0
- package/dist/cli/commands/docs.js +115 -0
- package/dist/cli/commands/docs.js.map +1 -0
- package/dist/cli/commands/edit.d.ts +11 -0
- package/dist/cli/commands/edit.d.ts.map +1 -0
- package/dist/cli/commands/edit.js +71 -0
- package/dist/cli/commands/edit.js.map +1 -0
- package/dist/cli/commands/fallback.d.ts +9 -0
- package/dist/cli/commands/fallback.d.ts.map +1 -0
- package/dist/cli/commands/fallback.js +35 -0
- package/dist/cli/commands/fallback.js.map +1 -0
- package/dist/cli/commands/info.d.ts +23 -0
- package/dist/cli/commands/info.d.ts.map +1 -0
- package/dist/cli/commands/info.js +314 -0
- package/dist/cli/commands/info.js.map +1 -0
- package/dist/cli/commands/init.d.ts +18 -0
- package/dist/cli/commands/init.d.ts.map +1 -0
- package/dist/cli/commands/init.js +255 -0
- package/dist/cli/commands/init.js.map +1 -0
- package/dist/cli/commands/install.d.ts +27 -0
- package/dist/cli/commands/install.d.ts.map +1 -0
- package/dist/cli/commands/install.js +586 -0
- package/dist/cli/commands/install.js.map +1 -0
- package/dist/cli/commands/instructions.d.ts +8 -0
- package/dist/cli/commands/instructions.d.ts.map +1 -0
- package/dist/cli/commands/instructions.js +218 -0
- package/dist/cli/commands/instructions.js.map +1 -0
- package/dist/cli/commands/kinds.d.ts +6 -0
- package/dist/cli/commands/kinds.d.ts.map +1 -0
- package/dist/cli/commands/kinds.js +59 -0
- package/dist/cli/commands/kinds.js.map +1 -0
- package/dist/cli/commands/list.d.ts +12 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +182 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/policy.d.ts +28 -0
- package/dist/cli/commands/policy.d.ts.map +1 -0
- package/dist/cli/commands/policy.js +50 -0
- package/dist/cli/commands/policy.js.map +1 -0
- package/dist/cli/commands/remove.d.ts +24 -0
- package/dist/cli/commands/remove.d.ts.map +1 -0
- package/dist/cli/commands/remove.js +64 -0
- package/dist/cli/commands/remove.js.map +1 -0
- package/dist/cli/commands/render-engine.d.ts +36 -0
- package/dist/cli/commands/render-engine.d.ts.map +1 -0
- package/dist/cli/commands/render-engine.js +177 -0
- package/dist/cli/commands/render-engine.js.map +1 -0
- package/dist/cli/commands/rule.d.ts +11 -0
- package/dist/cli/commands/rule.d.ts.map +1 -0
- package/dist/cli/commands/rule.js +302 -0
- package/dist/cli/commands/rule.js.map +1 -0
- package/dist/cli/commands/sanitize.d.ts +14 -0
- package/dist/cli/commands/sanitize.d.ts.map +1 -0
- package/dist/cli/commands/sanitize.js +62 -0
- package/dist/cli/commands/sanitize.js.map +1 -0
- package/dist/cli/commands/skill.d.ts +11 -0
- package/dist/cli/commands/skill.d.ts.map +1 -0
- package/dist/cli/commands/skill.js +380 -0
- package/dist/cli/commands/skill.js.map +1 -0
- package/dist/cli/commands/status.d.ts +26 -0
- package/dist/cli/commands/status.d.ts.map +1 -0
- package/dist/cli/commands/status.js +454 -0
- package/dist/cli/commands/status.js.map +1 -0
- package/dist/cli/commands/sync.d.ts +14 -0
- package/dist/cli/commands/sync.d.ts.map +1 -0
- package/dist/cli/commands/sync.js +53 -0
- package/dist/cli/commands/sync.js.map +1 -0
- package/dist/cli/commands/update.d.ts +3 -0
- package/dist/cli/commands/update.d.ts.map +1 -0
- package/dist/cli/commands/update.js +48 -0
- package/dist/cli/commands/update.js.map +1 -0
- package/dist/cli/index.d.ts +11 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +134 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/core/config.d.ts +64 -0
- package/dist/core/config.d.ts.map +1 -0
- package/dist/core/config.js +166 -0
- package/dist/core/config.js.map +1 -0
- package/dist/core/discovery.d.ts +50 -0
- package/dist/core/discovery.d.ts.map +1 -0
- package/dist/core/discovery.js +249 -0
- package/dist/core/discovery.js.map +1 -0
- package/dist/core/fallback.d.ts +23 -0
- package/dist/core/fallback.d.ts.map +1 -0
- package/dist/core/fallback.js +119 -0
- package/dist/core/fallback.js.map +1 -0
- package/dist/core/import-discovery.d.ts +56 -0
- package/dist/core/import-discovery.d.ts.map +1 -0
- package/dist/core/import-discovery.js +304 -0
- package/dist/core/import-discovery.js.map +1 -0
- package/dist/core/kindLoader.d.ts +119 -0
- package/dist/core/kindLoader.d.ts.map +1 -0
- package/dist/core/kindLoader.js +141 -0
- package/dist/core/kindLoader.js.map +1 -0
- package/dist/core/manifest.d.ts +39 -0
- package/dist/core/manifest.d.ts.map +1 -0
- package/dist/core/manifest.js +167 -0
- package/dist/core/manifest.js.map +1 -0
- package/dist/core/plugin.d.ts +22 -0
- package/dist/core/plugin.d.ts.map +1 -0
- package/dist/core/plugin.js +20 -0
- package/dist/core/plugin.js.map +1 -0
- package/dist/core/registry.d.ts +115 -0
- package/dist/core/registry.d.ts.map +1 -0
- package/dist/core/registry.js +105 -0
- package/dist/core/registry.js.map +1 -0
- package/dist/core/render.d.ts +64 -0
- package/dist/core/render.d.ts.map +1 -0
- package/dist/core/render.js +457 -0
- package/dist/core/render.js.map +1 -0
- package/dist/core/resolve.d.ts +39 -0
- package/dist/core/resolve.d.ts.map +1 -0
- package/dist/core/resolve.js +128 -0
- package/dist/core/resolve.js.map +1 -0
- package/dist/core/schema.d.ts +308 -0
- package/dist/core/schema.d.ts.map +1 -0
- package/dist/core/schema.js +81 -0
- package/dist/core/schema.js.map +1 -0
- package/dist/core/scope.d.ts +74 -0
- package/dist/core/scope.d.ts.map +1 -0
- package/dist/core/scope.js +176 -0
- package/dist/core/scope.js.map +1 -0
- package/dist/core/template.d.ts +32 -0
- package/dist/core/template.d.ts.map +1 -0
- package/dist/core/template.js +32 -0
- package/dist/core/template.js.map +1 -0
- package/dist/core/tokens.d.ts +33 -0
- package/dist/core/tokens.d.ts.map +1 -0
- package/dist/core/tokens.js +97 -0
- package/dist/core/tokens.js.map +1 -0
- package/dist/core/types.d.ts +103 -0
- package/dist/core/types.d.ts.map +1 -0
- package/dist/core/types.js +10 -0
- package/dist/core/types.js.map +1 -0
- package/dist/index.d.ts +12 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +24 -0
- package/dist/index.js.map +1 -0
- package/dist/lib/artifact-paths.d.ts +39 -0
- package/dist/lib/artifact-paths.d.ts.map +1 -0
- package/dist/lib/artifact-paths.js +83 -0
- package/dist/lib/artifact-paths.js.map +1 -0
- package/dist/lib/artifact-table.d.ts +126 -0
- package/dist/lib/artifact-table.d.ts.map +1 -0
- package/dist/lib/artifact-table.js +263 -0
- package/dist/lib/artifact-table.js.map +1 -0
- package/dist/lib/editor.d.ts +17 -0
- package/dist/lib/editor.d.ts.map +1 -0
- package/dist/lib/editor.js +33 -0
- package/dist/lib/editor.js.map +1 -0
- package/dist/lib/fs.d.ts +87 -0
- package/dist/lib/fs.d.ts.map +1 -0
- package/dist/lib/fs.js +229 -0
- package/dist/lib/fs.js.map +1 -0
- package/dist/lib/git.d.ts +13 -0
- package/dist/lib/git.d.ts.map +1 -0
- package/dist/lib/git.js +28 -0
- package/dist/lib/git.js.map +1 -0
- package/dist/lib/gitignore.d.ts +26 -0
- package/dist/lib/gitignore.d.ts.map +1 -0
- package/dist/lib/gitignore.js +97 -0
- package/dist/lib/gitignore.js.map +1 -0
- package/dist/lib/loadout-column.d.ts +66 -0
- package/dist/lib/loadout-column.d.ts.map +1 -0
- package/dist/lib/loadout-column.js +66 -0
- package/dist/lib/loadout-column.js.map +1 -0
- package/dist/lib/output.d.ts +15 -0
- package/dist/lib/output.d.ts.map +1 -0
- package/dist/lib/output.js +32 -0
- package/dist/lib/output.js.map +1 -0
- package/dist/lib/scope-indicators.d.ts +60 -0
- package/dist/lib/scope-indicators.d.ts.map +1 -0
- package/dist/lib/scope-indicators.js +110 -0
- package/dist/lib/scope-indicators.js.map +1 -0
- package/docs/authoring.md +182 -0
- package/docs/commands.md +192 -0
- package/docs/concepts.md +114 -0
- package/docs/index.md +60 -0
- package/docs/quickstart.md +100 -0
- package/docs/troubleshooting.md +147 -0
- package/docs/visual-language.md +251 -0
- package/docs/workflows.md +184 -0
- package/package.json +54 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout sanitize — Sanitize artifacts for cross-tool compatibility.
|
|
3
|
+
*
|
|
4
|
+
* Currently sanitizes:
|
|
5
|
+
* - Rule frontmatter: ensures both `paths` and `globs` are present
|
|
6
|
+
*
|
|
7
|
+
* Scope flags:
|
|
8
|
+
* -l / --local → project scope only
|
|
9
|
+
* -g / --global → global scope only
|
|
10
|
+
* -a / --all → both scopes (default)
|
|
11
|
+
*/
|
|
12
|
+
import { Command } from "commander";
|
|
13
|
+
import * as path from "node:path";
|
|
14
|
+
import { resolveContexts, SCOPE_FLAGS } from "../../core/scope.js";
|
|
15
|
+
import { findUnsanitizedRules, sanitizeRuleFile } from "../../core/config.js";
|
|
16
|
+
import { log, heading } from "../../lib/output.js";
|
|
17
|
+
export const sanitizeCommand = new Command("sanitize")
|
|
18
|
+
.description("Sanitize artifacts for cross-tool compatibility")
|
|
19
|
+
.option(...SCOPE_FLAGS.local)
|
|
20
|
+
.option(...SCOPE_FLAGS.global)
|
|
21
|
+
.option(...SCOPE_FLAGS.all)
|
|
22
|
+
.option("--dry-run", "Show what would be sanitized without modifying files")
|
|
23
|
+
.action(async (options) => {
|
|
24
|
+
const { contexts } = await resolveContexts(options);
|
|
25
|
+
let totalFixed = 0;
|
|
26
|
+
let totalSkipped = 0;
|
|
27
|
+
for (const ctx of contexts) {
|
|
28
|
+
const label = ctx.scope === "global" ? "Global" : "Project";
|
|
29
|
+
const unsanitized = findUnsanitizedRules(ctx.configPath);
|
|
30
|
+
if (unsanitized.length === 0) {
|
|
31
|
+
log.dim(`[${ctx.scope}] All rules are already sanitized`);
|
|
32
|
+
continue;
|
|
33
|
+
}
|
|
34
|
+
heading(`${label} rules needing sanitization`);
|
|
35
|
+
for (const name of unsanitized) {
|
|
36
|
+
const rulePath = path.join(ctx.configPath, "rules", `${name}.md`);
|
|
37
|
+
if (options.dryRun) {
|
|
38
|
+
log.dim(` Would sanitize: ${name}`);
|
|
39
|
+
totalSkipped++;
|
|
40
|
+
}
|
|
41
|
+
else {
|
|
42
|
+
sanitizeRuleFile(rulePath);
|
|
43
|
+
log.success(` Sanitized: ${name}`);
|
|
44
|
+
totalFixed++;
|
|
45
|
+
}
|
|
46
|
+
}
|
|
47
|
+
console.log();
|
|
48
|
+
}
|
|
49
|
+
if (options.dryRun) {
|
|
50
|
+
if (totalSkipped > 0) {
|
|
51
|
+
log.info(`${totalSkipped} rule(s) would be sanitized. Run without --dry-run to apply.`);
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
else if (totalFixed > 0) {
|
|
55
|
+
log.success(`Sanitized ${totalFixed} rule(s)`);
|
|
56
|
+
log.dim("Run 'loadouts sync' to apply changes to tool directories.");
|
|
57
|
+
}
|
|
58
|
+
else {
|
|
59
|
+
log.success("All artifacts are already sanitized");
|
|
60
|
+
}
|
|
61
|
+
});
|
|
62
|
+
//# sourceMappingURL=sanitize.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"sanitize.js","sourceRoot":"","sources":["../../../src/cli/commands/sanitize.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;GAUG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,eAAe,EAAE,WAAW,EAAmB,MAAM,qBAAqB,CAAC;AACpF,OAAO,EAAE,oBAAoB,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;AAE9E,OAAO,EAAE,GAAG,EAAE,OAAO,EAAE,MAAM,qBAAqB,CAAC;AAMnD,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,iDAAiD,CAAC;KAC9D,MAAM,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC;KAC5B,MAAM,CAAC,GAAG,WAAW,CAAC,MAAM,CAAC;KAC7B,MAAM,CAAC,GAAG,WAAW,CAAC,GAAG,CAAC;KAC1B,MAAM,CAAC,WAAW,EAAE,sDAAsD,CAAC;KAC3E,MAAM,CAAC,KAAK,EAAE,OAAwB,EAAE,EAAE;IACzC,MAAM,EAAE,QAAQ,EAAE,GAAG,MAAM,eAAe,CAAC,OAAO,CAAC,CAAC;IAEpD,IAAI,UAAU,GAAG,CAAC,CAAC;IACnB,IAAI,YAAY,GAAG,CAAC,CAAC;IAErB,KAAK,MAAM,GAAG,IAAI,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,SAAS,CAAC;QAC5D,MAAM,WAAW,GAAG,oBAAoB,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAEzD,IAAI,WAAW,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YAC7B,GAAG,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,KAAK,mCAAmC,CAAC,CAAC;YAC1D,SAAS;QACX,CAAC;QAED,OAAO,CAAC,GAAG,KAAK,6BAA6B,CAAC,CAAC;QAE/C,KAAK,MAAM,IAAI,IAAI,WAAW,EAAE,CAAC;YAC/B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,OAAO,EAAE,GAAG,IAAI,KAAK,CAAC,CAAC;YAElE,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;gBACnB,GAAG,CAAC,GAAG,CAAC,qBAAqB,IAAI,EAAE,CAAC,CAAC;gBACrC,YAAY,EAAE,CAAC;YACjB,CAAC;iBAAM,CAAC;gBACN,gBAAgB,CAAC,QAAQ,CAAC,CAAC;gBAC3B,GAAG,CAAC,OAAO,CAAC,gBAAgB,IAAI,EAAE,CAAC,CAAC;gBACpC,UAAU,EAAE,CAAC;YACf,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,EAAE,CAAC;IAChB,CAAC;IAED,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,YAAY,GAAG,CAAC,EAAE,CAAC;YACrB,GAAG,CAAC,IAAI,CAAC,GAAG,YAAY,8DAA8D,CAAC,CAAC;QAC1F,CAAC;IACH,CAAC;SAAM,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QAC1B,GAAG,CAAC,OAAO,CAAC,aAAa,UAAU,UAAU,CAAC,CAAC;QAC/C,GAAG,CAAC,GAAG,CAAC,2DAA2D,CAAC,CAAC;IACvE,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,OAAO,CAAC,qCAAqC,CAAC,CAAC;IACrD,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout skill — Manage skills.
|
|
3
|
+
*
|
|
4
|
+
* Scope flags:
|
|
5
|
+
* -l / --local → project scope
|
|
6
|
+
* -g / --global → global scope
|
|
7
|
+
* (none) → project if in one, else global
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
export declare const skillCommand: Command;
|
|
11
|
+
//# sourceMappingURL=skill.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/skill.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAsEpC,eAAO,MAAM,YAAY,SAAoD,CAAC"}
|
|
@@ -0,0 +1,380 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout skill — Manage skills.
|
|
3
|
+
*
|
|
4
|
+
* Scope flags:
|
|
5
|
+
* -l / --local → project scope
|
|
6
|
+
* -g / --global → global scope
|
|
7
|
+
* (none) → project if in one, else global
|
|
8
|
+
*/
|
|
9
|
+
import { Command } from "commander";
|
|
10
|
+
import * as path from "node:path";
|
|
11
|
+
import { fileURLToPath } from "node:url";
|
|
12
|
+
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
13
|
+
import * as yaml from "yaml";
|
|
14
|
+
import { findNearestLoadoutRoot, getGlobalConfigPath, } from "../../core/discovery.js";
|
|
15
|
+
import { writeFile, readFile, fileExists, isDirectory, ensureDir, removeDir, copyDir, listFiles, } from "../../lib/fs.js";
|
|
16
|
+
import { parseLoadoutDefinition } from "../../core/config.js";
|
|
17
|
+
import { inProject, hasGlobal } from "../../core/scope.js";
|
|
18
|
+
import { log, heading } from "../../lib/output.js";
|
|
19
|
+
import { openInEditor } from "../../lib/editor.js";
|
|
20
|
+
const SKILLS_DIR = "skills";
|
|
21
|
+
/**
|
|
22
|
+
* Resolve the loadout root path based on scope flags.
|
|
23
|
+
*/
|
|
24
|
+
async function resolveRootPath(options, cwd = process.cwd()) {
|
|
25
|
+
if (options.local) {
|
|
26
|
+
const projectRoot = await findNearestLoadoutRoot(cwd);
|
|
27
|
+
if (!projectRoot) {
|
|
28
|
+
throw new Error("Not in a loadout project. Run 'loadouts init' first.");
|
|
29
|
+
}
|
|
30
|
+
return { rootPath: projectRoot.path, scope: "project" };
|
|
31
|
+
}
|
|
32
|
+
if (options.global) {
|
|
33
|
+
if (!hasGlobal()) {
|
|
34
|
+
throw new Error("No global loadout found. Run 'loadouts init --global' first.");
|
|
35
|
+
}
|
|
36
|
+
return { rootPath: getGlobalConfigPath(), scope: "global" };
|
|
37
|
+
}
|
|
38
|
+
// Auto-detect: prefer project if in one
|
|
39
|
+
if (await inProject(cwd)) {
|
|
40
|
+
const projectRoot = await findNearestLoadoutRoot(cwd);
|
|
41
|
+
return { rootPath: projectRoot.path, scope: "project" };
|
|
42
|
+
}
|
|
43
|
+
if (hasGlobal()) {
|
|
44
|
+
return { rootPath: getGlobalConfigPath(), scope: "global" };
|
|
45
|
+
}
|
|
46
|
+
throw new Error("No loadout found. Run 'loadouts init' or 'loadouts init --global' first.");
|
|
47
|
+
}
|
|
48
|
+
export const skillCommand = new Command("skill").description("Manage skills");
|
|
49
|
+
// loadout skill add <name>
|
|
50
|
+
skillCommand
|
|
51
|
+
.command("add")
|
|
52
|
+
.description("Create a new skill")
|
|
53
|
+
.argument("<name>", "Skill name")
|
|
54
|
+
.option("-l, --local", "Project scope")
|
|
55
|
+
.option("-g, --global", "Global scope")
|
|
56
|
+
.option("-d, --description <desc>", "Skill description")
|
|
57
|
+
.option("--no-edit", "Don't open in editor after creating")
|
|
58
|
+
.action(async (name, options) => {
|
|
59
|
+
let rootPath;
|
|
60
|
+
let scope;
|
|
61
|
+
try {
|
|
62
|
+
({ rootPath, scope } = await resolveRootPath(options));
|
|
63
|
+
}
|
|
64
|
+
catch (err) {
|
|
65
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
66
|
+
process.exit(1);
|
|
67
|
+
}
|
|
68
|
+
const skillPath = path.join(rootPath, SKILLS_DIR, name);
|
|
69
|
+
const skillMdPath = path.join(skillPath, "SKILL.md");
|
|
70
|
+
if (isDirectory(skillPath)) {
|
|
71
|
+
log.error(`Skill '${name}' already exists in ${scope} scope.`);
|
|
72
|
+
process.exit(1);
|
|
73
|
+
}
|
|
74
|
+
// Create skill directory structure
|
|
75
|
+
ensureDir(skillPath);
|
|
76
|
+
ensureDir(path.join(skillPath, "references"));
|
|
77
|
+
const description = options.description || `${name} skill for AI coding agents`;
|
|
78
|
+
const content = `---
|
|
79
|
+
name: ${name}
|
|
80
|
+
description: ${description}
|
|
81
|
+
---
|
|
82
|
+
|
|
83
|
+
# ${name}
|
|
84
|
+
|
|
85
|
+
## Overview
|
|
86
|
+
|
|
87
|
+
Describe what this skill does and when to use it.
|
|
88
|
+
|
|
89
|
+
## Instructions
|
|
90
|
+
|
|
91
|
+
Provide specific instructions for the AI agent.
|
|
92
|
+
|
|
93
|
+
## Examples
|
|
94
|
+
|
|
95
|
+
Include examples if helpful.
|
|
96
|
+
`;
|
|
97
|
+
writeFile(skillMdPath, content);
|
|
98
|
+
const scopeLabel = scope === "global" ? "global" : "project";
|
|
99
|
+
log.success(`Created ${scopeLabel} skill: ${name}`);
|
|
100
|
+
// Open in editor unless --no-edit (Commander sets options.edit = false for --no-edit)
|
|
101
|
+
if (options.edit !== false) {
|
|
102
|
+
log.dim(` ${skillPath}/`);
|
|
103
|
+
await openInEditor(skillMdPath, { cwd: rootPath });
|
|
104
|
+
}
|
|
105
|
+
else {
|
|
106
|
+
// For agents/scripts: show clear path and instructions
|
|
107
|
+
console.log();
|
|
108
|
+
console.log(` File: ${skillMdPath}`);
|
|
109
|
+
console.log();
|
|
110
|
+
log.dim(" Replace the template content with your skill, then run 'loadouts sync'");
|
|
111
|
+
}
|
|
112
|
+
});
|
|
113
|
+
// loadout skill list
|
|
114
|
+
skillCommand
|
|
115
|
+
.command("list")
|
|
116
|
+
.description("List skills")
|
|
117
|
+
.option("-l, --local", "Project scope only")
|
|
118
|
+
.option("-g, --global", "Global scope only")
|
|
119
|
+
.option("-a, --all", "Both scopes")
|
|
120
|
+
.action(async (options) => {
|
|
121
|
+
const cwd = process.cwd();
|
|
122
|
+
const roots = [];
|
|
123
|
+
// Determine which scopes to list
|
|
124
|
+
if (options.all || (!options.local && !options.global)) {
|
|
125
|
+
// Show all available
|
|
126
|
+
if (await inProject(cwd)) {
|
|
127
|
+
const projectRoot = await findNearestLoadoutRoot(cwd);
|
|
128
|
+
if (projectRoot) {
|
|
129
|
+
roots.push({ rootPath: projectRoot.path, scope: "project" });
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
if (hasGlobal()) {
|
|
133
|
+
roots.push({ rootPath: getGlobalConfigPath(), scope: "global" });
|
|
134
|
+
}
|
|
135
|
+
}
|
|
136
|
+
else if (options.local) {
|
|
137
|
+
const projectRoot = await findNearestLoadoutRoot(cwd);
|
|
138
|
+
if (!projectRoot) {
|
|
139
|
+
log.error("Not in a loadout project.");
|
|
140
|
+
process.exit(1);
|
|
141
|
+
}
|
|
142
|
+
roots.push({ rootPath: projectRoot.path, scope: "project" });
|
|
143
|
+
}
|
|
144
|
+
else if (options.global) {
|
|
145
|
+
if (!hasGlobal()) {
|
|
146
|
+
log.error("No global loadout found.");
|
|
147
|
+
process.exit(1);
|
|
148
|
+
}
|
|
149
|
+
roots.push({ rootPath: getGlobalConfigPath(), scope: "global" });
|
|
150
|
+
}
|
|
151
|
+
if (roots.length === 0) {
|
|
152
|
+
log.error("No loadout found.");
|
|
153
|
+
process.exit(1);
|
|
154
|
+
}
|
|
155
|
+
for (const { rootPath, scope } of roots) {
|
|
156
|
+
const skillsDir = path.join(rootPath, SKILLS_DIR);
|
|
157
|
+
const skills = listFiles(skillsDir).filter((f) => isDirectory(path.join(skillsDir, f)));
|
|
158
|
+
const scopeLabel = scope === "global" ? "Global skills" : "Project skills";
|
|
159
|
+
heading(scopeLabel);
|
|
160
|
+
if (skills.length === 0) {
|
|
161
|
+
log.dim(" No skills defined.");
|
|
162
|
+
const flag = scope === "global" ? " -g" : "";
|
|
163
|
+
log.dim(` Create one with: loadout skill add <name>${flag}`);
|
|
164
|
+
console.log();
|
|
165
|
+
continue;
|
|
166
|
+
}
|
|
167
|
+
for (const name of skills) {
|
|
168
|
+
const skillPath = path.join(skillsDir, name);
|
|
169
|
+
const skillMdPath = path.join(skillPath, "SKILL.md");
|
|
170
|
+
try {
|
|
171
|
+
if (fileExists(skillMdPath)) {
|
|
172
|
+
const content = readFile(skillMdPath);
|
|
173
|
+
// Extract description from frontmatter
|
|
174
|
+
const match = content.match(/description:\s*(.+)/);
|
|
175
|
+
const desc = match ? match[1].trim() : "";
|
|
176
|
+
console.log(` ${name}`);
|
|
177
|
+
if (desc) {
|
|
178
|
+
log.dim(` ${desc}`);
|
|
179
|
+
}
|
|
180
|
+
}
|
|
181
|
+
else {
|
|
182
|
+
console.log(` ${name} (missing SKILL.md)`);
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
catch {
|
|
186
|
+
console.log(` ${name} (error reading)`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
console.log();
|
|
190
|
+
}
|
|
191
|
+
});
|
|
192
|
+
// loadout skill edit <name>
|
|
193
|
+
skillCommand
|
|
194
|
+
.command("edit")
|
|
195
|
+
.description("Edit a skill's SKILL.md in $EDITOR")
|
|
196
|
+
.argument("<name>", "Skill name")
|
|
197
|
+
.option("-l, --local", "Project scope")
|
|
198
|
+
.option("-g, --global", "Global scope")
|
|
199
|
+
.action(async (name, options) => {
|
|
200
|
+
let rootPath;
|
|
201
|
+
let scope;
|
|
202
|
+
try {
|
|
203
|
+
({ rootPath, scope } = await resolveRootPath(options));
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
207
|
+
process.exit(1);
|
|
208
|
+
}
|
|
209
|
+
const skillPath = path.join(rootPath, SKILLS_DIR, name);
|
|
210
|
+
const skillMdPath = path.join(skillPath, "SKILL.md");
|
|
211
|
+
if (!isDirectory(skillPath)) {
|
|
212
|
+
log.error(`Skill '${name}' not found in ${scope} scope.`);
|
|
213
|
+
process.exit(1);
|
|
214
|
+
}
|
|
215
|
+
if (!fileExists(skillMdPath)) {
|
|
216
|
+
log.error(`Skill '${name}' is missing SKILL.md.`);
|
|
217
|
+
process.exit(1);
|
|
218
|
+
}
|
|
219
|
+
await openInEditor(skillMdPath, {
|
|
220
|
+
cwd: rootPath,
|
|
221
|
+
onSuccess: () => log.success(`Edited skill: ${name}`),
|
|
222
|
+
});
|
|
223
|
+
});
|
|
224
|
+
// loadout skill remove <name>
|
|
225
|
+
skillCommand
|
|
226
|
+
.command("remove")
|
|
227
|
+
.description("Remove a skill")
|
|
228
|
+
.argument("<name>", "Skill name")
|
|
229
|
+
.option("-l, --local", "Project scope")
|
|
230
|
+
.option("-g, --global", "Global scope")
|
|
231
|
+
.option("-f, --force", "Skip confirmation")
|
|
232
|
+
.action(async (name, options) => {
|
|
233
|
+
let rootPath;
|
|
234
|
+
let scope;
|
|
235
|
+
try {
|
|
236
|
+
({ rootPath, scope } = await resolveRootPath(options));
|
|
237
|
+
}
|
|
238
|
+
catch (err) {
|
|
239
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
240
|
+
process.exit(1);
|
|
241
|
+
}
|
|
242
|
+
const skillPath = path.join(rootPath, SKILLS_DIR, name);
|
|
243
|
+
if (!isDirectory(skillPath)) {
|
|
244
|
+
log.error(`Skill '${name}' not found in ${scope} scope.`);
|
|
245
|
+
process.exit(1);
|
|
246
|
+
}
|
|
247
|
+
if (!options.force) {
|
|
248
|
+
log.warn(`This will delete: ${skillPath}/`);
|
|
249
|
+
log.dim("Use --force to skip this warning.");
|
|
250
|
+
process.exit(1);
|
|
251
|
+
}
|
|
252
|
+
removeDir(skillPath);
|
|
253
|
+
log.success(`Removed skill: ${name} (${scope})`);
|
|
254
|
+
});
|
|
255
|
+
/** Find the bundled skills directory. */
|
|
256
|
+
function findBundledSkillsPath() {
|
|
257
|
+
const candidates = [
|
|
258
|
+
// Development: relative to src/cli/commands/
|
|
259
|
+
path.resolve(__dirname, "../../../bundled/skills"),
|
|
260
|
+
// Production: relative to dist/cli/commands/
|
|
261
|
+
path.resolve(__dirname, "../../../bundled/skills"),
|
|
262
|
+
];
|
|
263
|
+
for (const candidate of candidates) {
|
|
264
|
+
if (isDirectory(candidate)) {
|
|
265
|
+
return candidate;
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
return null;
|
|
269
|
+
}
|
|
270
|
+
/** List available bundled skills. */
|
|
271
|
+
function listBundledSkills() {
|
|
272
|
+
const bundledPath = findBundledSkillsPath();
|
|
273
|
+
if (!bundledPath)
|
|
274
|
+
return [];
|
|
275
|
+
return listFiles(bundledPath).filter((f) => isDirectory(path.join(bundledPath, f)));
|
|
276
|
+
}
|
|
277
|
+
// loadout skill import <path>
|
|
278
|
+
skillCommand
|
|
279
|
+
.command("import")
|
|
280
|
+
.description("Import an existing skill directory into loadout")
|
|
281
|
+
.argument("[path]", "Path to existing skill directory (or use --builtin)")
|
|
282
|
+
.option("-l, --local", "Project scope")
|
|
283
|
+
.option("-g, --global", "Global scope")
|
|
284
|
+
.option("--builtin <name>", "Import a bundled skill (e.g., loadout-usage)")
|
|
285
|
+
.option("--list-builtins", "List available bundled skills")
|
|
286
|
+
.option("--loadout <name>", "Loadout to add skill to", "base")
|
|
287
|
+
.option("--keep", "Keep original directory (don't delete after import)")
|
|
288
|
+
.action(async (dirPath, options) => {
|
|
289
|
+
// Handle --list-builtins
|
|
290
|
+
if (options.listBuiltins) {
|
|
291
|
+
const skills = listBundledSkills();
|
|
292
|
+
if (skills.length === 0) {
|
|
293
|
+
log.error("No bundled skills found.");
|
|
294
|
+
process.exit(1);
|
|
295
|
+
}
|
|
296
|
+
heading("Bundled skills");
|
|
297
|
+
for (const name of skills) {
|
|
298
|
+
console.log(` ${name}`);
|
|
299
|
+
}
|
|
300
|
+
console.log();
|
|
301
|
+
log.dim("Import with: loadout skill import --builtin <name>");
|
|
302
|
+
return;
|
|
303
|
+
}
|
|
304
|
+
const cwd = process.cwd();
|
|
305
|
+
let rootPath;
|
|
306
|
+
let scope;
|
|
307
|
+
try {
|
|
308
|
+
({ rootPath, scope } = await resolveRootPath(options, cwd));
|
|
309
|
+
}
|
|
310
|
+
catch (err) {
|
|
311
|
+
log.error(err instanceof Error ? err.message : String(err));
|
|
312
|
+
process.exit(1);
|
|
313
|
+
}
|
|
314
|
+
// Resolve the source path
|
|
315
|
+
let sourcePath;
|
|
316
|
+
let keepOriginal = options.keep;
|
|
317
|
+
if (options.builtin) {
|
|
318
|
+
// Import from bundled skills
|
|
319
|
+
const bundledPath = findBundledSkillsPath();
|
|
320
|
+
if (!bundledPath) {
|
|
321
|
+
log.error("Bundled skills directory not found.");
|
|
322
|
+
process.exit(1);
|
|
323
|
+
}
|
|
324
|
+
sourcePath = path.join(bundledPath, options.builtin);
|
|
325
|
+
keepOriginal = true; // Never delete bundled skills
|
|
326
|
+
}
|
|
327
|
+
else if (dirPath) {
|
|
328
|
+
sourcePath = path.isAbsolute(dirPath)
|
|
329
|
+
? dirPath
|
|
330
|
+
: path.resolve(cwd, dirPath);
|
|
331
|
+
}
|
|
332
|
+
else {
|
|
333
|
+
log.error("Provide a path or use --builtin <name>");
|
|
334
|
+
log.dim("List bundled skills: loadout skill import --list-builtins");
|
|
335
|
+
process.exit(1);
|
|
336
|
+
}
|
|
337
|
+
if (!isDirectory(sourcePath)) {
|
|
338
|
+
log.error(`Directory not found: ${sourcePath}`);
|
|
339
|
+
process.exit(1);
|
|
340
|
+
}
|
|
341
|
+
// Check for SKILL.md
|
|
342
|
+
const skillMdPath = path.join(sourcePath, "SKILL.md");
|
|
343
|
+
if (!fileExists(skillMdPath)) {
|
|
344
|
+
log.error(`Not a valid skill directory (missing SKILL.md): ${sourcePath}`);
|
|
345
|
+
process.exit(1);
|
|
346
|
+
}
|
|
347
|
+
// Determine the skill name from directory name
|
|
348
|
+
const name = path.basename(sourcePath);
|
|
349
|
+
const destPath = path.join(rootPath, SKILLS_DIR, name);
|
|
350
|
+
if (isDirectory(destPath)) {
|
|
351
|
+
log.error(`Skill '${name}' already exists in ${scope} scope.`);
|
|
352
|
+
process.exit(1);
|
|
353
|
+
}
|
|
354
|
+
// Copy the directory
|
|
355
|
+
copyDir(sourcePath, destPath);
|
|
356
|
+
// Add to loadout definition
|
|
357
|
+
const loadoutPath = path.join(rootPath, "loadouts", `${options.loadout}.yaml`);
|
|
358
|
+
if (fileExists(loadoutPath)) {
|
|
359
|
+
try {
|
|
360
|
+
const def = parseLoadoutDefinition(loadoutPath);
|
|
361
|
+
const includeEntry = `skills/${name}`;
|
|
362
|
+
if (!def.include.some((i) => (typeof i === "string" ? i : i.path) === includeEntry)) {
|
|
363
|
+
def.include.push(includeEntry);
|
|
364
|
+
writeFile(loadoutPath, yaml.stringify(def));
|
|
365
|
+
log.success(`Added to ${options.loadout} loadout`);
|
|
366
|
+
}
|
|
367
|
+
}
|
|
368
|
+
catch (err) {
|
|
369
|
+
log.warn(`Could not update loadout: ${err instanceof Error ? err.message : String(err)}`);
|
|
370
|
+
}
|
|
371
|
+
}
|
|
372
|
+
// Remove original if not --keep (and not a builtin)
|
|
373
|
+
if (!keepOriginal) {
|
|
374
|
+
removeDir(sourcePath);
|
|
375
|
+
log.dim(`Removed original: ${sourcePath}`);
|
|
376
|
+
}
|
|
377
|
+
log.success(`Imported skill: ${name} (${scope})`);
|
|
378
|
+
log.dim(` ${destPath}/`);
|
|
379
|
+
});
|
|
380
|
+
//# sourceMappingURL=skill.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"skill.js","sourceRoot":"","sources":["../../../src/cli/commands/skill.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout status — Show drift status for active loadouts.
|
|
3
|
+
*
|
|
4
|
+
* Displays a unified table of all active loadouts with drift status.
|
|
5
|
+
* Uses the same visual language as `info` and `list`:
|
|
6
|
+
* • (dim) — global scope
|
|
7
|
+
* ◦ (cyan) — local/project scope
|
|
8
|
+
* →name (yellow) — external source
|
|
9
|
+
*
|
|
10
|
+
* Detects two types of drift:
|
|
11
|
+
* 1. Config drift: loadout definition changed (items added/removed)
|
|
12
|
+
* 2. Output drift: managed files changed on disk (modified/missing/unlinked)
|
|
13
|
+
*
|
|
14
|
+
* Scope flags:
|
|
15
|
+
* -l / --local → project scope only
|
|
16
|
+
* -g / --global → global scope only
|
|
17
|
+
* -a / --all → show both scopes (default)
|
|
18
|
+
*/
|
|
19
|
+
import { Command } from "commander";
|
|
20
|
+
import type { CommandContext } from "../../core/types.js";
|
|
21
|
+
/**
|
|
22
|
+
* Execute status command - unified view of all active loadouts.
|
|
23
|
+
*/
|
|
24
|
+
export declare function executeStatus(contexts: CommandContext[], showReferences: boolean): Promise<boolean>;
|
|
25
|
+
export declare const statusCommand: Command;
|
|
26
|
+
//# sourceMappingURL=status.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/status.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;GAiBG;AAGH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA2BpC,OAAO,KAAK,EAAE,cAAc,EAAoD,MAAM,qBAAqB,CAAC;AAse5G;;GAEG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,cAAc,EAAE,EAC1B,cAAc,EAAE,OAAO,GACtB,OAAO,CAAC,OAAO,CAAC,CAuClB;AAMD,eAAO,MAAM,aAAa,SActB,CAAC"}
|