@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,221 @@
1
+ import { Args, Flags } from '@oclif/core';
2
+ import { BaseCommand } from '../base-command.js';
3
+ import { SearchRegistry, parseExperimentalFlags, } from '../lib/search/index.js';
4
+ import { renderSearchUI } from '../ui/search/index.js';
5
+ import { addSkill, addMcp, removeSkill, removeMcp, findConfigPath } from '../lib/add-helper.js';
6
+ function getOutputMode(flags) {
7
+ if (flags.json) {
8
+ return 'json';
9
+ }
10
+ if (flags.plain) {
11
+ return 'plain';
12
+ }
13
+ if (!process.stdout.isTTY) {
14
+ return 'plain';
15
+ }
16
+ return 'interactive';
17
+ }
18
+ export default class Search extends BaseCommand {
19
+ static description = 'Search for aix skills and MCP servers';
20
+ static examples = [
21
+ '<%= config.bin %> <%= command.id %> typescript',
22
+ '<%= config.bin %> <%= command.id %> playwright --type mcp',
23
+ '<%= config.bin %> <%= command.id %> react --type skills',
24
+ '<%= config.bin %> <%= command.id %> github --type skills --type mcp',
25
+ '<%= config.bin %> <%= command.id %> testing -x source:claude-plugins-dev',
26
+ ];
27
+ static args = {
28
+ query: Args.string({
29
+ description: 'Search query (optional in interactive mode)',
30
+ required: false,
31
+ }),
32
+ };
33
+ static flags = {
34
+ registry: Flags.string({
35
+ char: 'r',
36
+ description: 'NPM registry URL to search',
37
+ env: 'NPM_CONFIG_REGISTRY',
38
+ default: 'https://registry.npmjs.org',
39
+ }),
40
+ type: Flags.string({
41
+ char: 't',
42
+ description: 'Type of resources to search (can be specified multiple times)',
43
+ options: ['skills', 'mcp'],
44
+ multiple: true,
45
+ }),
46
+ experimental: Flags.string({
47
+ char: 'x',
48
+ description: 'Enable experimental features (e.g., source:claude-plugins-dev)',
49
+ multiple: true,
50
+ default: [],
51
+ }),
52
+ plain: Flags.boolean({
53
+ char: 'p',
54
+ description: 'Force plain text output (non-interactive)',
55
+ default: false,
56
+ }),
57
+ };
58
+ async run() {
59
+ const { args } = await this.parse(Search);
60
+ const types = this.flags.type?.length
61
+ ? this.flags.type
62
+ : ['skills', 'mcp'];
63
+ const outputMode = getOutputMode({ json: this.flags.json, plain: this.flags.plain });
64
+ // Parse experimental flags and create registry with enabled sources
65
+ const experimentalSources = parseExperimentalFlags(this.flags.experimental);
66
+ const registry = new SearchRegistry({
67
+ npmRegistry: this.flags.registry,
68
+ experimentalSources,
69
+ });
70
+ // Log which experimental sources are enabled
71
+ if (experimentalSources.size > 0 && outputMode !== 'json') {
72
+ const sourceNames = Array.from(experimentalSources).join(', ');
73
+ this.output.info(`Experimental sources enabled: ${sourceNames}`);
74
+ }
75
+ // Interactive mode
76
+ if (outputMode === 'interactive') {
77
+ try {
78
+ await this.runInteractive(registry, types, args.query);
79
+ return;
80
+ }
81
+ catch (error) {
82
+ // Fall back to plain mode if interactive fails (e.g., stdin issues)
83
+ const message = error instanceof Error ? error.message : String(error);
84
+ const isKnownError = message.includes('EISDIR') || message.includes('Raw mode');
85
+ if (isKnownError) {
86
+ this.output.warn(`Interactive mode unavailable, falling back to plain output. (${message})`);
87
+ }
88
+ else {
89
+ // Log the full error for debugging unknown issues
90
+ this.output.warn(`Interactive mode failed: ${message}`);
91
+ if (error instanceof Error && error.stack) {
92
+ this.output.log(error.stack);
93
+ }
94
+ throw error;
95
+ }
96
+ }
97
+ }
98
+ // Plain/JSON mode - requires query
99
+ if (!args.query) {
100
+ this.error('Search query is required in plain/JSON mode. Use interactive mode or provide a query.');
101
+ }
102
+ await this.runPlain(registry, types, args.query);
103
+ }
104
+ async runInteractive(registry, types, initialQuery) {
105
+ let configPath = null;
106
+ try {
107
+ configPath = await findConfigPath();
108
+ if (!configPath) {
109
+ this.output.warn('No ai.json found. Run "aix init" first to create one.');
110
+ this.output.info('Falling back to preview mode (no installation).');
111
+ }
112
+ }
113
+ catch (error) {
114
+ // Show validation/parse errors (not "not found" - that's handled above)
115
+ const message = error instanceof Error ? error.message : String(error);
116
+ this.output.warn(`Failed to load ai.json: ${message}`);
117
+ this.output.info('Falling back to preview mode (no installation).');
118
+ }
119
+ // Filter types to only those with available sources
120
+ const availableTypes = types.filter((t) => registry.hasSourcesForType(t));
121
+ if (availableTypes.length === 0) {
122
+ this.output.warn('No search sources available for the requested types.');
123
+ return;
124
+ }
125
+ const handleInstall = async (item) => {
126
+ const itemName = item.result.name;
127
+ if (!configPath) {
128
+ const cmd = item.type === 'skills' ? 'skill' : 'mcp';
129
+ this.output.info(`Would run: aix add ${cmd} ${itemName}`);
130
+ return false;
131
+ }
132
+ const result = item.type === 'skills'
133
+ ? await addSkill({ configPath, name: itemName, source: itemName })
134
+ : await addMcp({ configPath, name: itemName });
135
+ return result.success;
136
+ };
137
+ const handleUninstall = async (item) => {
138
+ const itemName = item.result.name;
139
+ if (!configPath) {
140
+ const cmd = item.type === 'skills' ? 'skill' : 'mcp';
141
+ this.output.info(`Would run: aix remove ${cmd} ${itemName}`);
142
+ return false;
143
+ }
144
+ const result = item.type === 'skills'
145
+ ? await removeSkill({ configPath, name: itemName })
146
+ : await removeMcp({ configPath, name: itemName });
147
+ return result.success;
148
+ };
149
+ const { installedItems } = await renderSearchUI({
150
+ initialQuery,
151
+ types: availableTypes,
152
+ registry: {
153
+ searchSkills: (opts) => registry.searchSkills(opts),
154
+ searchMcp: (opts) => registry.searchMcp(opts),
155
+ },
156
+ onInstall: handleInstall,
157
+ onUninstall: handleUninstall,
158
+ });
159
+ // Print summary of installed items
160
+ if (installedItems.length > 0) {
161
+ this.output.log('');
162
+ this.output.success(`Installed ${installedItems.length} item(s):`);
163
+ for (const item of installedItems) {
164
+ const typeLabel = item.type === 'skills' ? 'skill' : 'mcp';
165
+ this.output.log(` • ${item.result.name} (${typeLabel})`);
166
+ }
167
+ }
168
+ }
169
+ async runPlain(registry, types, query) {
170
+ const searchSkills = types.includes('skills'), searchMcp = types.includes('mcp');
171
+ const searches = [];
172
+ if (searchSkills) {
173
+ searches.push(registry.searchSkills({ query }).then((results) => ({ type: 'skills', results })));
174
+ }
175
+ if (searchMcp) {
176
+ searches.push(registry.searchMcp({ query }).then((results) => ({ type: 'mcp', results })));
177
+ }
178
+ this.output.startSpinner('Searching...');
179
+ const searchResults = await Promise.all(searches);
180
+ this.output.stopSpinner(true);
181
+ const resultsByType = Object.fromEntries(searchResults.map((r) => [r.type, r.results]));
182
+ const totalResults = searchResults.reduce((sum, r) => sum + r.results.length, 0);
183
+ if (totalResults === 0) {
184
+ this.output.info('No results found matching your query.');
185
+ return;
186
+ }
187
+ if (this.flags.json) {
188
+ this.output.json(resultsByType);
189
+ return;
190
+ }
191
+ if (resultsByType.skills?.length) {
192
+ this.output.header('Skills');
193
+ for (const skill of resultsByType.skills) {
194
+ const version = skill.version ? this.output.dim(` (v${skill.version})`) : '', sourceTag = skill.source !== 'npm' ? this.output.dim(` [${skill.source}]`) : '';
195
+ this.output.log(` ${this.output.cyan(skill.name)}${version}${sourceTag}`);
196
+ if (skill.description) {
197
+ this.output.log(` ${skill.description}`);
198
+ }
199
+ this.output.log('');
200
+ }
201
+ }
202
+ if (resultsByType.mcp?.length) {
203
+ this.output.header('MCP Servers');
204
+ for (const server of resultsByType.mcp) {
205
+ const version = server.version ? this.output.dim(` (v${server.version})`) : '';
206
+ this.output.log(` ${this.output.cyan(server.name)}${version}`);
207
+ if (server.description) {
208
+ this.output.log(` ${server.description}`);
209
+ }
210
+ this.output.log('');
211
+ }
212
+ }
213
+ if (searchSkills) {
214
+ this.output.info('Install skills with: aix add skill <name>');
215
+ }
216
+ if (searchMcp) {
217
+ this.output.info('Install MCP servers with: aix add mcp <name>');
218
+ }
219
+ }
220
+ }
221
+ //# sourceMappingURL=search.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search.js","sourceRoot":"","sources":["../../src/commands/search.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,7 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ export default class Validate extends BaseCommand<typeof Validate> {
3
+ static description: string;
4
+ static examples: string[];
5
+ run(): Promise<void>;
6
+ }
7
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AAIjD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAAW,CAAC,OAAO,QAAQ,CAAC;IAC/D,OAAgB,WAAW,SAAoC;IAE/D,OAAgB,QAAQ,WAItB;IAEI,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC;CAsD5B"}
@@ -0,0 +1,57 @@
1
+ import { BaseCommand } from '../base-command.js';
2
+ import { loadConfig as coreLoadConfig } from '@a1st/aix-core';
3
+ import { ConfigValidationError } from '@a1st/aix-core';
4
+ export default class Validate extends BaseCommand {
5
+ static description = 'Validate ai.json configuration';
6
+ static examples = [
7
+ '<%= config.bin %> <%= command.id %>',
8
+ '<%= config.bin %> <%= command.id %> --config ./path/to/ai.json',
9
+ '<%= config.bin %> <%= command.id %> --json',
10
+ ];
11
+ async run() {
12
+ const configPath = this.flags.config;
13
+ this.output.startSpinner('Validating configuration...');
14
+ try {
15
+ const result = await coreLoadConfig(configPath);
16
+ if (!result) {
17
+ this.output.stopSpinner(false, 'No ai.json found');
18
+ if (this.flags.json) {
19
+ this.output.json({ valid: false, error: 'No ai.json found' });
20
+ }
21
+ this.error('No ai.json found. Run `aix init` to create one.');
22
+ }
23
+ this.output.stopSpinner(true, 'Configuration is valid');
24
+ if (this.flags.json) {
25
+ this.output.json({
26
+ valid: true,
27
+ path: result.path,
28
+ source: result.source,
29
+ config: result.config,
30
+ });
31
+ }
32
+ }
33
+ catch (error) {
34
+ this.output.stopSpinner(false, 'Configuration has errors');
35
+ if (error instanceof ConfigValidationError) {
36
+ for (const err of error.errors) {
37
+ this.output.error(`${err.path}: ${err.message}`);
38
+ }
39
+ if (this.flags.json) {
40
+ this.output.json({
41
+ valid: false,
42
+ errors: error.errors,
43
+ });
44
+ }
45
+ this.exit(1);
46
+ }
47
+ if (error instanceof Error) {
48
+ if (this.flags.json) {
49
+ this.output.json({ valid: false, error: error.message });
50
+ }
51
+ this.error(error.message);
52
+ }
53
+ throw error;
54
+ }
55
+ }
56
+ }
57
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/commands/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,oBAAoB,CAAC;AACjD,OAAO,EAAE,UAAU,IAAI,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAC9D,OAAO,EAAE,qBAAqB,EAAE,MAAM,gBAAgB,CAAC;AAEvD,MAAM,CAAC,OAAO,OAAO,QAAS,SAAQ,WAA4B;IAC/D,MAAM,CAAU,WAAW,GAAG,gCAAgC,CAAC;IAE/D,MAAM,CAAU,QAAQ,GAAG;QACxB,qCAAqC;QACrC,gEAAgE;QAChE,4CAA4C;KAC9C,CAAC;IAEF,KAAK,CAAC,GAAG;QACN,MAAM,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC;QAErC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,6BAA6B,CAAC,CAAC;QAExD,IAAI,CAAC;YACF,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,UAAU,CAAC,CAAC;YAEhD,IAAI,CAAC,MAAM,EAAE,CAAC;gBACX,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,kBAAkB,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,EAAE,CAAC,CAAC;gBACjE,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,iDAAiD,CAAC,CAAC;YACjE,CAAC;YAED,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,IAAI,EAAE,wBAAwB,CAAC,CAAC;YAExD,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;gBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;oBACd,KAAK,EAAE,IAAI;oBACX,IAAI,EAAE,MAAM,CAAC,IAAI;oBACjB,MAAM,EAAE,MAAM,CAAC,MAAM;oBACrB,MAAM,EAAE,MAAM,CAAC,MAAM;iBACvB,CAAC,CAAC;YACN,CAAC;QACJ,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACd,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC,KAAK,EAAE,0BAA0B,CAAC,CAAC;YAE3D,IAAI,KAAK,YAAY,qBAAqB,EAAE,CAAC;gBAC1C,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,MAAM,EAAE,CAAC;oBAC9B,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,IAAI,KAAK,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;gBACpD,CAAC;gBAED,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC;wBACd,KAAK,EAAE,KAAK;wBACZ,MAAM,EAAE,KAAK,CAAC,MAAM;qBACtB,CAAC,CAAC;gBACN,CAAC;gBAED,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YAChB,CAAC;YAED,IAAI,KAAK,YAAY,KAAK,EAAE,CAAC;gBAC1B,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;oBACnB,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5D,CAAC;gBACD,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC7B,CAAC;YAED,MAAM,KAAK,CAAC;QACf,CAAC;IACJ,CAAC"}
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Reusable --local flag for writing to ai.local.json instead of ai.json.
3
+ * Used by mutation commands (add, remove) to write to the local override file.
4
+ */
5
+ export declare const localFlag: {
6
+ local: import("@oclif/core/interfaces").BooleanFlag<boolean>;
7
+ };
8
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../src/flags/local.ts"],"names":[],"mappings":"AAEA;;;GAGG;AACH,eAAO,MAAM,SAAS;;CAMrB,CAAC"}
@@ -0,0 +1,13 @@
1
+ import { Flags } from '@oclif/core';
2
+ /**
3
+ * Reusable --local flag for writing to ai.local.json instead of ai.json.
4
+ * Used by mutation commands (add, remove) to write to the local override file.
5
+ */
6
+ export const localFlag = {
7
+ local: Flags.boolean({
8
+ char: 'l',
9
+ description: 'Write to ai.local.json instead of ai.json',
10
+ default: false,
11
+ }),
12
+ };
13
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../src/flags/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC,OAAO,CAAC;QAClB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,2CAA2C;QACxD,OAAO,EAAE,KAAK;KAChB,CAAC;CACJ,CAAC"}
@@ -0,0 +1,20 @@
1
+ export declare const VALID_SCOPES: readonly ["rules", "mcp", "skills", "editors"];
2
+ export type Scope = (typeof VALID_SCOPES)[number];
3
+ /**
4
+ * Reusable --scope flag for filtering commands by field. Can be specified multiple times:
5
+ * --scope rules --scope mcp
6
+ */
7
+ export declare const scopeFlag: {
8
+ scope: import("@oclif/core/interfaces").OptionFlag<string[] | undefined, import("@oclif/core/interfaces").CustomOptions>;
9
+ };
10
+ /**
11
+ * Parse and validate scope flags, returning all scopes if none specified
12
+ */
13
+ export declare function parseScopes(flags: {
14
+ scope?: string[];
15
+ }): Scope[];
16
+ /**
17
+ * Check if a scope is included in the filter
18
+ */
19
+ export declare function includesScope(scopes: Scope[], scope: Scope): boolean;
20
+ //# sourceMappingURL=scope.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.d.ts","sourceRoot":"","sources":["../../src/flags/scope.ts"],"names":[],"mappings":"AAEA,eAAO,MAAM,YAAY,gDAAiD,CAAC;AAC3E,MAAM,MAAM,KAAK,GAAG,CAAC,OAAO,YAAY,CAAC,CAAC,MAAM,CAAC,CAAC;AAElD;;;GAGG;AACH,eAAO,MAAM,SAAS;;CAOrB,CAAC;AAEF;;GAEG;AACH,wBAAgB,WAAW,CAAC,KAAK,EAAE;IAAE,KAAK,CAAC,EAAE,MAAM,EAAE,CAAA;CAAE,GAAG,KAAK,EAAE,CAKhE;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,MAAM,EAAE,KAAK,EAAE,EAAE,KAAK,EAAE,KAAK,GAAG,OAAO,CAEpE"}
@@ -0,0 +1,30 @@
1
+ import { Flags } from '@oclif/core';
2
+ export const VALID_SCOPES = ['rules', 'mcp', 'skills', 'editors'];
3
+ /**
4
+ * Reusable --scope flag for filtering commands by field. Can be specified multiple times:
5
+ * --scope rules --scope mcp
6
+ */
7
+ export const scopeFlag = {
8
+ scope: Flags.string({
9
+ char: 's',
10
+ description: 'Filter to specific fields (repeatable)',
11
+ multiple: true,
12
+ options: [...VALID_SCOPES],
13
+ }),
14
+ };
15
+ /**
16
+ * Parse and validate scope flags, returning all scopes if none specified
17
+ */
18
+ export function parseScopes(flags) {
19
+ if (!flags.scope || flags.scope.length === 0) {
20
+ return [...VALID_SCOPES];
21
+ }
22
+ return flags.scope;
23
+ }
24
+ /**
25
+ * Check if a scope is included in the filter
26
+ */
27
+ export function includesScope(scopes, scope) {
28
+ return scopes.includes(scope);
29
+ }
30
+ //# sourceMappingURL=scope.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"scope.js","sourceRoot":"","sources":["../../src/flags/scope.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,aAAa,CAAC;AAEpC,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,SAAS,CAAU,CAAC;AAG3E;;;GAGG;AACH,MAAM,CAAC,MAAM,SAAS,GAAG;IACtB,KAAK,EAAE,KAAK,CAAC,MAAM,CAAC;QACjB,IAAI,EAAE,GAAG;QACT,WAAW,EAAE,wCAAwC;QACrD,QAAQ,EAAE,IAAI;QACd,OAAO,EAAE,CAAC,GAAG,YAAY,CAAC;KAC5B,CAAC;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,KAA2B;IACpD,IAAI,CAAC,KAAK,CAAC,KAAK,IAAI,KAAK,CAAC,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5C,OAAO,CAAC,GAAG,YAAY,CAAC,CAAC;IAC5B,CAAC;IACD,OAAO,KAAK,CAAC,KAAgB,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,MAAe,EAAE,KAAY;IACxD,OAAO,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AACjC,CAAC"}
@@ -0,0 +1,18 @@
1
+ import { Hook } from '@oclif/core';
2
+ /**
3
+ * Post-run hook that patches autocomplete scripts to enable file path completion.
4
+ *
5
+ * The @oclif/plugin-autocomplete generates shell completion scripts that handle
6
+ * command and flag completion, but don't properly defer to shell file completion
7
+ * for arguments. This hook patches the generated scripts after the `autocomplete`
8
+ * command runs.
9
+ *
10
+ * Fixes:
11
+ * - Bash: Adds `-o default` to `complete` command to fall back to file completion
12
+ * - Zsh: Already has `_files` fallback (no patch needed)
13
+ *
14
+ * Note: Fish is not currently supported by @oclif/plugin-autocomplete.
15
+ */
16
+ declare const hook: Hook.Postrun;
17
+ export default hook;
18
+ //# sourceMappingURL=patch-autocomplete.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-autocomplete.d.ts","sourceRoot":"","sources":["../../../src/hooks/postrun/patch-autocomplete.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,aAAa,CAAC;AAKnC;;;;;;;;;;;;;GAaG;AACH,QAAA,MAAM,IAAI,EAAE,IAAI,CAAC,OAYhB,CAAC;AA8BF,eAAe,IAAI,CAAC"}
@@ -0,0 +1,49 @@
1
+ import { readFile, writeFile } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ /**
5
+ * Post-run hook that patches autocomplete scripts to enable file path completion.
6
+ *
7
+ * The @oclif/plugin-autocomplete generates shell completion scripts that handle
8
+ * command and flag completion, but don't properly defer to shell file completion
9
+ * for arguments. This hook patches the generated scripts after the `autocomplete`
10
+ * command runs.
11
+ *
12
+ * Fixes:
13
+ * - Bash: Adds `-o default` to `complete` command to fall back to file completion
14
+ * - Zsh: Already has `_files` fallback (no patch needed)
15
+ *
16
+ * Note: Fish is not currently supported by @oclif/plugin-autocomplete.
17
+ */
18
+ const hook = async function (options) {
19
+ // Only run after autocomplete commands
20
+ if (!options.Command?.id?.startsWith('autocomplete')) {
21
+ return;
22
+ }
23
+ const cacheDir = options.config.cacheDir, autocompleteDir = join(cacheDir, 'autocomplete'), cliBin = options.config.bin;
24
+ // Patch bash completion
25
+ await patchBashCompletion(autocompleteDir, cliBin);
26
+ };
27
+ /**
28
+ * Patches bash completion script to use `-o default` flag.
29
+ * This tells bash to fall back to default (file) completion when the function
30
+ * returns no results.
31
+ */
32
+ async function patchBashCompletion(autocompleteDir, cliBin) {
33
+ const bashScriptPath = join(autocompleteDir, 'functions', 'bash', `${cliBin}.bash`);
34
+ if (!existsSync(bashScriptPath)) {
35
+ return;
36
+ }
37
+ let content = await readFile(bashScriptPath, 'utf8');
38
+ // Check if already patched
39
+ if (content.includes('-o default')) {
40
+ return;
41
+ }
42
+ // Replace `complete -F _<bin>_autocomplete <bin>` with `complete -o default -F ...`
43
+ // This pattern handles both the main binary and any aliases
44
+ const completePattern = /complete -F (_\w+_autocomplete) (\S+)/g;
45
+ content = content.replace(completePattern, 'complete -o default -F $1 $2');
46
+ await writeFile(bashScriptPath, content, 'utf8');
47
+ }
48
+ export default hook;
49
+ //# sourceMappingURL=patch-autocomplete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"patch-autocomplete.js","sourceRoot":"","sources":["../../../src/hooks/postrun/patch-autocomplete.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,MAAM,kBAAkB,CAAC;AACvD,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;;;;;;;;;;;GAaG;AACH,MAAM,IAAI,GAAiB,KAAK,WAAW,OAAO;IAC/C,uCAAuC;IACvC,IAAI,CAAC,OAAO,CAAC,OAAO,EAAE,EAAE,EAAE,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QACpD,OAAO;IACV,CAAC;IAED,MAAM,QAAQ,GAAG,OAAO,CAAC,MAAM,CAAC,QAAQ,EAClC,eAAe,GAAG,IAAI,CAAC,QAAQ,EAAE,cAAc,CAAC,EAChD,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC;IAElC,wBAAwB;IACxB,MAAM,mBAAmB,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC;AACtD,CAAC,CAAC;AAEF;;;;GAIG;AACH,KAAK,UAAU,mBAAmB,CAAC,eAAuB,EAAE,MAAc;IACvE,MAAM,cAAc,GAAG,IAAI,CAAC,eAAe,EAAE,WAAW,EAAE,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,CAAC;IAEpF,IAAI,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;QAC/B,OAAO;IACV,CAAC;IAED,IAAI,OAAO,GAAG,MAAM,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC,CAAC;IAErD,2BAA2B;IAC3B,IAAI,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE,CAAC;QAClC,OAAO;IACV,CAAC;IAED,oFAAoF;IACpF,4DAA4D;IAC5D,MAAM,eAAe,GAAG,wCAAwC,CAAC;IAEjE,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,eAAe,EAAE,8BAA8B,CAAC,CAAC;IAE3E,MAAM,SAAS,CAAC,cAAc,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC;AACpD,CAAC;AAED,eAAe,IAAI,CAAC"}
@@ -0,0 +1,4 @@
1
+ export { BaseCommand } from './base-command.js';
2
+ export { Output } from './lib/output.js';
3
+ export * from './lib/errors.js';
4
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,iBAAiB,CAAC"}
package/dist/index.js ADDED
@@ -0,0 +1,4 @@
1
+ export { BaseCommand } from './base-command.js';
2
+ export { Output } from './lib/output.js';
3
+ export * from './lib/errors.js';
4
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,mBAAmB,CAAC;AAChD,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,cAAc,iBAAiB,CAAC"}
@@ -0,0 +1,49 @@
1
+ export interface AddSkillOptions {
2
+ configPath: string;
3
+ name: string;
4
+ source: string;
5
+ skipInstall?: boolean;
6
+ }
7
+ export interface AddMcpOptions {
8
+ configPath: string;
9
+ name: string;
10
+ skipInstall?: boolean;
11
+ }
12
+ export interface AddResult {
13
+ success: boolean;
14
+ name: string;
15
+ error?: string;
16
+ }
17
+ /**
18
+ * Add a skill to ai.json programmatically.
19
+ * For npm packages, the source should be the package name (e.g., "aix-skill-typescript" or just "typescript").
20
+ */
21
+ export declare function addSkill(options: AddSkillOptions): Promise<AddResult>;
22
+ /**
23
+ * Add an MCP server to ai.json programmatically by searching the MCP Registry.
24
+ */
25
+ export declare function addMcp(options: AddMcpOptions): Promise<AddResult>;
26
+ /**
27
+ * Find the config path by searching up from cwd.
28
+ */
29
+ export declare function findConfigPath(): Promise<string | null>;
30
+ export interface RemoveResult {
31
+ success: boolean;
32
+ name: string;
33
+ error?: string;
34
+ }
35
+ /**
36
+ * Remove a skill from ai.json programmatically.
37
+ */
38
+ export declare function removeSkill(options: {
39
+ configPath: string;
40
+ name: string;
41
+ }): Promise<RemoveResult>;
42
+ /**
43
+ * Remove an MCP server from ai.json programmatically.
44
+ */
45
+ export declare function removeMcp(options: {
46
+ configPath: string;
47
+ name: string;
48
+ }): Promise<RemoveResult>;
49
+ //# sourceMappingURL=add-helper.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add-helper.d.ts","sourceRoot":"","sources":["../../src/lib/add-helper.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,eAAe;IAC7B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,MAAM,EAAE,MAAM,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,aAAa;IAC3B,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,CAAC,EAAE,OAAO,CAAC;CACxB;AAED,MAAM,WAAW,SAAS;IACvB,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CACjB;AAaD;;;GAGG;AACH,wBAAsB,QAAQ,CAAC,OAAO,EAAE,eAAe,GAAG,OAAO,CAAC,SAAS,CAAC,CAgC3E;AAsCD;;GAEG;AACH,wBAAsB,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,SAAS,CAAC,CAuDvE;AAED;;GAEG;AACH,wBAAsB,cAAc,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAI7D;AAED,MAAM,WAAW,YAAY;IAC1B,OAAO,EAAE,OAAO,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;CACjB;AAED;;GAEG;AACH,wBAAsB,WAAW,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBtG;AAED;;GAEG;AACH,wBAAsB,SAAS,CAAC,OAAO,EAAE;IAAE,UAAU,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAkBpG"}