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,35 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout fallback — Regenerate fallback sync scripts.
|
|
3
|
+
*
|
|
4
|
+
* Updates .loadouts/sync-fallback.sh and git hooks to the latest version.
|
|
5
|
+
* Run this after upgrading loadout to get improvements to the fallback logic.
|
|
6
|
+
*/
|
|
7
|
+
import { Command } from "commander";
|
|
8
|
+
import * as path from "node:path";
|
|
9
|
+
import { fileExists } from "../../lib/fs.js";
|
|
10
|
+
import { writeFallbackScript, writeGitHooks } from "../../core/fallback.js";
|
|
11
|
+
import { findGitRoot } from "../../lib/git.js";
|
|
12
|
+
import { log } from "../../lib/output.js";
|
|
13
|
+
export const fallbackCommand = new Command("fallback")
|
|
14
|
+
.description("Regenerate fallback sync scripts (.loadouts/sync-fallback.sh and hooks)")
|
|
15
|
+
.action(async () => {
|
|
16
|
+
const loadoutPath = path.join(process.cwd(), ".loadouts");
|
|
17
|
+
if (!fileExists(loadoutPath)) {
|
|
18
|
+
log.error("No .loadouts/ directory found. Run 'loadouts init' first.");
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
writeFallbackScript(loadoutPath);
|
|
22
|
+
log.success("Updated .loadouts/sync-fallback.sh");
|
|
23
|
+
// Only update git hooks if at git root
|
|
24
|
+
const gitRoot = await findGitRoot(process.cwd());
|
|
25
|
+
const isAtGitRoot = gitRoot === process.cwd();
|
|
26
|
+
if (isAtGitRoot) {
|
|
27
|
+
writeGitHooks(loadoutPath);
|
|
28
|
+
log.success("Updated .loadouts/hooks/post-checkout");
|
|
29
|
+
log.success("Updated .loadouts/hooks/post-merge");
|
|
30
|
+
}
|
|
31
|
+
else {
|
|
32
|
+
log.dim("Skipped git hooks (subproject - use direnv instead)");
|
|
33
|
+
}
|
|
34
|
+
});
|
|
35
|
+
//# sourceMappingURL=fallback.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fallback.js","sourceRoot":"","sources":["../../../src/cli/commands/fallback.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,IAAI,MAAM,WAAW,CAAC;AAClC,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAC7C,OAAO,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,wBAAwB,CAAC;AAC5E,OAAO,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAC/C,OAAO,EAAE,GAAG,EAAE,MAAM,qBAAqB,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,IAAI,OAAO,CAAC,UAAU,CAAC;KACnD,WAAW,CAAC,yEAAyE,CAAC;KACtF,MAAM,CAAC,KAAK,IAAI,EAAE;IACjB,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;IAE1D,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC7B,GAAG,CAAC,KAAK,CAAC,2DAA2D,CAAC,CAAC;QACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,mBAAmB,CAAC,WAAW,CAAC,CAAC;IACjC,GAAG,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IAElD,uCAAuC;IACvC,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACjD,MAAM,WAAW,GAAG,OAAO,KAAK,OAAO,CAAC,GAAG,EAAE,CAAC;IAE9C,IAAI,WAAW,EAAE,CAAC;QAChB,aAAa,CAAC,WAAW,CAAC,CAAC;QAC3B,GAAG,CAAC,OAAO,CAAC,uCAAuC,CAAC,CAAC;QACrD,GAAG,CAAC,OAAO,CAAC,oCAAoC,CAAC,CAAC;IACpD,CAAC;SAAM,CAAC;QACN,GAAG,CAAC,GAAG,CAAC,qDAAqD,CAAC,CAAC;IACjE,CAAC;AACH,CAAC,CAAC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout info — Show detailed loadout information.
|
|
3
|
+
*
|
|
4
|
+
* Displays a unified table of all active loadouts with artifacts grouped by
|
|
5
|
+
* loadout name. Scope is indicated subtly with symbols:
|
|
6
|
+
* • global (dim)
|
|
7
|
+
* ◦ local (cyan)
|
|
8
|
+
* →name source (yellow)
|
|
9
|
+
*
|
|
10
|
+
* Scope flags:
|
|
11
|
+
* -l / --local → project scope only
|
|
12
|
+
* -g / --global → global scope only
|
|
13
|
+
* -a / --all → show both scopes (default)
|
|
14
|
+
* (none) → all available scopes; error if name exists in both without flag
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from "commander";
|
|
17
|
+
import type { CommandContext } from "../../core/types.js";
|
|
18
|
+
/**
|
|
19
|
+
* Execute info command - unified view of all active loadouts.
|
|
20
|
+
*/
|
|
21
|
+
export declare function executeInfo(contexts: CommandContext[], explicitName?: string): Promise<boolean>;
|
|
22
|
+
export declare const infoCommand: Command;
|
|
23
|
+
//# sourceMappingURL=info.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8BpC,OAAO,KAAK,EAAE,cAAc,EAAmC,MAAM,qBAAqB,CAAC;AAgS3F;;GAEG;AACH,wBAAsB,WAAW,CAC/B,QAAQ,EAAE,cAAc,EAAE,EAC1B,YAAY,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,OAAO,CAAC,CA+BlB;AAED,eAAO,MAAM,WAAW,SA2CpB,CAAC"}
|
|
@@ -0,0 +1,314 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadout info — Show detailed loadout information.
|
|
3
|
+
*
|
|
4
|
+
* Displays a unified table of all active loadouts with artifacts grouped by
|
|
5
|
+
* loadout name. Scope is indicated subtly with symbols:
|
|
6
|
+
* • global (dim)
|
|
7
|
+
* ◦ local (cyan)
|
|
8
|
+
* →name source (yellow)
|
|
9
|
+
*
|
|
10
|
+
* Scope flags:
|
|
11
|
+
* -l / --local → project scope only
|
|
12
|
+
* -g / --global → global scope only
|
|
13
|
+
* -a / --all → show both scopes (default)
|
|
14
|
+
* (none) → all available scopes; error if name exists in both without flag
|
|
15
|
+
*/
|
|
16
|
+
import { Command } from "commander";
|
|
17
|
+
import chalk from "chalk";
|
|
18
|
+
import { resolveContexts, requireScopeForName, SCOPE_FLAGS, } from "../../core/scope.js";
|
|
19
|
+
import { getContext } from "../../core/discovery.js";
|
|
20
|
+
import { loadResolvedLoadout } from "../../core/resolve.js";
|
|
21
|
+
import { loadState } from "../../core/manifest.js";
|
|
22
|
+
import { log, heading } from "../../lib/output.js";
|
|
23
|
+
import { getArtifactName, sortArtifacts, truncatePath, getToolColumns, calculateColumnWidths, } from "../../lib/artifact-table.js";
|
|
24
|
+
import { getScopeFromRoots, renderScopeLegend, } from "../../lib/scope-indicators.js";
|
|
25
|
+
import { calculateLoadoutColumnWidths, renderLoadoutHeader, renderLoadoutSeparator, renderLoadoutCell, } from "../../lib/loadout-column.js";
|
|
26
|
+
import { registry } from "../../core/registry.js";
|
|
27
|
+
import { estimateFileTokens, estimateDirTokens, estimateSkillUpfrontTokens, formatTokens, } from "../../core/tokens.js";
|
|
28
|
+
// Kinds whose content goes into the agent's context window.
|
|
29
|
+
// Extensions (runtime code) and themes (UI config) don't count.
|
|
30
|
+
const CONTEXT_KINDS = new Set(["rule", "skill", "instruction", "prompt"]);
|
|
31
|
+
/**
|
|
32
|
+
* Estimate tokens for a resolved item based on its kind.
|
|
33
|
+
* Skills are special: only the description is upfront, full content is lazy.
|
|
34
|
+
*/
|
|
35
|
+
function getItemTokens(item) {
|
|
36
|
+
if (!CONTEXT_KINDS.has(item.kind))
|
|
37
|
+
return { upfront: 0, lazy: 0 };
|
|
38
|
+
const kind = registry.getKind(item.kind);
|
|
39
|
+
if (!kind)
|
|
40
|
+
return { upfront: 0, lazy: 0 };
|
|
41
|
+
// Skills: description is upfront, full content is lazy-loaded
|
|
42
|
+
if (item.kind === "skill") {
|
|
43
|
+
const upfront = estimateSkillUpfrontTokens(item.sourcePath);
|
|
44
|
+
const total = estimateDirTokens(item.sourcePath);
|
|
45
|
+
return { upfront, lazy: Math.max(0, total - upfront) };
|
|
46
|
+
}
|
|
47
|
+
// All other context kinds: full content is upfront
|
|
48
|
+
const total = kind.layout === "dir"
|
|
49
|
+
? estimateDirTokens(item.sourcePath)
|
|
50
|
+
: estimateFileTokens(item.sourcePath);
|
|
51
|
+
return { upfront: total, lazy: 0 };
|
|
52
|
+
}
|
|
53
|
+
/**
|
|
54
|
+
* Transform resolved items into artifact info for display.
|
|
55
|
+
*/
|
|
56
|
+
function toArtifactInfo(items) {
|
|
57
|
+
return items.map((item) => ({
|
|
58
|
+
kind: item.kind,
|
|
59
|
+
name: getArtifactName(item.relativePath, item.kind),
|
|
60
|
+
relativePath: item.relativePath,
|
|
61
|
+
tools: item.tools,
|
|
62
|
+
tokens: getItemTokens(item),
|
|
63
|
+
}));
|
|
64
|
+
}
|
|
65
|
+
/**
|
|
66
|
+
* Render the unified artifact table with loadout grouping.
|
|
67
|
+
*/
|
|
68
|
+
function renderUnifiedTable(groups) {
|
|
69
|
+
if (groups.length === 0) {
|
|
70
|
+
log.dim(" No artifacts.");
|
|
71
|
+
console.log();
|
|
72
|
+
return;
|
|
73
|
+
}
|
|
74
|
+
// Flatten all artifacts for column width calculation
|
|
75
|
+
const allArtifacts = [];
|
|
76
|
+
for (const group of groups) {
|
|
77
|
+
for (const artifact of group.artifacts) {
|
|
78
|
+
allArtifacts.push({ ...artifact, loadoutName: group.loadoutName });
|
|
79
|
+
}
|
|
80
|
+
}
|
|
81
|
+
if (allArtifacts.length === 0) {
|
|
82
|
+
log.dim(" No artifacts.");
|
|
83
|
+
console.log();
|
|
84
|
+
return;
|
|
85
|
+
}
|
|
86
|
+
// Collect all tools across all groups
|
|
87
|
+
const allToolsSet = new Set();
|
|
88
|
+
for (const group of groups) {
|
|
89
|
+
for (const tool of group.tools) {
|
|
90
|
+
allToolsSet.add(tool);
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
const allTools = Array.from(allToolsSet).sort();
|
|
94
|
+
// Pre-compute token totals
|
|
95
|
+
let totalUpfront = 0;
|
|
96
|
+
let totalLazy = 0;
|
|
97
|
+
for (const artifact of allArtifacts) {
|
|
98
|
+
totalUpfront += artifact.tokens.upfront;
|
|
99
|
+
totalLazy += artifact.tokens.lazy;
|
|
100
|
+
}
|
|
101
|
+
// Check if any items have tokens to show
|
|
102
|
+
const hasTokens = totalUpfront > 0 || totalLazy > 0;
|
|
103
|
+
const hasLazy = totalLazy > 0;
|
|
104
|
+
// Calculate column widths
|
|
105
|
+
const { nameWidth: loadoutNameWidth, scopeWidth, totalWidth: loadoutColWidth } = calculateLoadoutColumnWidths(groups);
|
|
106
|
+
const { kindWidth, nameWidth } = calculateColumnWidths(allArtifacts);
|
|
107
|
+
const toolCols = getToolColumns(allTools);
|
|
108
|
+
// Token column widths (right-aligned numbers)
|
|
109
|
+
const TOKEN_W = hasTokens ? 7 : 0;
|
|
110
|
+
const LAZY_W = hasLazy ? 7 : 0;
|
|
111
|
+
// ── Header ───────────────────────────────────────────────────────────────
|
|
112
|
+
const loadoutH = renderLoadoutHeader(loadoutColWidth);
|
|
113
|
+
const kindH = chalk.dim("kind".padEnd(kindWidth));
|
|
114
|
+
const nameH = chalk.dim("artifact".padEnd(nameWidth));
|
|
115
|
+
const upfrontH = hasTokens ? chalk.dim("upfront".padStart(TOKEN_W)) + " " : "";
|
|
116
|
+
const lazyH = hasLazy ? chalk.dim("lazy".padStart(LAZY_W)) + " " : "";
|
|
117
|
+
const toolH = toolCols.map((c) => chalk.dim(c.tool)).join(" ");
|
|
118
|
+
console.log(` ${loadoutH} ${kindH} ${nameH} ${upfrontH}${lazyH}${toolH}`);
|
|
119
|
+
// ── Separator ─────────────────────────────────────────────────────────────
|
|
120
|
+
const sepParts = [
|
|
121
|
+
renderLoadoutSeparator(loadoutColWidth),
|
|
122
|
+
"─".repeat(kindWidth),
|
|
123
|
+
"─".repeat(nameWidth),
|
|
124
|
+
...(hasTokens ? ["─".repeat(TOKEN_W)] : []),
|
|
125
|
+
...(hasLazy ? ["─".repeat(LAZY_W)] : []),
|
|
126
|
+
toolCols.map((c) => "─".repeat(c.width)).join(" "),
|
|
127
|
+
];
|
|
128
|
+
console.log(chalk.dim(` ${sepParts.join(" ")}`));
|
|
129
|
+
// ── Rows (grouped by loadout) ─────────────────────────────────────────────
|
|
130
|
+
for (const group of groups) {
|
|
131
|
+
const sortedArtifacts = sortArtifacts(group.artifacts);
|
|
132
|
+
for (let i = 0; i < sortedArtifacts.length; i++) {
|
|
133
|
+
const artifact = sortedArtifacts[i];
|
|
134
|
+
const isFirstInGroup = i === 0;
|
|
135
|
+
// Loadout cell (only show on first row of group)
|
|
136
|
+
const loadoutCell = renderLoadoutCell(isFirstInGroup ? group : null, loadoutNameWidth, scopeWidth, loadoutColWidth);
|
|
137
|
+
const kindCell = chalk.dim(artifact.kind.padEnd(kindWidth));
|
|
138
|
+
const nameCell = truncatePath(artifact.name, nameWidth).padEnd(nameWidth);
|
|
139
|
+
// Token cells (upfront and lazy)
|
|
140
|
+
let upfrontCell = "";
|
|
141
|
+
let lazyCell = "";
|
|
142
|
+
if (hasTokens) {
|
|
143
|
+
if (artifact.tokens.upfront > 0) {
|
|
144
|
+
const formatted = artifact.tokens.upfront >= 1000
|
|
145
|
+
? `${(artifact.tokens.upfront / 1000).toFixed(1)}k`
|
|
146
|
+
: String(artifact.tokens.upfront);
|
|
147
|
+
upfrontCell = chalk.cyan(formatted.padStart(TOKEN_W)) + " ";
|
|
148
|
+
}
|
|
149
|
+
else {
|
|
150
|
+
upfrontCell = chalk.dim("—".padStart(TOKEN_W)) + " ";
|
|
151
|
+
}
|
|
152
|
+
}
|
|
153
|
+
if (hasLazy) {
|
|
154
|
+
if (artifact.tokens.lazy > 0) {
|
|
155
|
+
const formatted = artifact.tokens.lazy >= 1000
|
|
156
|
+
? `${(artifact.tokens.lazy / 1000).toFixed(1)}k`
|
|
157
|
+
: String(artifact.tokens.lazy);
|
|
158
|
+
lazyCell = chalk.yellow(formatted.padStart(LAZY_W)) + " ";
|
|
159
|
+
}
|
|
160
|
+
else {
|
|
161
|
+
lazyCell = chalk.dim("—".padStart(LAZY_W)) + " ";
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
// Tool cells
|
|
165
|
+
// Tool cells - right-justified within each column
|
|
166
|
+
const toolCells = toolCols
|
|
167
|
+
.map((c) => {
|
|
168
|
+
const hasMapping = registry.resolveMapping(c.tool, artifact.kind);
|
|
169
|
+
if (artifact.tools.includes(c.tool) && hasMapping) {
|
|
170
|
+
return " ".repeat(c.width - 1) + chalk.green("✓");
|
|
171
|
+
}
|
|
172
|
+
return " ".repeat(c.width);
|
|
173
|
+
})
|
|
174
|
+
.join(" ");
|
|
175
|
+
console.log(` ${loadoutCell} ${kindCell} ${nameCell} ${upfrontCell}${lazyCell}${toolCells}`);
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
// ── Footer ────────────────────────────────────────────────────────────────
|
|
179
|
+
console.log();
|
|
180
|
+
// Token summary
|
|
181
|
+
if (hasTokens) {
|
|
182
|
+
if (hasLazy) {
|
|
183
|
+
log.dim(` Upfront: ${formatTokens(totalUpfront)} • Lazy: ${formatTokens(totalLazy)} • Total: ${formatTokens(totalUpfront + totalLazy)}`);
|
|
184
|
+
}
|
|
185
|
+
else {
|
|
186
|
+
log.dim(` Total context: ${formatTokens(totalUpfront)}`);
|
|
187
|
+
}
|
|
188
|
+
}
|
|
189
|
+
// Scope legend
|
|
190
|
+
renderScopeLegend(groups);
|
|
191
|
+
console.log();
|
|
192
|
+
}
|
|
193
|
+
/**
|
|
194
|
+
* Load a single loadout and create a LoadoutGroup.
|
|
195
|
+
*/
|
|
196
|
+
async function loadLoadoutGroup(ctx, name, isActive) {
|
|
197
|
+
const { loadout, roots } = await loadResolvedLoadout(ctx, name);
|
|
198
|
+
const scope = getScopeFromRoots(loadout.rootPath, roots, ctx.scope);
|
|
199
|
+
return {
|
|
200
|
+
loadoutName: name,
|
|
201
|
+
scope,
|
|
202
|
+
isActive,
|
|
203
|
+
description: loadout.description,
|
|
204
|
+
rootPath: loadout.rootPath,
|
|
205
|
+
artifacts: toArtifactInfo(loadout.items),
|
|
206
|
+
tools: loadout.tools,
|
|
207
|
+
};
|
|
208
|
+
}
|
|
209
|
+
/**
|
|
210
|
+
* Collect all active loadouts from a context.
|
|
211
|
+
* Returns empty array if no state or no active loadouts.
|
|
212
|
+
*/
|
|
213
|
+
async function collectActiveGroups(ctx) {
|
|
214
|
+
const state = loadState(ctx.configPath);
|
|
215
|
+
if (!state || state.active.length === 0) {
|
|
216
|
+
return [];
|
|
217
|
+
}
|
|
218
|
+
const groups = [];
|
|
219
|
+
for (const activeName of state.active) {
|
|
220
|
+
try {
|
|
221
|
+
const group = await loadLoadoutGroup(ctx, activeName, true);
|
|
222
|
+
groups.push(group);
|
|
223
|
+
}
|
|
224
|
+
catch {
|
|
225
|
+
// Skip loadouts that can't be loaded (deleted, broken, etc.)
|
|
226
|
+
}
|
|
227
|
+
}
|
|
228
|
+
return groups;
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Check if a loadout is active in a context.
|
|
232
|
+
*/
|
|
233
|
+
function isLoadoutActive(ctx, name) {
|
|
234
|
+
const state = loadState(ctx.configPath);
|
|
235
|
+
return state?.active.includes(name) ?? false;
|
|
236
|
+
}
|
|
237
|
+
/**
|
|
238
|
+
* Execute info command - unified view of all active loadouts.
|
|
239
|
+
*/
|
|
240
|
+
export async function executeInfo(contexts, explicitName) {
|
|
241
|
+
const groups = [];
|
|
242
|
+
if (explicitName) {
|
|
243
|
+
// Explicit name: show that loadout from whichever context has it
|
|
244
|
+
for (const ctx of contexts) {
|
|
245
|
+
try {
|
|
246
|
+
const isActive = isLoadoutActive(ctx, explicitName);
|
|
247
|
+
const group = await loadLoadoutGroup(ctx, explicitName, isActive);
|
|
248
|
+
groups.push(group);
|
|
249
|
+
}
|
|
250
|
+
catch {
|
|
251
|
+
// Loadout doesn't exist in this context, skip
|
|
252
|
+
}
|
|
253
|
+
}
|
|
254
|
+
}
|
|
255
|
+
else {
|
|
256
|
+
// No name: show all active loadouts from all contexts
|
|
257
|
+
for (const ctx of contexts) {
|
|
258
|
+
const contextGroups = await collectActiveGroups(ctx);
|
|
259
|
+
groups.push(...contextGroups);
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
if (groups.length === 0) {
|
|
263
|
+
return false;
|
|
264
|
+
}
|
|
265
|
+
// Choose heading based on whether we're showing a specific loadout or active ones
|
|
266
|
+
const title = explicitName ? `Loadout: ${explicitName}` : "Active loadouts";
|
|
267
|
+
heading(title);
|
|
268
|
+
renderUnifiedTable(groups);
|
|
269
|
+
return true;
|
|
270
|
+
}
|
|
271
|
+
export const infoCommand = new Command("info")
|
|
272
|
+
.description("Show loadout information")
|
|
273
|
+
.argument("[name]", "Loadout name (uses active loadouts if not specified)")
|
|
274
|
+
.option(...SCOPE_FLAGS.local)
|
|
275
|
+
.option(...SCOPE_FLAGS.global)
|
|
276
|
+
.option(...SCOPE_FLAGS.all)
|
|
277
|
+
.action(async (name, options) => {
|
|
278
|
+
const cwd = process.cwd();
|
|
279
|
+
// If a name is given and no explicit scope, check for collisions
|
|
280
|
+
if (name && !options.local && !options.global && !options.all) {
|
|
281
|
+
try {
|
|
282
|
+
const scope = await requireScopeForName(name, options, cwd);
|
|
283
|
+
const ctx = await getContext(scope, cwd);
|
|
284
|
+
const hasAny = await executeInfo([ctx], name);
|
|
285
|
+
if (!hasAny) {
|
|
286
|
+
log.error(`Loadout not found: ${name}`);
|
|
287
|
+
process.exit(1);
|
|
288
|
+
}
|
|
289
|
+
return;
|
|
290
|
+
}
|
|
291
|
+
catch (err) {
|
|
292
|
+
// If it's a collision error, rethrow
|
|
293
|
+
const msg = err instanceof Error ? err.message : String(err);
|
|
294
|
+
if (msg.includes("exists in both")) {
|
|
295
|
+
log.error(msg);
|
|
296
|
+
process.exit(1);
|
|
297
|
+
}
|
|
298
|
+
// Otherwise fall through to show all
|
|
299
|
+
}
|
|
300
|
+
}
|
|
301
|
+
// Show info for all resolved scopes
|
|
302
|
+
const { contexts } = await resolveContexts(options, cwd);
|
|
303
|
+
const hasAny = await executeInfo(contexts, name);
|
|
304
|
+
if (!hasAny) {
|
|
305
|
+
if (name) {
|
|
306
|
+
log.error(`Loadout not found: ${name}`);
|
|
307
|
+
}
|
|
308
|
+
else {
|
|
309
|
+
log.warn("No loadout applied.");
|
|
310
|
+
log.dim("Run 'loadout info <name>' to inspect a loadout without activating.");
|
|
311
|
+
}
|
|
312
|
+
}
|
|
313
|
+
});
|
|
314
|
+
//# sourceMappingURL=info.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"info.js","sourceRoot":"","sources":["../../../src/cli/commands/info.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* loadouts init — Initialize a loadout.
|
|
3
|
+
*
|
|
4
|
+
* Scope:
|
|
5
|
+
* -l / --local → init in current directory (default)
|
|
6
|
+
* -g / --global → init at ~/.config/loadouts
|
|
7
|
+
*
|
|
8
|
+
* Unlike other commands, init defaults to local (most common use case).
|
|
9
|
+
*/
|
|
10
|
+
import { Command } from "commander";
|
|
11
|
+
/**
|
|
12
|
+
* Minimal project initialization for use by install command.
|
|
13
|
+
* Creates the directory structure without prompts or auto-apply.
|
|
14
|
+
* Returns the path to the created .loadouts/ directory.
|
|
15
|
+
*/
|
|
16
|
+
export declare function initProjectLoadout(projectRoot: string): Promise<string>;
|
|
17
|
+
export declare const initCommand: Command;
|
|
18
|
+
//# sourceMappingURL=init.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/init.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkNpC;;;;GAIG;AACH,wBAAsB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CA4D7E;AAED,eAAO,MAAM,WAAW,SASpB,CAAC"}
|