@a1st/aix 0.0.3

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 (245) hide show
  1. package/bin/dev.js +13 -0
  2. package/bin/run.js +5 -0
  3. package/dist/base-command.d.ts +48 -0
  4. package/dist/base-command.d.ts.map +1 -0
  5. package/dist/base-command.js +131 -0
  6. package/dist/base-command.js.map +1 -0
  7. package/dist/commands/add/index.d.ts +7 -0
  8. package/dist/commands/add/index.d.ts.map +1 -0
  9. package/dist/commands/add/index.js +10 -0
  10. package/dist/commands/add/index.js.map +1 -0
  11. package/dist/commands/add/mcp.d.ts +32 -0
  12. package/dist/commands/add/mcp.d.ts.map +1 -0
  13. package/dist/commands/add/mcp.js +209 -0
  14. package/dist/commands/add/mcp.js.map +1 -0
  15. package/dist/commands/add/prompt.d.ts +18 -0
  16. package/dist/commands/add/prompt.d.ts.map +1 -0
  17. package/dist/commands/add/prompt.js +196 -0
  18. package/dist/commands/add/prompt.js.map +1 -0
  19. package/dist/commands/add/rule.d.ts +20 -0
  20. package/dist/commands/add/rule.d.ts.map +1 -0
  21. package/dist/commands/add/rule.js +207 -0
  22. package/dist/commands/add/rule.js.map +1 -0
  23. package/dist/commands/add/skill.d.ts +16 -0
  24. package/dist/commands/add/skill.d.ts.map +1 -0
  25. package/dist/commands/add/skill.js +212 -0
  26. package/dist/commands/add/skill.js.map +1 -0
  27. package/dist/commands/backups.d.ts +9 -0
  28. package/dist/commands/backups.d.ts.map +1 -0
  29. package/dist/commands/backups.js +147 -0
  30. package/dist/commands/backups.js.map +1 -0
  31. package/dist/commands/cache/clear.d.ts +8 -0
  32. package/dist/commands/cache/clear.d.ts.map +1 -0
  33. package/dist/commands/cache/clear.js +34 -0
  34. package/dist/commands/cache/clear.js.map +1 -0
  35. package/dist/commands/cache/index.d.ts +7 -0
  36. package/dist/commands/cache/index.d.ts.map +1 -0
  37. package/dist/commands/cache/index.js +10 -0
  38. package/dist/commands/cache/index.js.map +1 -0
  39. package/dist/commands/config/get.d.ts +11 -0
  40. package/dist/commands/config/get.d.ts.map +1 -0
  41. package/dist/commands/config/get.js +49 -0
  42. package/dist/commands/config/get.js.map +1 -0
  43. package/dist/commands/config/index.d.ts +7 -0
  44. package/dist/commands/config/index.d.ts.map +1 -0
  45. package/dist/commands/config/index.js +10 -0
  46. package/dist/commands/config/index.js.map +1 -0
  47. package/dist/commands/config/set.d.ts +12 -0
  48. package/dist/commands/config/set.d.ts.map +1 -0
  49. package/dist/commands/config/set.js +58 -0
  50. package/dist/commands/config/set.js.map +1 -0
  51. package/dist/commands/config/show.d.ts +10 -0
  52. package/dist/commands/config/show.d.ts.map +1 -0
  53. package/dist/commands/config/show.js +49 -0
  54. package/dist/commands/config/show.js.map +1 -0
  55. package/dist/commands/global/cleanup.d.ts +14 -0
  56. package/dist/commands/global/cleanup.d.ts.map +1 -0
  57. package/dist/commands/global/cleanup.js +92 -0
  58. package/dist/commands/global/cleanup.js.map +1 -0
  59. package/dist/commands/global/index.d.ts +7 -0
  60. package/dist/commands/global/index.d.ts.map +1 -0
  61. package/dist/commands/global/index.js +10 -0
  62. package/dist/commands/global/index.js.map +1 -0
  63. package/dist/commands/global/list.d.ts +7 -0
  64. package/dist/commands/global/list.d.ts.map +1 -0
  65. package/dist/commands/global/list.js +40 -0
  66. package/dist/commands/global/list.js.map +1 -0
  67. package/dist/commands/init.d.ts +12 -0
  68. package/dist/commands/init.d.ts.map +1 -0
  69. package/dist/commands/init.js +110 -0
  70. package/dist/commands/init.js.map +1 -0
  71. package/dist/commands/install.d.ts +55 -0
  72. package/dist/commands/install.d.ts.map +1 -0
  73. package/dist/commands/install.js +412 -0
  74. package/dist/commands/install.js.map +1 -0
  75. package/dist/commands/list/editors.d.ts +7 -0
  76. package/dist/commands/list/editors.d.ts.map +1 -0
  77. package/dist/commands/list/editors.js +36 -0
  78. package/dist/commands/list/editors.js.map +1 -0
  79. package/dist/commands/list/index.d.ts +12 -0
  80. package/dist/commands/list/index.d.ts.map +1 -0
  81. package/dist/commands/list/index.js +60 -0
  82. package/dist/commands/list/index.js.map +1 -0
  83. package/dist/commands/list/mcp.d.ts +8 -0
  84. package/dist/commands/list/mcp.d.ts.map +1 -0
  85. package/dist/commands/list/mcp.js +45 -0
  86. package/dist/commands/list/mcp.js.map +1 -0
  87. package/dist/commands/list/rules.d.ts +7 -0
  88. package/dist/commands/list/rules.d.ts.map +1 -0
  89. package/dist/commands/list/rules.js +59 -0
  90. package/dist/commands/list/rules.js.map +1 -0
  91. package/dist/commands/list/skills.d.ts +7 -0
  92. package/dist/commands/list/skills.d.ts.map +1 -0
  93. package/dist/commands/list/skills.js +34 -0
  94. package/dist/commands/list/skills.js.map +1 -0
  95. package/dist/commands/remove/index.d.ts +7 -0
  96. package/dist/commands/remove/index.d.ts.map +1 -0
  97. package/dist/commands/remove/index.js +10 -0
  98. package/dist/commands/remove/index.js.map +1 -0
  99. package/dist/commands/remove/mcp.d.ts +15 -0
  100. package/dist/commands/remove/mcp.d.ts.map +1 -0
  101. package/dist/commands/remove/mcp.js +125 -0
  102. package/dist/commands/remove/mcp.js.map +1 -0
  103. package/dist/commands/remove/skill.d.ts +15 -0
  104. package/dist/commands/remove/skill.d.ts.map +1 -0
  105. package/dist/commands/remove/skill.js +115 -0
  106. package/dist/commands/remove/skill.js.map +1 -0
  107. package/dist/commands/search.d.ts +18 -0
  108. package/dist/commands/search.d.ts.map +1 -0
  109. package/dist/commands/search.js +221 -0
  110. package/dist/commands/search.js.map +1 -0
  111. package/dist/commands/validate.d.ts +7 -0
  112. package/dist/commands/validate.d.ts.map +1 -0
  113. package/dist/commands/validate.js +57 -0
  114. package/dist/commands/validate.js.map +1 -0
  115. package/dist/flags/local.d.ts +8 -0
  116. package/dist/flags/local.d.ts.map +1 -0
  117. package/dist/flags/local.js +13 -0
  118. package/dist/flags/local.js.map +1 -0
  119. package/dist/flags/scope.d.ts +20 -0
  120. package/dist/flags/scope.d.ts.map +1 -0
  121. package/dist/flags/scope.js +30 -0
  122. package/dist/flags/scope.js.map +1 -0
  123. package/dist/hooks/postrun/patch-autocomplete.d.ts +18 -0
  124. package/dist/hooks/postrun/patch-autocomplete.d.ts.map +1 -0
  125. package/dist/hooks/postrun/patch-autocomplete.js +49 -0
  126. package/dist/hooks/postrun/patch-autocomplete.js.map +1 -0
  127. package/dist/index.d.ts +4 -0
  128. package/dist/index.d.ts.map +1 -0
  129. package/dist/index.js +4 -0
  130. package/dist/index.js.map +1 -0
  131. package/dist/lib/add-helper.d.ts +49 -0
  132. package/dist/lib/add-helper.d.ts.map +1 -0
  133. package/dist/lib/add-helper.js +172 -0
  134. package/dist/lib/add-helper.js.map +1 -0
  135. package/dist/lib/delete-helper.d.ts +25 -0
  136. package/dist/lib/delete-helper.d.ts.map +1 -0
  137. package/dist/lib/delete-helper.js +76 -0
  138. package/dist/lib/delete-helper.js.map +1 -0
  139. package/dist/lib/errors.d.ts +30 -0
  140. package/dist/lib/errors.d.ts.map +1 -0
  141. package/dist/lib/errors.js +41 -0
  142. package/dist/lib/errors.js.map +1 -0
  143. package/dist/lib/help.d.ts +7 -0
  144. package/dist/lib/help.d.ts.map +1 -0
  145. package/dist/lib/help.js +39 -0
  146. package/dist/lib/help.js.map +1 -0
  147. package/dist/lib/install-helper.d.ts +23 -0
  148. package/dist/lib/install-helper.d.ts.map +1 -0
  149. package/dist/lib/install-helper.js +49 -0
  150. package/dist/lib/install-helper.js.map +1 -0
  151. package/dist/lib/output.d.ts +26 -0
  152. package/dist/lib/output.d.ts.map +1 -0
  153. package/dist/lib/output.js +77 -0
  154. package/dist/lib/output.js.map +1 -0
  155. package/dist/lib/search/debounce.d.ts +17 -0
  156. package/dist/lib/search/debounce.d.ts.map +1 -0
  157. package/dist/lib/search/debounce.js +33 -0
  158. package/dist/lib/search/debounce.js.map +1 -0
  159. package/dist/lib/search/index.d.ts +5 -0
  160. package/dist/lib/search/index.d.ts.map +1 -0
  161. package/dist/lib/search/index.js +5 -0
  162. package/dist/lib/search/index.js.map +1 -0
  163. package/dist/lib/search/registry.d.ts +43 -0
  164. package/dist/lib/search/registry.d.ts.map +1 -0
  165. package/dist/lib/search/registry.js +83 -0
  166. package/dist/lib/search/registry.js.map +1 -0
  167. package/dist/lib/search/sources/claude-plugins-dev.d.ts +16 -0
  168. package/dist/lib/search/sources/claude-plugins-dev.d.ts.map +1 -0
  169. package/dist/lib/search/sources/claude-plugins-dev.js +44 -0
  170. package/dist/lib/search/sources/claude-plugins-dev.js.map +1 -0
  171. package/dist/lib/search/sources/index.d.ts +4 -0
  172. package/dist/lib/search/sources/index.d.ts.map +1 -0
  173. package/dist/lib/search/sources/index.js +4 -0
  174. package/dist/lib/search/sources/index.js.map +1 -0
  175. package/dist/lib/search/sources/mcp-registry.d.ts +14 -0
  176. package/dist/lib/search/sources/mcp-registry.d.ts.map +1 -0
  177. package/dist/lib/search/sources/mcp-registry.js +40 -0
  178. package/dist/lib/search/sources/mcp-registry.js.map +1 -0
  179. package/dist/lib/search/sources/npm.d.ts +14 -0
  180. package/dist/lib/search/sources/npm.d.ts.map +1 -0
  181. package/dist/lib/search/sources/npm.js +42 -0
  182. package/dist/lib/search/sources/npm.js.map +1 -0
  183. package/dist/lib/search/types.d.ts +52 -0
  184. package/dist/lib/search/types.d.ts.map +1 -0
  185. package/dist/lib/search/types.js +14 -0
  186. package/dist/lib/search/types.js.map +1 -0
  187. package/dist/ui/search/components/DetailsPanel.d.ts +9 -0
  188. package/dist/ui/search/components/DetailsPanel.d.ts.map +1 -0
  189. package/dist/ui/search/components/DetailsPanel.js +11 -0
  190. package/dist/ui/search/components/DetailsPanel.js.map +1 -0
  191. package/dist/ui/search/components/ResultsList.d.ts +14 -0
  192. package/dist/ui/search/components/ResultsList.d.ts.map +1 -0
  193. package/dist/ui/search/components/ResultsList.js +32 -0
  194. package/dist/ui/search/components/ResultsList.js.map +1 -0
  195. package/dist/ui/search/components/SearchApp.d.ts +4 -0
  196. package/dist/ui/search/components/SearchApp.d.ts.map +1 -0
  197. package/dist/ui/search/components/SearchApp.js +61 -0
  198. package/dist/ui/search/components/SearchApp.js.map +1 -0
  199. package/dist/ui/search/components/SearchInput.d.ts +12 -0
  200. package/dist/ui/search/components/SearchInput.d.ts.map +1 -0
  201. package/dist/ui/search/components/SearchInput.js +14 -0
  202. package/dist/ui/search/components/SearchInput.js.map +1 -0
  203. package/dist/ui/search/components/StatusBar.d.ts +10 -0
  204. package/dist/ui/search/components/StatusBar.d.ts.map +1 -0
  205. package/dist/ui/search/components/StatusBar.js +13 -0
  206. package/dist/ui/search/components/StatusBar.js.map +1 -0
  207. package/dist/ui/search/components/TabBar.d.ts +10 -0
  208. package/dist/ui/search/components/TabBar.d.ts.map +1 -0
  209. package/dist/ui/search/components/TabBar.js +6 -0
  210. package/dist/ui/search/components/TabBar.js.map +1 -0
  211. package/dist/ui/search/hooks/use-install.d.ts +18 -0
  212. package/dist/ui/search/hooks/use-install.d.ts.map +1 -0
  213. package/dist/ui/search/hooks/use-install.js +51 -0
  214. package/dist/ui/search/hooks/use-install.js.map +1 -0
  215. package/dist/ui/search/hooks/use-keyboard.d.ts +25 -0
  216. package/dist/ui/search/hooks/use-keyboard.d.ts.map +1 -0
  217. package/dist/ui/search/hooks/use-keyboard.js +58 -0
  218. package/dist/ui/search/hooks/use-keyboard.js.map +1 -0
  219. package/dist/ui/search/hooks/use-search.d.ts +21 -0
  220. package/dist/ui/search/hooks/use-search.d.ts.map +1 -0
  221. package/dist/ui/search/hooks/use-search.js +73 -0
  222. package/dist/ui/search/hooks/use-search.js.map +1 -0
  223. package/dist/ui/search/index.d.ts +10 -0
  224. package/dist/ui/search/index.d.ts.map +1 -0
  225. package/dist/ui/search/index.js +10 -0
  226. package/dist/ui/search/index.js.map +1 -0
  227. package/dist/ui/search/render.d.ts +11 -0
  228. package/dist/ui/search/render.d.ts.map +1 -0
  229. package/dist/ui/search/render.js +22 -0
  230. package/dist/ui/search/render.js.map +1 -0
  231. package/dist/ui/search/types.d.ts +37 -0
  232. package/dist/ui/search/types.d.ts.map +1 -0
  233. package/dist/ui/search/types.js +2 -0
  234. package/dist/ui/search/types.js.map +1 -0
  235. package/dist/ui/search/utils/index.d.ts +2 -0
  236. package/dist/ui/search/utils/index.d.ts.map +1 -0
  237. package/dist/ui/search/utils/index.js +2 -0
  238. package/dist/ui/search/utils/index.js.map +1 -0
  239. package/dist/ui/search/utils/sanitize.d.ts +11 -0
  240. package/dist/ui/search/utils/sanitize.d.ts.map +1 -0
  241. package/dist/ui/search/utils/sanitize.js +33 -0
  242. package/dist/ui/search/utils/sanitize.js.map +1 -0
  243. package/oclif.manifest.json +1772 -0
  244. package/package.json +103 -0
  245. package/theme.json +15 -0
