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.
Files changed (261) hide show
  1. package/LICENSE +201 -0
  2. package/README.md +108 -0
  3. package/bundled/loadouts/loadouts.yaml +5 -0
  4. package/bundled/skills/loadout-usage/SKILL.md +110 -0
  5. package/dist/builtins/index.d.ts +14 -0
  6. package/dist/builtins/index.d.ts.map +1 -0
  7. package/dist/builtins/index.js +58 -0
  8. package/dist/builtins/index.js.map +1 -0
  9. package/dist/builtins/kinds/extension.d.ts +3 -0
  10. package/dist/builtins/kinds/extension.d.ts.map +1 -0
  11. package/dist/builtins/kinds/extension.js +9 -0
  12. package/dist/builtins/kinds/extension.js.map +1 -0
  13. package/dist/builtins/kinds/instruction.d.ts +3 -0
  14. package/dist/builtins/kinds/instruction.d.ts.map +1 -0
  15. package/dist/builtins/kinds/instruction.js +8 -0
  16. package/dist/builtins/kinds/instruction.js.map +1 -0
  17. package/dist/builtins/kinds/prompt.d.ts +3 -0
  18. package/dist/builtins/kinds/prompt.d.ts.map +1 -0
  19. package/dist/builtins/kinds/prompt.js +8 -0
  20. package/dist/builtins/kinds/prompt.js.map +1 -0
  21. package/dist/builtins/kinds/rule.d.ts +3 -0
  22. package/dist/builtins/kinds/rule.d.ts.map +1 -0
  23. package/dist/builtins/kinds/rule.js +10 -0
  24. package/dist/builtins/kinds/rule.js.map +1 -0
  25. package/dist/builtins/kinds/skill.d.ts +3 -0
  26. package/dist/builtins/kinds/skill.d.ts.map +1 -0
  27. package/dist/builtins/kinds/skill.js +8 -0
  28. package/dist/builtins/kinds/skill.js.map +1 -0
  29. package/dist/builtins/kinds/theme.d.ts +3 -0
  30. package/dist/builtins/kinds/theme.d.ts.map +1 -0
  31. package/dist/builtins/kinds/theme.js +8 -0
  32. package/dist/builtins/kinds/theme.js.map +1 -0
  33. package/dist/builtins/tools/claude-code.d.ts +3 -0
  34. package/dist/builtins/tools/claude-code.d.ts.map +1 -0
  35. package/dist/builtins/tools/claude-code.js +30 -0
  36. package/dist/builtins/tools/claude-code.js.map +1 -0
  37. package/dist/builtins/tools/codex.d.ts +3 -0
  38. package/dist/builtins/tools/codex.d.ts.map +1 -0
  39. package/dist/builtins/tools/codex.js +17 -0
  40. package/dist/builtins/tools/codex.js.map +1 -0
  41. package/dist/builtins/tools/cursor.d.ts +3 -0
  42. package/dist/builtins/tools/cursor.d.ts.map +1 -0
  43. package/dist/builtins/tools/cursor.js +22 -0
  44. package/dist/builtins/tools/cursor.js.map +1 -0
  45. package/dist/builtins/tools/opencode.d.ts +3 -0
  46. package/dist/builtins/tools/opencode.d.ts.map +1 -0
  47. package/dist/builtins/tools/opencode.js +45 -0
  48. package/dist/builtins/tools/opencode.js.map +1 -0
  49. package/dist/builtins/tools/pi.d.ts +3 -0
  50. package/dist/builtins/tools/pi.d.ts.map +1 -0
  51. package/dist/builtins/tools/pi.js +22 -0
  52. package/dist/builtins/tools/pi.js.map +1 -0
  53. package/dist/cli/commands/activate.d.ts +12 -0
  54. package/dist/cli/commands/activate.d.ts.map +1 -0
  55. package/dist/cli/commands/activate.js +70 -0
  56. package/dist/cli/commands/activate.js.map +1 -0
  57. package/dist/cli/commands/check.d.ts +12 -0
  58. package/dist/cli/commands/check.d.ts.map +1 -0
  59. package/dist/cli/commands/check.js +152 -0
  60. package/dist/cli/commands/check.js.map +1 -0
  61. package/dist/cli/commands/clear.d.ts +12 -0
  62. package/dist/cli/commands/clear.d.ts.map +1 -0
  63. package/dist/cli/commands/clear.js +25 -0
  64. package/dist/cli/commands/clear.js.map +1 -0
  65. package/dist/cli/commands/create.d.ts +11 -0
  66. package/dist/cli/commands/create.d.ts.map +1 -0
  67. package/dist/cli/commands/create.js +113 -0
  68. package/dist/cli/commands/create.js.map +1 -0
  69. package/dist/cli/commands/deactivate.d.ts +12 -0
  70. package/dist/cli/commands/deactivate.d.ts.map +1 -0
  71. package/dist/cli/commands/deactivate.js +67 -0
  72. package/dist/cli/commands/deactivate.js.map +1 -0
  73. package/dist/cli/commands/diff.d.ts +16 -0
  74. package/dist/cli/commands/diff.d.ts.map +1 -0
  75. package/dist/cli/commands/diff.js +144 -0
  76. package/dist/cli/commands/diff.js.map +1 -0
  77. package/dist/cli/commands/docs.d.ts +12 -0
  78. package/dist/cli/commands/docs.d.ts.map +1 -0
  79. package/dist/cli/commands/docs.js +115 -0
  80. package/dist/cli/commands/docs.js.map +1 -0
  81. package/dist/cli/commands/edit.d.ts +11 -0
  82. package/dist/cli/commands/edit.d.ts.map +1 -0
  83. package/dist/cli/commands/edit.js +71 -0
  84. package/dist/cli/commands/edit.js.map +1 -0
  85. package/dist/cli/commands/fallback.d.ts +9 -0
  86. package/dist/cli/commands/fallback.d.ts.map +1 -0
  87. package/dist/cli/commands/fallback.js +35 -0
  88. package/dist/cli/commands/fallback.js.map +1 -0
  89. package/dist/cli/commands/info.d.ts +23 -0
  90. package/dist/cli/commands/info.d.ts.map +1 -0
  91. package/dist/cli/commands/info.js +314 -0
  92. package/dist/cli/commands/info.js.map +1 -0
  93. package/dist/cli/commands/init.d.ts +18 -0
  94. package/dist/cli/commands/init.d.ts.map +1 -0
  95. package/dist/cli/commands/init.js +255 -0
  96. package/dist/cli/commands/init.js.map +1 -0
  97. package/dist/cli/commands/install.d.ts +27 -0
  98. package/dist/cli/commands/install.d.ts.map +1 -0
  99. package/dist/cli/commands/install.js +586 -0
  100. package/dist/cli/commands/install.js.map +1 -0
  101. package/dist/cli/commands/instructions.d.ts +8 -0
  102. package/dist/cli/commands/instructions.d.ts.map +1 -0
  103. package/dist/cli/commands/instructions.js +218 -0
  104. package/dist/cli/commands/instructions.js.map +1 -0
  105. package/dist/cli/commands/kinds.d.ts +6 -0
  106. package/dist/cli/commands/kinds.d.ts.map +1 -0
  107. package/dist/cli/commands/kinds.js +59 -0
  108. package/dist/cli/commands/kinds.js.map +1 -0
  109. package/dist/cli/commands/list.d.ts +12 -0
  110. package/dist/cli/commands/list.d.ts.map +1 -0
  111. package/dist/cli/commands/list.js +182 -0
  112. package/dist/cli/commands/list.js.map +1 -0
  113. package/dist/cli/commands/policy.d.ts +28 -0
  114. package/dist/cli/commands/policy.d.ts.map +1 -0
  115. package/dist/cli/commands/policy.js +50 -0
  116. package/dist/cli/commands/policy.js.map +1 -0
  117. package/dist/cli/commands/remove.d.ts +24 -0
  118. package/dist/cli/commands/remove.d.ts.map +1 -0
  119. package/dist/cli/commands/remove.js +64 -0
  120. package/dist/cli/commands/remove.js.map +1 -0
  121. package/dist/cli/commands/render-engine.d.ts +36 -0
  122. package/dist/cli/commands/render-engine.d.ts.map +1 -0
  123. package/dist/cli/commands/render-engine.js +177 -0
  124. package/dist/cli/commands/render-engine.js.map +1 -0
  125. package/dist/cli/commands/rule.d.ts +11 -0
  126. package/dist/cli/commands/rule.d.ts.map +1 -0
  127. package/dist/cli/commands/rule.js +302 -0
  128. package/dist/cli/commands/rule.js.map +1 -0
  129. package/dist/cli/commands/sanitize.d.ts +14 -0
  130. package/dist/cli/commands/sanitize.d.ts.map +1 -0
  131. package/dist/cli/commands/sanitize.js +62 -0
  132. package/dist/cli/commands/sanitize.js.map +1 -0
  133. package/dist/cli/commands/skill.d.ts +11 -0
  134. package/dist/cli/commands/skill.d.ts.map +1 -0
  135. package/dist/cli/commands/skill.js +380 -0
  136. package/dist/cli/commands/skill.js.map +1 -0
  137. package/dist/cli/commands/status.d.ts +26 -0
  138. package/dist/cli/commands/status.d.ts.map +1 -0
  139. package/dist/cli/commands/status.js +454 -0
  140. package/dist/cli/commands/status.js.map +1 -0
  141. package/dist/cli/commands/sync.d.ts +14 -0
  142. package/dist/cli/commands/sync.d.ts.map +1 -0
  143. package/dist/cli/commands/sync.js +53 -0
  144. package/dist/cli/commands/sync.js.map +1 -0
  145. package/dist/cli/commands/update.d.ts +3 -0
  146. package/dist/cli/commands/update.d.ts.map +1 -0
  147. package/dist/cli/commands/update.js +48 -0
  148. package/dist/cli/commands/update.js.map +1 -0
  149. package/dist/cli/index.d.ts +11 -0
  150. package/dist/cli/index.d.ts.map +1 -0
  151. package/dist/cli/index.js +134 -0
  152. package/dist/cli/index.js.map +1 -0
  153. package/dist/core/config.d.ts +64 -0
  154. package/dist/core/config.d.ts.map +1 -0
  155. package/dist/core/config.js +166 -0
  156. package/dist/core/config.js.map +1 -0
  157. package/dist/core/discovery.d.ts +50 -0
  158. package/dist/core/discovery.d.ts.map +1 -0
  159. package/dist/core/discovery.js +249 -0
  160. package/dist/core/discovery.js.map +1 -0
  161. package/dist/core/fallback.d.ts +23 -0
  162. package/dist/core/fallback.d.ts.map +1 -0
  163. package/dist/core/fallback.js +119 -0
  164. package/dist/core/fallback.js.map +1 -0
  165. package/dist/core/import-discovery.d.ts +56 -0
  166. package/dist/core/import-discovery.d.ts.map +1 -0
  167. package/dist/core/import-discovery.js +304 -0
  168. package/dist/core/import-discovery.js.map +1 -0
  169. package/dist/core/kindLoader.d.ts +119 -0
  170. package/dist/core/kindLoader.d.ts.map +1 -0
  171. package/dist/core/kindLoader.js +141 -0
  172. package/dist/core/kindLoader.js.map +1 -0
  173. package/dist/core/manifest.d.ts +39 -0
  174. package/dist/core/manifest.d.ts.map +1 -0
  175. package/dist/core/manifest.js +167 -0
  176. package/dist/core/manifest.js.map +1 -0
  177. package/dist/core/plugin.d.ts +22 -0
  178. package/dist/core/plugin.d.ts.map +1 -0
  179. package/dist/core/plugin.js +20 -0
  180. package/dist/core/plugin.js.map +1 -0
  181. package/dist/core/registry.d.ts +115 -0
  182. package/dist/core/registry.d.ts.map +1 -0
  183. package/dist/core/registry.js +105 -0
  184. package/dist/core/registry.js.map +1 -0
  185. package/dist/core/render.d.ts +64 -0
  186. package/dist/core/render.d.ts.map +1 -0
  187. package/dist/core/render.js +457 -0
  188. package/dist/core/render.js.map +1 -0
  189. package/dist/core/resolve.d.ts +39 -0
  190. package/dist/core/resolve.d.ts.map +1 -0
  191. package/dist/core/resolve.js +128 -0
  192. package/dist/core/resolve.js.map +1 -0
  193. package/dist/core/schema.d.ts +308 -0
  194. package/dist/core/schema.d.ts.map +1 -0
  195. package/dist/core/schema.js +81 -0
  196. package/dist/core/schema.js.map +1 -0
  197. package/dist/core/scope.d.ts +74 -0
  198. package/dist/core/scope.d.ts.map +1 -0
  199. package/dist/core/scope.js +176 -0
  200. package/dist/core/scope.js.map +1 -0
  201. package/dist/core/template.d.ts +32 -0
  202. package/dist/core/template.d.ts.map +1 -0
  203. package/dist/core/template.js +32 -0
  204. package/dist/core/template.js.map +1 -0
  205. package/dist/core/tokens.d.ts +33 -0
  206. package/dist/core/tokens.d.ts.map +1 -0
  207. package/dist/core/tokens.js +97 -0
  208. package/dist/core/tokens.js.map +1 -0
  209. package/dist/core/types.d.ts +103 -0
  210. package/dist/core/types.d.ts.map +1 -0
  211. package/dist/core/types.js +10 -0
  212. package/dist/core/types.js.map +1 -0
  213. package/dist/index.d.ts +12 -0
  214. package/dist/index.d.ts.map +1 -0
  215. package/dist/index.js +24 -0
  216. package/dist/index.js.map +1 -0
  217. package/dist/lib/artifact-paths.d.ts +39 -0
  218. package/dist/lib/artifact-paths.d.ts.map +1 -0
  219. package/dist/lib/artifact-paths.js +83 -0
  220. package/dist/lib/artifact-paths.js.map +1 -0
  221. package/dist/lib/artifact-table.d.ts +126 -0
  222. package/dist/lib/artifact-table.d.ts.map +1 -0
  223. package/dist/lib/artifact-table.js +263 -0
  224. package/dist/lib/artifact-table.js.map +1 -0
  225. package/dist/lib/editor.d.ts +17 -0
  226. package/dist/lib/editor.d.ts.map +1 -0
  227. package/dist/lib/editor.js +33 -0
  228. package/dist/lib/editor.js.map +1 -0
  229. package/dist/lib/fs.d.ts +87 -0
  230. package/dist/lib/fs.d.ts.map +1 -0
  231. package/dist/lib/fs.js +229 -0
  232. package/dist/lib/fs.js.map +1 -0
  233. package/dist/lib/git.d.ts +13 -0
  234. package/dist/lib/git.d.ts.map +1 -0
  235. package/dist/lib/git.js +28 -0
  236. package/dist/lib/git.js.map +1 -0
  237. package/dist/lib/gitignore.d.ts +26 -0
  238. package/dist/lib/gitignore.d.ts.map +1 -0
  239. package/dist/lib/gitignore.js +97 -0
  240. package/dist/lib/gitignore.js.map +1 -0
  241. package/dist/lib/loadout-column.d.ts +66 -0
  242. package/dist/lib/loadout-column.d.ts.map +1 -0
  243. package/dist/lib/loadout-column.js +66 -0
  244. package/dist/lib/loadout-column.js.map +1 -0
  245. package/dist/lib/output.d.ts +15 -0
  246. package/dist/lib/output.d.ts.map +1 -0
  247. package/dist/lib/output.js +32 -0
  248. package/dist/lib/output.js.map +1 -0
  249. package/dist/lib/scope-indicators.d.ts +60 -0
  250. package/dist/lib/scope-indicators.d.ts.map +1 -0
  251. package/dist/lib/scope-indicators.js +110 -0
  252. package/dist/lib/scope-indicators.js.map +1 -0
  253. package/docs/authoring.md +182 -0
  254. package/docs/commands.md +192 -0
  255. package/docs/concepts.md +114 -0
  256. package/docs/index.md +60 -0
  257. package/docs/quickstart.md +100 -0
  258. package/docs/troubleshooting.md +147 -0
  259. package/docs/visual-language.md +251 -0
  260. package/docs/workflows.md +184 -0
  261. package/package.json +54 -0