@@ -0,0 +1,58 @@
1
+ import { Args } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ import { updateConfig } from '@a1st/aix-core';
4
+ export default class ConfigSet extends BaseCommand {
5
+ static description = 'Set a configuration value';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %> skills.typescript "^1.0.0"',
8
+ '<%= config.bin %> <%= command.id %> rules \'["Use TypeScript"]\'',
9
+ ];
10
+ static args = {
11
+ key: Args.string({
12
+ description: 'Configuration key (dot notation, e.g., "skills.typescript")',
13
+ required: true,
14
+ }),
15
+ value: Args.string({
16
+ description: 'Value to set (JSON for objects/arrays)',
17
+ required: true,
18
+ }),
19
+ };
20
+ async run() {
21
+ const { args } = await this.parse(ConfigSet);
22
+ const loaded = await this.requireConfig();
23
+ // Parse value as JSON if it looks like JSON, otherwise use as string
24
+ let parsedValue;
25
+ try {
26
+ parsedValue = JSON.parse(args.value);
27
+ }
28
+ catch {
29
+ parsedValue = args.value;
30
+ }
31
+ await updateConfig(loaded.path, (config) => {
32
+ return this.setNestedValue(config, args.key, parsedValue);
33
+ });
34
+ this.output.success(`Set ${args.key}`);
35
+ if (this.flags.json) {
36
+ this.output.json({ key: args.key, value: parsedValue });
37
+ }
38
+ }
39
+ setNestedValue(obj, path, value) {
40
+ const parts = path.split('.');
41
+ const result = { ...obj };
42
+ let current = result;
43
+ for (let i = 0; i < parts.length - 1; i++) {
44
+ const part = parts[i];
45
+ if (current[part] === undefined || current[part] === null) {
46
+ current[part] = {};
47
+ }
48
+ else if (typeof current[part] === 'object') {
49
+ current[part] = { ...current[part] };
50
+ }
51
+ current = current[part];
52
+ }
53
+ const lastPart = parts[parts.length - 1];
54
+ current[lastPart] = value;
55
+ return result;
56
+ }
57
+ }
58
+ //# sourceMappingURL=set.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"set.js","sourceRoot":"","sources":["../../../src/commands/config/set.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AACnC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AACpD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,MAAM,CAAC,OAAO,OAAO,SAAU,SAAQ,WAA6B;IACjE,MAAM,CAAU,WAAW,GAAG,2BAA2B,CAAC;IAE1D,MAAM,CAAU,QAAQ,GAAG;QACxB,gEAAgE;QAChE,kEAAkE;KACpE,CAAC;IAEF,MAAM,CAAU,IAAI,GAAG;QACpB,GAAG,EAAE,IAAI,CAAC,MAAM,CAAC;YACd,WAAW,EAAE,6DAA6D;YAC1E,QAAQ,EAAE,IAAI;SAChB,CAAC;QACF,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC;YAChB,WAAW,EAAE,wCAAwC;YACrD,QAAQ,EAAE,IAAI;SAChB,CAAC;KACJ,CAAC;IAEF,KAAK,CAAC,GAAG;QACN,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;QAC7C,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1C,qEAAqE;QACrE,IAAI,WAAoB,CAAC;QAEzB,IAAI,CAAC;YACF,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QACxC,CAAC;QAAC,MAAM,CAAC;YACN,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC;QAC5B,CAAC;QAED,MAAM,YAAY,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,MAAM,EAAE,EAAE;YACxC,OAAO,IAAI,CAAC,cAAc,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;QAC7D,CAAC,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,IAAI,CAAC,GAAG,EAAE,CAAC,CAAC;QAEvC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,WAAW,EAAE,CAAC,CAAC;QAC3D,CAAC;IACJ,CAAC;IAEO,cAAc,CAAoC,GAAM,EAAE,IAAY,EAAE,KAAc;QAC3F,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;QAC9B,MAAM,MAAM,GAAG,EAAE,GAAG,GAAG,EAA6B,CAAC;QACrD,IAAI,OAAO,GAAG,MAAM,CAAC;QAErB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;YACzC,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAE,CAAC;YAEvB,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,SAAS,IAAI,OAAO,CAAC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACzD,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,CAAC;YACtB,CAAC;iBAAM,IAAI,OAAO,OAAO,CAAC,IAAI,CAAC,KAAK,QAAQ,EAAE,CAAC;gBAC5C,OAAO,CAAC,IAAI,CAAC,GAAG,EAAE,GAAI,OAAO,CAAC,IAAI,CAA6B,EAAE,CAAC;YACrE,CAAC;YACD,OAAO,GAAG,OAAO,CAAC,IAAI,CAA4B,CAAC;QACtD,CAAC;QAED,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAE,CAAC;QAE1C,OAAO,CAAC,QAAQ,CAAC,GAAG,KAAK,CAAC;QAE1B,OAAO,MAAW,CAAC;IACtB,CAAC"}
@@ -0,0 +1,10 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class ConfigShow extends BaseCommand<typeof ConfigShow> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ resolved: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ run(): Promise<void>;
9
+ }
10
+ //# sourceMappingURL=show.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.d.ts","sourceRoot":"","sources":["../../../src/commands/config/show.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACnE,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAGtB;IAEF,OAAgB,KAAK;;MAMnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA+B5B"}
@@ -0,0 +1,49 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class ConfigShow extends BaseCommand {
4
+ static description = 'Show the current configuration';
5
+ static examples = [
6
+ '<%= config.bin %> <%= command.id %>',
7
+ '<%= config.bin %> <%= command.id %> --resolved',
8
+ ];
9
+ static flags = {
10
+ resolved: Flags.boolean({
11
+ char: 'r',
12
+ description: 'Show the final merged configuration (after extends and local overrides)',
13
+ default: false,
14
+ }),
15
+ };
16
+ async run() {
17
+ const { flags } = await this.parse(ConfigShow), loaded = await this.requireConfig();
18
+ if (flags.resolved || this.flags.json) {
19
+ // Show the fully resolved/merged config
20
+ if (this.flags.json) {
21
+ this.output.json({
22
+ path: loaded.path,
23
+ ...(loaded.localPath && { localPath: loaded.localPath }),
24
+ ...(loaded.hasLocalOverrides && { hasLocalOverrides: loaded.hasLocalOverrides }),
25
+ config: loaded.config,
26
+ });
27
+ }
28
+ else {
29
+ if (loaded.hasLocalOverrides && loaded.localPath) {
30
+ this.output.info(`Resolved from: ${loaded.path} + ${loaded.localPath}`);
31
+ }
32
+ else {
33
+ this.output.info(`Resolved from: ${loaded.path}`);
34
+ }
35
+ this.output.log(JSON.stringify(loaded.config, null, 2));
36
+ }
37
+ }
38
+ else {
39
+ // Show summary of config sources
40
+ this.output.log(`Configuration: ${loaded.path}`);
41
+ if (loaded.hasLocalOverrides && loaded.localPath) {
42
+ this.output.log(`Local overrides: ${loaded.localPath}`);
43
+ }
44
+ this.output.log('');
45
+ this.output.log('Use --resolved to see the full merged configuration.');
46
+ }
47
+ }
48
+ }
49
+ //# sourceMappingURL=show.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"show.js","sourceRoot":"","sources":["../../../src/commands/config/show.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AACpC,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAEpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAA8B;IACnE,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAC;IAE/D,MAAM,CAAU,QAAQ,GAAG;QACxB,qCAAqC;QACrC,gDAAgD;KAClD,CAAC;IAEF,MAAM,CAAU,KAAK,GAAG;QACrB,QAAQ,EAAE,KAAK,CAAC,OAAO,CAAC;YACrB,IAAI,EAAE,GAAG;YACT,WAAW,EAAE,yEAAyE;YACtF,OAAO,EAAE,KAAK;SAChB,CAAC;KACJ,CAAC;IAEF,KAAK,CAAC,GAAG;QACN,MAAM,EAAE,KAAK,EAAE,GAAG,MAAM,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,EACxC,MAAM,GAAG,MAAM,IAAI,CAAC,aAAa,EAAE,CAAC;QAE1C,IAAI,KAAK,CAAC,QAAQ,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACrC,wCAAwC;YACxC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACd,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,GAAG,CAAC,MAAM,CAAC,SAAS,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,SAAS,EAAE,CAAC;oBACxD,GAAG,CAAC,MAAM,CAAC,iBAAiB,IAAI,EAAE,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,EAAE,CAAC;oBAChF,MAAM,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC,CAAC;YACN,CAAC;iBAAM,CAAC;gBACL,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;oBAChD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,MAAM,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;gBAC3E,CAAC;qBAAM,CAAC;oBACL,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;gBACrD,CAAC;gBACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;YAC3D,CAAC;QACJ,CAAC;aAAM,CAAC;YACL,iCAAiC;YACjC,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,IAAI,EAAE,CAAC,CAAC;YACjD,IAAI,MAAM,CAAC,iBAAiB,IAAI,MAAM,CAAC,SAAS,EAAE,CAAC;gBAChD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,oBAAoB,MAAM,CAAC,SAAS,EAAE,CAAC,CAAC;YAC3D,CAAC;YACD,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;YACpB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,sDAAsD,CAAC,CAAC;QAC3E,CAAC;IACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class GlobalCleanup extends BaseCommand<typeof GlobalCleanup> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
8
+ config: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ quiet: import("@oclif/core/interfaces").BooleanFlag<boolean>;
10
+ json: import("@oclif/core/interfaces").BooleanFlag<boolean>;
11
+ };
12
+ run(): Promise<void>;
13
+ }
14
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../../src/commands/global/cleanup.ts"],"names":[],"mappings":"AAGA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,CAAC,OAAO,OAAO,aAAc,SAAQ,WAAW,CAAC,OAAO,aAAa,CAAC;IACzE,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,QAAQ,WAItB;IAEF,OAAgB,KAAK;;;;;;MAWnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CA8E5B"}
@@ -0,0 +1,92 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { Flags } from '@oclif/core';
3
+ import { GlobalTrackingService } from '@a1st/aix-core';
4
+ import { BaseCommand } from '../../base-command.js';
5
+ export default class GlobalCleanup extends BaseCommand {
6
+ static description = 'Find and clean up orphaned global configurations';
7
+ static examples = [
8
+ '<%= config.bin %> <%= command.id %>',
9
+ '<%= config.bin %> <%= command.id %> --dry-run',
10
+ '<%= config.bin %> <%= command.id %> --force',
11
+ ];
12
+ static flags = {
13
+ ...BaseCommand.baseFlags,
14
+ 'dry-run': Flags.boolean({
15
+ description: 'Show what would be cleaned up without making changes',
16
+ default: false,
17
+ }),
18
+ force: Flags.boolean({
19
+ char: 'f',
20
+ description: 'Remove orphaned entries without confirmation',
21
+ default: false,
22
+ }),
23
+ };
24
+ async run() {
25
+ const tracking = new GlobalTrackingService(), data = await tracking.load(), entries = Object.entries(data.entries), orphaned = [];
26
+ // Find orphaned entries (no projects depend on them, or projects don't exist)
27
+ for (const [key, entry] of entries) {
28
+ // Check if any projects still exist
29
+ const existingProjects = entry.projects.filter((p) => existsSync(p));
30
+ if (existingProjects.length === 0) {
31
+ orphaned.push({
32
+ key,
33
+ editor: entry.editor,
34
+ type: entry.type,
35
+ name: entry.name,
36
+ reason: entry.projects.length === 0
37
+ ? 'No projects depend on this'
38
+ : 'All dependent projects have been removed',
39
+ });
40
+ }
41
+ else if (existingProjects.length < entry.projects.length) {
42
+ // Some projects were removed - update tracking
43
+ if (!this.flags['dry-run']) {
44
+ // eslint-disable-next-line no-await-in-loop -- Sequential updates
45
+ await tracking.save({
46
+ ...data,
47
+ entries: {
48
+ ...data.entries,
49
+ [key]: { ...entry, projects: existingProjects },
50
+ },
51
+ });
52
+ }
53
+ this.output.info(`Updated ${key}: removed ${entry.projects.length - existingProjects.length} missing project(s)`);
54
+ }
55
+ }
56
+ if (this.flags.json) {
57
+ this.output.json({ orphaned });
58
+ return;
59
+ }
60
+ if (orphaned.length === 0) {
61
+ this.output.info('No orphaned global configurations found');
62
+ return;
63
+ }
64
+ this.output.header('Orphaned Global Configurations');
65
+ this.output.table(orphaned, {
66
+ columns: [
67
+ { key: 'editor', name: 'Editor' },
68
+ { key: 'type', name: 'Type' },
69
+ { key: 'name', name: 'Name' },
70
+ { key: 'reason', name: 'Reason' },
71
+ ],
72
+ });
73
+ if (this.flags['dry-run']) {
74
+ this.output.info(`\nDry run: ${orphaned.length} orphaned entry/entries would be removed from tracking`);
75
+ this.output.info('Note: This only removes tracking entries, not the actual global config files');
76
+ return;
77
+ }
78
+ if (!this.flags.force) {
79
+ this.output.warn('\nUse --force to remove these entries from tracking');
80
+ this.output.info('Note: This only removes tracking entries, not the actual global config files');
81
+ return;
82
+ }
83
+ // Remove orphaned entries
84
+ for (const entry of orphaned) {
85
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic operations
86
+ await tracking.removeEntry(entry.key);
87
+ this.output.info(`Removed tracking for ${entry.key}`);
88
+ }
89
+ this.output.info(`\nCleaned up ${orphaned.length} orphaned tracking entry/entries`);
90
+ }
91
+ }
92
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../../src/commands/global/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { Command } from '@oclif/core';
2
+ export default class GlobalIndex extends Command {
3
+ static description: string;
4
+ static hidden: boolean;
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/global/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAQ,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC7C,OAAgB,WAAW,SAAsD;IAEjF,OAAgB,MAAM,UAAQ;IAExB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAK5B"}
@@ -0,0 +1,10 @@
1
+ import { Command, Help } from '@oclif/core';
2
+ export default class GlobalIndex extends Command {
3
+ static description = 'Find and clean up orphaned global configurations';
4
+ static hidden = true;
5
+ async run() {
6
+ const help = new Help(this.config);
7
+ await help.showHelp(['global']);
8
+ }
9
+ }
10
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/global/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAE5C,MAAM,CAAC,OAAO,OAAO,WAAY,SAAQ,OAAO;IAC7C,MAAM,CAAU,WAAW,GAAG,kDAAkD,CAAC;IAEjF,MAAM,CAAU,MAAM,GAAG,IAAI,CAAC;IAE9B,KAAK,CAAC,GAAG;QACN,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAEnC,MAAM,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC;IACnC,CAAC"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../../base-command.js';
2
+ export default class GlobalList extends BaseCommand<typeof GlobalList> {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/commands/global/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAAW,CAAC,OAAO,UAAU,CAAC;IACnE,OAAgB,WAAW,SAA0C;IAErE,OAAgB,QAAQ,WAGtB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAqC5B"}
@@ -0,0 +1,40 @@
1
+ import { GlobalTrackingService } from '@a1st/aix-core';
2
+ import { BaseCommand } from '../../base-command.js';
3
+ export default class GlobalList extends BaseCommand {
4
+ static description = 'List globally tracked configurations';
5
+ static examples = [
6
+ '<%= config.bin %> <%= command.id %>',
7
+ '<%= config.bin %> <%= command.id %> --json',
8
+ ];
9
+ async run() {
10
+ const tracking = new GlobalTrackingService(), data = await tracking.load();
11
+ if (this.flags.json) {
12
+ this.output.json(data);
13
+ return;
14
+ }
15
+ const entries = Object.entries(data.entries);
16
+ if (entries.length === 0) {
17
+ this.output.info('No global configurations tracked');
18
+ this.output.info('Global configs are tracked when installing to editors with global-only features (Windsurf MCP, Codex MCP/Prompts)');
19
+ return;
20
+ }
21
+ const rows = entries.map(([key, entry]) => ({
22
+ key,
23
+ editor: entry.editor,
24
+ type: entry.type,
25
+ name: entry.name,
26
+ projects: entry.projects.length,
27
+ }));
28
+ this.output.header('Global Configurations');
29
+ this.output.table(rows, {
30
+ columns: [
31
+ { key: 'editor', name: 'Editor' },
32
+ { key: 'type', name: 'Type' },
33
+ { key: 'name', name: 'Name' },
34
+ { key: 'projects', name: 'Projects' },
35
+ ],
36
+ });
37
+ this.output.info('\nTracking file: ~/.aix/global-tracking.json');
38
+ }
39
+ }
40
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/commands/global/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AACvD,OAAO,EAAE,WAAW,EAAE,MAAM,uBAAuB,CAAC;AAUpD,MAAM,CAAC,OAAO,OAAO,UAAW,SAAQ,WAA8B;IACnE,MAAM,CAAU,WAAW,GAAG,sCAAsC,CAAC;IAErE,MAAM,CAAU,QAAQ,GAAG;QACxB,qCAAqC;QACrC,4CAA4C;KAC9C,CAAC;IAEF,KAAK,CAAC,GAAG;QACN,MAAM,QAAQ,GAAG,IAAI,qBAAqB,EAAE,EACtC,IAAI,GAAG,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAC;QAEnC,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;YACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACvB,OAAO;QACV,CAAC;QAED,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;YACxB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,kCAAkC,CAAC,CAAC;YACrD,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,mHAAmH,CAAC,CAAC;YACtI,OAAO;QACV,CAAC;QAED,MAAM,IAAI,GAAgB,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,EAAE,KAAK,CAAC,EAAE,EAAE,CAAC,CAAC;YACtD,GAAG;YACH,MAAM,EAAE,KAAK,CAAC,MAAM;YACpB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,IAAI,EAAE,KAAK,CAAC,IAAI;YAChB,QAAQ,EAAE,KAAK,CAAC,QAAQ,CAAC,MAAM;SACjC,CAAC,CAAC,CAAC;QAEJ,IAAI,CAAC,MAAM,CAAC,MAAM,CAAC,uBAAuB,CAAC,CAAC;QAC5C,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE;YACrB,OAAO,EAAE;gBACN,EAAE,GAAG,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE;gBACjC,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC7B,EAAE,GAAG,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;gBAC7B,EAAE,GAAG,EAAE,UAAU,EAAE,IAAI,EAAE,UAAU,EAAE;aACvC;SACH,CAAC,CAAC;QAEH,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C,CAAC,CAAC;IACpE,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Init extends BaseCommand<typeof Init> {
3
+ static description: string;
4
+ static examples: string[];
5
+ static flags: {
6
+ force: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ from: import("@oclif/core/interfaces").OptionFlag<string | undefined, import("@oclif/core/interfaces").CustomOptions>;
8
+ };
9
+ run(): Promise<void>;
10
+ private importFromEditorConfig;
11
+ }
12
+ //# sourceMappingURL=init.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"AAIA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAWjD,MAAM,CAAC,OAAO,OAAO,IAAK,SAAQ,WAAW,CAAC,OAAO,IAAI,CAAC;IACvD,OAAgB,WAAW,SAAiD;IAE5E,OAAgB,QAAQ,WAKtB;IAEF,OAAgB,KAAK;;;MAUnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;YA+BZ,sBAAsB;CAuEtC"}
@@ -0,0 +1,110 @@
1
+ import { Flags } from '@oclif/core';
2
+ import { writeFile } from 'node:fs/promises';
3
+ import { existsSync } from 'node:fs';
4
+ import { join } from 'node:path';
5
+ import { BaseCommand } from '../base-command.js';
6
+ import { createEmptyConfig } from '@a1st/aix-schema';
7
+ import { importFromEditor, getAvailableEditors, writeImportedContent, commitImport, rollbackImport, } from '@a1st/aix-core';
8
+ export default class Init extends BaseCommand {
9
+ static description = 'Initialize a new ai.json configuration file';
10
+ static examples = [
11
+ '<%= config.bin %> <%= command.id %>',
12
+ '<%= config.bin %> <%= command.id %> --force',
13
+ '<%= config.bin %> <%= command.id %> --from windsurf',
14
+ '<%= config.bin %> <%= command.id %> --from cursor --force',
15
+ ];
16
+ static flags = {
17
+ force: Flags.boolean({
18
+ char: 'f',
19
+ description: 'Overwrite existing ai.json',
20
+ default: false,
21
+ }),
22
+ from: Flags.string({
23
+ description: `Import global config from an editor (${getAvailableEditors().join(', ')})`,
24
+ options: getAvailableEditors(),
25
+ }),
26
+ };
27
+ async run() {
28
+ const configPath = join(process.cwd(), 'ai.json');
29
+ if (existsSync(configPath) && !this.flags.force) {
30
+ this.error('ai.json already exists. Use --force to overwrite.');
31
+ }
32
+ let config;
33
+ const editor = this.flags.from;
34
+ if (editor) {
35
+ try {
36
+ config = await this.importFromEditorConfig(editor);
37
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n');
38
+ await commitImport(process.cwd(), editor);
39
+ }
40
+ catch (error) {
41
+ await rollbackImport(process.cwd(), editor);
42
+ throw error;
43
+ }
44
+ }
45
+ else {
46
+ config = createEmptyConfig();
47
+ await writeFile(configPath, JSON.stringify(config, null, 2) + '\n');
48
+ }
49
+ this.output.success(`Created ${configPath}`);
50
+ if (this.flags.json) {
51
+ this.output.json({ path: configPath, config });
52
+ }
53
+ }
54
+ async importFromEditorConfig(editor) {
55
+ const projectRoot = process.cwd(), result = await importFromEditor(editor, { projectRoot });
56
+ // Show what sources were found
57
+ if (result.sources.global && result.sources.local) {
58
+ this.output.info(`Importing from ${editor} (global + local project config)`);
59
+ }
60
+ else if (result.sources.global) {
61
+ this.output.info(`Importing from ${editor} (global config)`);
62
+ }
63
+ else if (result.sources.local) {
64
+ this.output.info(`Importing from ${editor} (local project config)`);
65
+ }
66
+ // Show warnings
67
+ for (const warning of result.warnings) {
68
+ this.output.warn(warning);
69
+ }
70
+ const mcpCount = Object.keys(result.mcp).length, rulesCount = result.rules.length, skillsCount = Object.keys(result.skills).length, promptsCount = Object.keys(result.prompts).length;
71
+ if (mcpCount > 0) {
72
+ this.output.success(`Imported ${mcpCount} MCP server${mcpCount === 1 ? '' : 's'}`);
73
+ }
74
+ if (rulesCount > 0) {
75
+ this.output.success(`Imported ${rulesCount} rule${rulesCount === 1 ? '' : 's'}`);
76
+ }
77
+ if (skillsCount > 0) {
78
+ this.output.success(`Imported ${skillsCount} skill${skillsCount === 1 ? '' : 's'}`);
79
+ }
80
+ if (promptsCount > 0) {
81
+ this.output.success(`Imported ${promptsCount} prompt${promptsCount === 1 ? '' : 's'}`);
82
+ }
83
+ if (mcpCount === 0 && rulesCount === 0 && skillsCount === 0 && promptsCount === 0) {
84
+ this.output.warn('No configuration found to import');
85
+ }
86
+ // Write imported content to .aix/imported/<editor>/ and get path references
87
+ const written = await writeImportedContent(process.cwd(), editor, {
88
+ rules: result.rules,
89
+ prompts: result.prompts,
90
+ });
91
+ // Build rules object with path references
92
+ const rules = {};
93
+ for (const [name, relativePath] of Object.entries(written.rules)) {
94
+ rules[name] = { path: relativePath };
95
+ }
96
+ // Build prompts object with path references
97
+ const prompts = {};
98
+ for (const [name, relativePath] of Object.entries(written.prompts)) {
99
+ prompts[name] = { path: relativePath };
100
+ }
101
+ return {
102
+ ...createEmptyConfig(),
103
+ mcp: result.mcp,
104
+ rules,
105
+ skills: result.skills,
106
+ prompts,
107
+ };
108
+ }
109
+ }
110
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/commands/init.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,55 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Install extends BaseCommand<typeof Install> {
3
+ static aliases: string[];
4
+ static description: string;
5
+ static examples: string[];
6
+ static args: {
7
+ source: import("@oclif/core/interfaces").Arg<string | undefined, Record<string, unknown>>;
8
+ };
9
+ static flags: {
10
+ target: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
11
+ 'dry-run': import("@oclif/core/interfaces").BooleanFlag<boolean>;
12
+ save: import("@oclif/core/interfaces").BooleanFlag<boolean>;
13
+ overwrite: import("@oclif/core/interfaces").BooleanFlag<boolean>;
14
+ clean: import("@oclif/core/interfaces").BooleanFlag<boolean>;
15
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
16
+ };
17
+ run(): Promise<void>;
18
+ /**
19
+ * Resolve which editors to install to based on flags, config, and detection.
20
+ */
21
+ private resolveEditors;
22
+ /**
23
+ * Install to a single editor and handle output.
24
+ */
25
+ private installToSingleEditor;
26
+ /**
27
+ * Handle the result of installing to an editor.
28
+ */
29
+ private handleInstallResult;
30
+ /**
31
+ * Save remote config to local ai.json (creates, merges, or overwrites).
32
+ */
33
+ private saveRemoteConfig;
34
+ /**
35
+ * Display warnings for features that the editor doesn't support.
36
+ */
37
+ private showUnsupportedFeatureWarnings;
38
+ /**
39
+ * Display changes grouped by category with better visual hierarchy.
40
+ */
41
+ private displayChanges;
42
+ /**
43
+ * Get the display prefix for a change action.
44
+ */
45
+ private getChangePrefix;
46
+ /**
47
+ * Extract skill name from path like .aix/skills/pdf or .windsurf/skills/pdf -> pdf
48
+ */
49
+ private extractSkillName;
50
+ /**
51
+ * Extract filename from path
52
+ */
53
+ private extractFileName;
54
+ }
55
+ //# sourceMappingURL=install.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"install.d.ts","sourceRoot":"","sources":["../../src/commands/install.ts"],"names":[],"mappings":"AAMA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAwBjD,MAAM,CAAC,OAAO,OAAO,OAAQ,SAAQ,WAAW,CAAC,OAAO,OAAO,CAAC;IAC7D,OAAgB,OAAO,WAAS;IAEhC,OAAgB,WAAW,SAAsC;IAEjE,OAAgB,QAAQ,WAYtB;IAEF,OAAgB,IAAI;;MAMlB;IAEF,OAAgB,KAAK;;;;;;;MAyBnB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;IA8G1B;;OAEG;YACW,cAAc;IAsD5B;;OAEG;YACW,qBAAqB;IA6BnC;;OAEG;IACH,OAAO,CAAC,mBAAmB;IAqD3B;;OAEG;YACW,gBAAgB;IAqF9B;;OAEG;IACH,OAAO,CAAC,8BAA8B;IA4BtC;;OAEG;IACH,OAAO,CAAC,cAAc;IAyDtB;;OAEG;IACH,OAAO,CAAC,eAAe;IAavB;;OAEG;IACH,OAAO,CAAC,gBAAgB;IAOxB;;OAEG;IACH,OAAO,CAAC,eAAe;CAMzB"}