@@ -0,0 +1,586 @@
1
+ /**
2
+ * loadout install — Import existing tool configurations into loadout.
3
+ *
4
+ * Scans all known tool directories for rules, skills, and instructions,
5
+ * then allows the user to import them into .loadouts/.
6
+ */
7
+ import { Command } from "commander";
8
+ import * as path from "node:path";
9
+ import * as readline from "node:readline";
10
+ import * as yaml from "yaml";
11
+ import chalk from "chalk";
12
+ import { discoverImportableArtifacts, groupByKind, formatSize, formatRelativeTime, } from "../../core/import-discovery.js";
13
+ import { findNearestLoadoutRoot } from "../../core/discovery.js";
14
+ import { writeFile, fileExists, copyFile, copyDir, removeFile, removeDir, isDirectory, listFiles, } from "../../lib/fs.js";
15
+ import { parseLoadoutDefinition, sanitizeRuleFile } from "../../core/config.js";
16
+ import { loadState } from "../../core/manifest.js";
17
+ import { log, heading } from "../../lib/output.js";
18
+ import { initProjectLoadout } from "./init.js";
19
+ // ---------------------------------------------------------------------------
20
+ // User interaction helpers
21
+ // ---------------------------------------------------------------------------
22
+ function createPrompt() {
23
+ return readline.createInterface({
24
+ input: process.stdin,
25
+ output: process.stdout,
26
+ });
27
+ }
28
+ async function askQuestion(rl, question) {
29
+ return new Promise((resolve) => {
30
+ rl.question(question, (answer) => {
31
+ resolve(answer.trim().toLowerCase());
32
+ });
33
+ });
34
+ }
35
+ // ---------------------------------------------------------------------------
36
+ // Display helpers
37
+ // ---------------------------------------------------------------------------
38
+ function displayDiscoveryResults(result) {
39
+ const grouped = groupByKind(result.artifacts);
40
+ console.log();
41
+ log.info(`Found ${result.artifacts.length} artifacts to import:`);
42
+ console.log();
43
+ // Instructions
44
+ if (grouped.instruction.length > 0) {
45
+ console.log(chalk.bold(" INSTRUCTIONS") + chalk.dim(` (${grouped.instruction.length})`));
46
+ for (const artifact of grouped.instruction) {
47
+ const conflict = result.conflicts.has(`instruction:${artifact.name}`);
48
+ const suffix = conflict ? chalk.yellow(" ⚠ conflict") : "";
49
+ console.log(chalk.dim(" ○ ") + artifact.displayPath + suffix);
50
+ }
51
+ console.log();
52
+ }
53
+ // Rules
54
+ if (grouped.rule.length > 0) {
55
+ console.log(chalk.bold(" RULES") + chalk.dim(` (${grouped.rule.length})`));
56
+ for (const artifact of grouped.rule) {
57
+ const conflict = result.conflicts.has(`rule:${artifact.name}`);
58
+ const suffix = conflict ? chalk.yellow(" ⚠ conflict") : "";
59
+ const toolHint = chalk.dim(` (${artifact.tool})`);
60
+ console.log(chalk.dim(" ○ ") + artifact.name + toolHint + suffix);
61
+ }
62
+ console.log();
63
+ }
64
+ // Skills
65
+ if (grouped.skill.length > 0) {
66
+ console.log(chalk.bold(" SKILLS") + chalk.dim(` (${grouped.skill.length})`));
67
+ for (const artifact of grouped.skill) {
68
+ const conflict = result.conflicts.has(`skill:${artifact.name}`);
69
+ const suffix = conflict ? chalk.yellow(" ⚠ conflict") : "";
70
+ const toolHint = chalk.dim(` (${artifact.tool})`);
71
+ console.log(chalk.dim(" ○ ") + artifact.name + "/" + toolHint + suffix);
72
+ }
73
+ console.log();
74
+ }
75
+ // Show conflict details
76
+ if (result.conflicts.size > 0) {
77
+ console.log(chalk.yellow(` ⚠ ${result.conflicts.size} naming conflict(s) detected`));
78
+ console.log(chalk.dim(" Conflicts will be resolved during import"));
79
+ console.log();
80
+ }
81
+ }
82
+ function displayImportTable(results, targetLoadout, keep) {
83
+ console.log();
84
+ heading("Import Summary");
85
+ console.log();
86
+ const maxSourceLen = Math.max(...results.map((r) => r.artifact.displayPath.length), 10);
87
+ // Header
88
+ console.log(chalk.dim(" ") +
89
+ "Source".padEnd(maxSourceLen + 2) +
90
+ "→ " +
91
+ "Destination");
92
+ console.log(chalk.dim(" " + "─".repeat(maxSourceLen + 30)));
93
+ // Rows
94
+ for (const result of results) {
95
+ const source = result.artifact.displayPath.padEnd(maxSourceLen + 2);
96
+ const dest = `.loadouts/${result.artifact.destPath}`;
97
+ if (result.success) {
98
+ console.log(chalk.green(" ✓ ") + source + chalk.dim("→ ") + dest);
99
+ }
100
+ else {
101
+ console.log(chalk.red(" ✗ ") + source + chalk.dim("→ ") + chalk.red(result.error || "failed"));
102
+ }
103
+ }
104
+ console.log();
105
+ const successCount = results.filter((r) => r.success).length;
106
+ const failCount = results.filter((r) => !r.success).length;
107
+ if (failCount === 0) {
108
+ log.success(`Imported ${successCount} artifact${successCount !== 1 ? "s" : ""} to ${chalk.cyan(targetLoadout)} loadout`);
109
+ }
110
+ else {
111
+ log.warn(`Imported ${successCount}, failed ${failCount}`);
112
+ }
113
+ if (!keep && successCount > 0) {
114
+ log.dim(" Original files have been removed");
115
+ }
116
+ }
117
+ // ---------------------------------------------------------------------------
118
+ // Conflict resolution
119
+ // ---------------------------------------------------------------------------
120
+ async function resolveConflicts(result, rl) {
121
+ const resolved = [];
122
+ const seen = new Set();
123
+ for (const artifact of result.artifacts) {
124
+ const key = `${artifact.kind}:${artifact.name}`;
125
+ // Skip if we've already handled this conflict
126
+ if (seen.has(key))
127
+ continue;
128
+ const conflicting = result.conflicts.get(key);
129
+ if (!conflicting || conflicting.length <= 1) {
130
+ // No conflict, include as-is
131
+ resolved.push(artifact);
132
+ seen.add(key);
133
+ continue;
134
+ }
135
+ // Handle conflict
136
+ seen.add(key);
137
+ console.log();
138
+ console.log(chalk.yellow(`⚠ Conflict: '${artifact.name}' exists in multiple locations:`));
139
+ console.log();
140
+ for (let i = 0; i < conflicting.length; i++) {
141
+ const c = conflicting[i];
142
+ const sizeStr = formatSize(c.size);
143
+ const timeStr = formatRelativeTime(c.mtime);
144
+ console.log(` ${i + 1}. ${c.displayPath} (${sizeStr}, ${timeStr})`);
145
+ }
146
+ console.log();
147
+ console.log("How to resolve?");
148
+ for (let i = 0; i < conflicting.length; i++) {
149
+ console.log(` [${i + 1}] Keep ${conflicting[i].tool} version`);
150
+ }
151
+ console.log(" [s] Skip this artifact");
152
+ console.log(" [b] Import both (rename)");
153
+ console.log();
154
+ const answer = await askQuestion(rl, "Choice: ");
155
+ if (answer === "s") {
156
+ // Skip
157
+ continue;
158
+ }
159
+ else if (answer === "b") {
160
+ // Import both with renamed destinations
161
+ for (const c of conflicting) {
162
+ const renamed = { ...c };
163
+ const toolSuffix = c.tool === "project-root" ? "" : `-${c.tool}`;
164
+ if (c.kind === "rule") {
165
+ renamed.destPath = `rules/${c.name}${toolSuffix}.md`;
166
+ }
167
+ else if (c.kind === "skill") {
168
+ renamed.destPath = `skills/${c.name}${toolSuffix}`;
169
+ }
170
+ resolved.push(renamed);
171
+ }
172
+ }
173
+ else {
174
+ // Pick specific version
175
+ const idx = parseInt(answer, 10) - 1;
176
+ if (idx >= 0 && idx < conflicting.length) {
177
+ resolved.push(conflicting[idx]);
178
+ }
179
+ else {
180
+ // Invalid input, default to first (newest by mtime)
181
+ const sorted = [...conflicting].sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
182
+ resolved.push(sorted[0]);
183
+ }
184
+ }
185
+ }
186
+ return resolved;
187
+ }
188
+ // ---------------------------------------------------------------------------
189
+ // Import logic
190
+ // ---------------------------------------------------------------------------
191
+ async function importArtifact(artifact, loadoutPath, options) {
192
+ const destPath = path.join(loadoutPath, artifact.destPath);
193
+ if (options.dryRun) {
194
+ return { artifact, success: true };
195
+ }
196
+ try {
197
+ if (artifact.kind === "skill") {
198
+ // Copy directory
199
+ copyDir(artifact.sourcePath, destPath);
200
+ }
201
+ else {
202
+ // Copy file
203
+ copyFile(artifact.sourcePath, destPath);
204
+ // Sanitize rules for cross-tool compatibility
205
+ if (artifact.kind === "rule") {
206
+ sanitizeRuleFile(destPath);
207
+ }
208
+ }
209
+ // Remove original unless --keep
210
+ if (!options.keep) {
211
+ if (artifact.kind === "skill") {
212
+ removeDir(artifact.sourcePath);
213
+ }
214
+ else {
215
+ removeFile(artifact.sourcePath);
216
+ }
217
+ }
218
+ return { artifact, success: true };
219
+ }
220
+ catch (err) {
221
+ return {
222
+ artifact,
223
+ success: false,
224
+ error: err instanceof Error ? err.message : String(err),
225
+ };
226
+ }
227
+ }
228
+ async function addToLoadout(artifacts, loadoutPath, loadoutName) {
229
+ const loadoutDefPath = path.join(loadoutPath, "loadouts", `${loadoutName}.yaml`);
230
+ if (!fileExists(loadoutDefPath)) {
231
+ return; // Loadout doesn't exist, skip
232
+ }
233
+ try {
234
+ const def = parseLoadoutDefinition(loadoutDefPath);
235
+ let modified = false;
236
+ for (const artifact of artifacts) {
237
+ const includeEntry = artifact.destPath;
238
+ const alreadyIncluded = def.include.some((i) => (typeof i === "string" ? i : i.path) === includeEntry);
239
+ if (!alreadyIncluded) {
240
+ def.include.push(includeEntry);
241
+ modified = true;
242
+ }
243
+ }
244
+ if (modified) {
245
+ writeFile(loadoutDefPath, yaml.stringify(def));
246
+ }
247
+ }
248
+ catch {
249
+ // Ignore errors updating loadout
250
+ }
251
+ }
252
+ // ---------------------------------------------------------------------------
253
+ // Target loadout resolution
254
+ // ---------------------------------------------------------------------------
255
+ /**
256
+ * Get list of available loadouts in .loadouts/loadouts/
257
+ */
258
+ function getAvailableLoadouts(loadoutPath) {
259
+ const loadoutsDir = path.join(loadoutPath, "loadouts");
260
+ if (!isDirectory(loadoutsDir))
261
+ return [];
262
+ return listFiles(loadoutsDir)
263
+ .filter((f) => f.endsWith(".yaml"))
264
+ .map((f) => f.replace(/\.yaml$/, ""));
265
+ }
266
+ /**
267
+ * Resolve the target loadout for imports.
268
+ *
269
+ * Priority:
270
+ * 1. Explicit --loadout flag
271
+ * 2. Single active loadout → use it
272
+ * 3. Multiple active → prompt (or first with --yes)
273
+ * 4. None active → default to "base"
274
+ */
275
+ async function resolveTargetLoadout(loadoutPath, options, rl) {
276
+ // If explicitly specified, use it
277
+ if (options.to) {
278
+ return { loadout: options.to, confirmed: true };
279
+ }
280
+ const state = loadState(loadoutPath);
281
+ const activeLoadouts = state?.active ?? [];
282
+ const availableLoadouts = getAvailableLoadouts(loadoutPath);
283
+ // Single active loadout → use it
284
+ if (activeLoadouts.length === 1) {
285
+ return { loadout: activeLoadouts[0], confirmed: true };
286
+ }
287
+ // Multiple active loadouts
288
+ if (activeLoadouts.length > 1) {
289
+ if (options.yes) {
290
+ // Auto mode: use first active
291
+ return { loadout: activeLoadouts[0], confirmed: true };
292
+ }
293
+ if (rl) {
294
+ console.log();
295
+ console.log(chalk.yellow("Multiple loadouts are active:"));
296
+ for (let i = 0; i < activeLoadouts.length; i++) {
297
+ console.log(` ${i + 1}. ${activeLoadouts[i]}`);
298
+ }
299
+ console.log();
300
+ const answer = await askQuestion(rl, `Add imports to which loadout? [1-${activeLoadouts.length}] `);
301
+ const idx = parseInt(answer, 10) - 1;
302
+ if (idx >= 0 && idx < activeLoadouts.length) {
303
+ return { loadout: activeLoadouts[idx], confirmed: true };
304
+ }
305
+ // Default to first if invalid input
306
+ return { loadout: activeLoadouts[0], confirmed: true };
307
+ }
308
+ // No rl, use first
309
+ return { loadout: activeLoadouts[0], confirmed: true };
310
+ }
311
+ // No active loadouts → default to "base" if it exists
312
+ if (availableLoadouts.includes("base")) {
313
+ return { loadout: "base", confirmed: true };
314
+ }
315
+ // Fall back to first available, or "base" if none
316
+ if (availableLoadouts.length > 0) {
317
+ return { loadout: availableLoadouts[0], confirmed: true };
318
+ }
319
+ return { loadout: "base", confirmed: true };
320
+ }
321
+ export async function runInstall(projectRoot, loadoutPath, options) {
322
+ // Build filter options
323
+ const kinds = (() => {
324
+ const selected = [];
325
+ if (options.rules)
326
+ selected.push("rule");
327
+ if (options.skills)
328
+ selected.push("skill");
329
+ if (options.instructions)
330
+ selected.push("instruction");
331
+ return selected.length > 0 ? selected : undefined;
332
+ })();
333
+ const tools = options.from?.split(",").map((t) => t.trim());
334
+ // Discover artifacts
335
+ const result = discoverImportableArtifacts(projectRoot, {
336
+ tools,
337
+ kinds,
338
+ loadoutPath,
339
+ });
340
+ if (result.artifacts.length === 0) {
341
+ log.dim("No existing configurations found to import.");
342
+ return { imported: 0, skipped: 0, failed: 0 };
343
+ }
344
+ // Display what we found
345
+ displayDiscoveryResults(result);
346
+ let artifactsToImport;
347
+ if (options.yes) {
348
+ // Auto-confirm: resolve conflicts by taking newest
349
+ artifactsToImport = [];
350
+ const seen = new Set();
351
+ for (const artifact of result.artifacts) {
352
+ const key = `${artifact.kind}:${artifact.name}`;
353
+ if (seen.has(key))
354
+ continue;
355
+ seen.add(key);
356
+ const conflicting = result.conflicts.get(key);
357
+ if (conflicting && conflicting.length > 1) {
358
+ // Take newest
359
+ const sorted = [...conflicting].sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
360
+ artifactsToImport.push(sorted[0]);
361
+ }
362
+ else {
363
+ artifactsToImport.push(artifact);
364
+ }
365
+ }
366
+ }
367
+ else if (options.interactive) {
368
+ // Interactive selection mode
369
+ const rl = createPrompt();
370
+ try {
371
+ // First resolve conflicts
372
+ artifactsToImport = await resolveConflicts(result, rl);
373
+ // Then let user deselect items
374
+ console.log();
375
+ console.log("Selected artifacts:");
376
+ for (let i = 0; i < artifactsToImport.length; i++) {
377
+ console.log(` ${i + 1}. ${artifactsToImport[i].displayPath}`);
378
+ }
379
+ console.log();
380
+ const answer = await askQuestion(rl, "Enter numbers to exclude (comma-separated), or press Enter to import all: ");
381
+ if (answer) {
382
+ const exclude = new Set(answer.split(",").map((n) => parseInt(n.trim(), 10) - 1));
383
+ artifactsToImport = artifactsToImport.filter((_, i) => !exclude.has(i));
384
+ }
385
+ rl.close();
386
+ }
387
+ catch {
388
+ rl.close();
389
+ throw new Error("Interactive mode cancelled");
390
+ }
391
+ }
392
+ else {
393
+ // Default: prompt for confirmation
394
+ const rl = createPrompt();
395
+ try {
396
+ const answer = await askQuestion(rl, `Import all ${result.artifacts.length} artifacts? [Y/n/i] `);
397
+ if (answer === "n" || answer === "no") {
398
+ rl.close();
399
+ log.dim("Import cancelled.");
400
+ return { imported: 0, skipped: result.artifacts.length, failed: 0 };
401
+ }
402
+ if (answer === "i") {
403
+ // Switch to interactive mode
404
+ rl.close();
405
+ return runInstall(projectRoot, loadoutPath, { ...options, interactive: true });
406
+ }
407
+ // Resolve conflicts automatically (take newest)
408
+ artifactsToImport = [];
409
+ const seen = new Set();
410
+ for (const artifact of result.artifacts) {
411
+ const key = `${artifact.kind}:${artifact.name}`;
412
+ if (seen.has(key))
413
+ continue;
414
+ seen.add(key);
415
+ const conflicting = result.conflicts.get(key);
416
+ if (conflicting && conflicting.length > 1) {
417
+ // Prompt for each conflict
418
+ console.log();
419
+ console.log(chalk.yellow(`⚠ Conflict: '${artifact.name}'`));
420
+ for (let i = 0; i < conflicting.length; i++) {
421
+ const c = conflicting[i];
422
+ console.log(` ${i + 1}. ${c.displayPath} (${formatRelativeTime(c.mtime)})`);
423
+ }
424
+ const choice = await askQuestion(rl, `Which to keep? [1-${conflicting.length}/s=skip]: `);
425
+ if (choice === "s") {
426
+ continue;
427
+ }
428
+ const idx = parseInt(choice, 10) - 1;
429
+ if (idx >= 0 && idx < conflicting.length) {
430
+ artifactsToImport.push(conflicting[idx]);
431
+ }
432
+ else {
433
+ // Default to newest
434
+ const sorted = [...conflicting].sort((a, b) => b.mtime.getTime() - a.mtime.getTime());
435
+ artifactsToImport.push(sorted[0]);
436
+ }
437
+ }
438
+ else {
439
+ artifactsToImport.push(artifact);
440
+ }
441
+ }
442
+ rl.close();
443
+ }
444
+ catch {
445
+ rl.close();
446
+ throw new Error("Import cancelled");
447
+ }
448
+ }
449
+ if (artifactsToImport.length === 0) {
450
+ log.dim("No artifacts selected for import.");
451
+ return { imported: 0, skipped: result.artifacts.length, failed: 0 };
452
+ }
453
+ // Resolve target loadout (may prompt if multiple active)
454
+ const rl2 = options.yes ? undefined : createPrompt();
455
+ const { loadout: targetLoadout } = await resolveTargetLoadout(loadoutPath, options, rl2);
456
+ rl2?.close();
457
+ // Confirm target loadout if not using --yes
458
+ if (!options.yes && !options.to) {
459
+ const rl3 = createPrompt();
460
+ const confirm = await askQuestion(rl3, `Add to ${chalk.cyan(targetLoadout)} loadout? [Y/n] `);
461
+ rl3.close();
462
+ if (confirm === "n" || confirm === "no") {
463
+ log.dim("Import cancelled.");
464
+ return { imported: 0, skipped: result.artifacts.length, failed: 0 };
465
+ }
466
+ }
467
+ // Update instruction destPaths to use the target loadout name
468
+ for (const artifact of artifactsToImport) {
469
+ if (artifact.kind === "instruction") {
470
+ artifact.destPath = `instructions/AGENTS.${targetLoadout}.md`;
471
+ }
472
+ }
473
+ // Perform import
474
+ if (options.dryRun) {
475
+ console.log();
476
+ log.info("Dry run — no changes made");
477
+ displayImportTable(artifactsToImport.map((a) => ({ artifact: a, success: true })), targetLoadout, options.keep ?? false);
478
+ return { imported: artifactsToImport.length, skipped: 0, failed: 0 };
479
+ }
480
+ const results = [];
481
+ for (const artifact of artifactsToImport) {
482
+ const importResult = await importArtifact(artifact, loadoutPath, {
483
+ keep: options.keep ?? false,
484
+ dryRun: false,
485
+ });
486
+ results.push(importResult);
487
+ }
488
+ // Add successful imports to loadout definition
489
+ const successfulArtifacts = results
490
+ .filter((r) => r.success)
491
+ .map((r) => r.artifact);
492
+ if (successfulArtifacts.length > 0) {
493
+ await addToLoadout(successfulArtifacts, loadoutPath, targetLoadout);
494
+ }
495
+ // Display results
496
+ displayImportTable(results, targetLoadout, options.keep ?? false);
497
+ const imported = results.filter((r) => r.success).length;
498
+ const failed = results.filter((r) => !r.success).length;
499
+ const skipped = result.artifacts.length - artifactsToImport.length;
500
+ if (imported > 0) {
501
+ console.log();
502
+ log.info(`Run ${chalk.cyan("loadouts sync")} to apply changes to tool directories.`);
503
+ }
504
+ return { imported, skipped, failed };
505
+ }
506
+ // ---------------------------------------------------------------------------
507
+ // CLI Command
508
+ // ---------------------------------------------------------------------------
509
+ export const installCommand = new Command("install")
510
+ .description("Import existing tool configurations into loadout")
511
+ .option("--rules", "Only import rules")
512
+ .option("--skills", "Only import skills")
513
+ .option("--instructions", "Only import instructions")
514
+ .option("--from <tools>", "Only from specific tools (comma-separated: cursor,claude-code,opencode,codex,pi)")
515
+ .option("-i, --interactive", "Interactive selection mode")
516
+ .option("-y, --yes", "Auto-confirm without prompting")
517
+ .option("--dry-run", "Preview changes without applying")
518
+ .option("--keep", "Keep original files after import")
519
+ .option("--to <loadout>", "Target loadout to add artifacts to (default: auto-detect from active)")
520
+ .action(async (options) => {
521
+ const cwd = process.cwd();
522
+ // Find .loadouts/ directory, preferring project-level
523
+ const loadoutRoot = await findNearestLoadoutRoot(cwd);
524
+ // Check if we have a project-level loadout or only global
525
+ const hasProjectLoadout = loadoutRoot && loadoutRoot.level === "project";
526
+ let projectRoot;
527
+ let loadoutPath;
528
+ if (!hasProjectLoadout) {
529
+ // No project-level .loadouts/ — offer to initialize
530
+ console.log();
531
+ log.warn("No project .loadouts/ found.");
532
+ // Auto-init with --yes, otherwise prompt
533
+ if (!options.yes) {
534
+ const rl = readline.createInterface({
535
+ input: process.stdin,
536
+ output: process.stdout,
537
+ });
538
+ const answer = await new Promise((resolve) => {
539
+ rl.question("Initialize one now? [Y/n] ", (ans) => {
540
+ resolve(ans.trim().toLowerCase());
541
+ rl.close();
542
+ });
543
+ });
544
+ if (answer === "n" || answer === "no") {
545
+ log.dim("Run 'loadouts init' to set up a project loadout.");
546
+ process.exit(0);
547
+ }
548
+ }
549
+ else {
550
+ log.info("Auto-initializing project loadout...");
551
+ }
552
+ // Initialize a minimal project loadout
553
+ console.log();
554
+ if (options.dryRun) {
555
+ log.info("Would initialize .loadouts/ (dry-run)");
556
+ // For dry-run, we still need to scan from the project root
557
+ // but we don't create the loadout directory
558
+ projectRoot = cwd;
559
+ loadoutPath = path.join(cwd, ".loadouts");
560
+ }
561
+ else {
562
+ loadoutPath = await initProjectLoadout(cwd);
563
+ projectRoot = cwd;
564
+ }
565
+ }
566
+ else {
567
+ loadoutPath = loadoutRoot.path;
568
+ projectRoot = path.dirname(loadoutRoot.path);
569
+ }
570
+ console.log();
571
+ log.info("Scanning for existing configurations...");
572
+ try {
573
+ const result = await runInstall(projectRoot, loadoutPath, options);
574
+ if (result.failed > 0) {
575
+ process.exit(1);
576
+ }
577
+ }
578
+ catch (err) {
579
+ if (err instanceof Error && err.message.includes("cancelled")) {
580
+ process.exit(0);
581
+ }
582
+ log.error(err instanceof Error ? err.message : String(err));
583
+ process.exit(1);
584
+ }
585
+ });
586
+ //# sourceMappingURL=install.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.js","sourceRoot":"","sources":["../../../src/cli/commands/install.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * loadouts instructions - Manage per-loadout instruction files
3
+ *
4
+ * Instructions are stored as instructions/<loadout>.md and rendered to AGENTS.md
5
+ */
6
+ import { Command } from "commander";
7
+ export declare const instructionsCommand: Command;
8
+ //# sourceMappingURL=instructions.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"instructions.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/instructions.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0BpC,eAAO,MAAM,mBAAmB,SAE/B,CAAC"}