@a1st/aix-core 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 (397) hide show
  1. package/dist/backup.d.ts +12 -0
  2. package/dist/backup.d.ts.map +1 -0
  3. package/dist/backup.js +70 -0
  4. package/dist/backup.js.map +1 -0
  5. package/dist/cache/cleanup.d.ts +14 -0
  6. package/dist/cache/cleanup.d.ts.map +1 -0
  7. package/dist/cache/cleanup.js +61 -0
  8. package/dist/cache/cleanup.js.map +1 -0
  9. package/dist/cache/clear.d.ts +10 -0
  10. package/dist/cache/clear.d.ts.map +1 -0
  11. package/dist/cache/clear.js +30 -0
  12. package/dist/cache/clear.js.map +1 -0
  13. package/dist/cache/index.d.ts +5 -0
  14. package/dist/cache/index.d.ts.map +1 -0
  15. package/dist/cache/index.js +5 -0
  16. package/dist/cache/index.js.map +1 -0
  17. package/dist/cache/paths.d.ts +57 -0
  18. package/dist/cache/paths.d.ts.map +1 -0
  19. package/dist/cache/paths.js +86 -0
  20. package/dist/cache/paths.js.map +1 -0
  21. package/dist/cache/status.d.ts +21 -0
  22. package/dist/cache/status.d.ts.map +1 -0
  23. package/dist/cache/status.js +67 -0
  24. package/dist/cache/status.js.map +1 -0
  25. package/dist/discovery.d.ts +14 -0
  26. package/dist/discovery.d.ts.map +1 -0
  27. package/dist/discovery.js +96 -0
  28. package/dist/discovery.js.map +1 -0
  29. package/dist/editors/adapters/base.d.ts +101 -0
  30. package/dist/editors/adapters/base.d.ts.map +1 -0
  31. package/dist/editors/adapters/base.js +399 -0
  32. package/dist/editors/adapters/base.js.map +1 -0
  33. package/dist/editors/adapters/claude-code.d.ts +27 -0
  34. package/dist/editors/adapters/claude-code.d.ts.map +1 -0
  35. package/dist/editors/adapters/claude-code.js +46 -0
  36. package/dist/editors/adapters/claude-code.js.map +1 -0
  37. package/dist/editors/adapters/codex.d.ts +30 -0
  38. package/dist/editors/adapters/codex.d.ts.map +1 -0
  39. package/dist/editors/adapters/codex.js +56 -0
  40. package/dist/editors/adapters/codex.js.map +1 -0
  41. package/dist/editors/adapters/cursor.d.ts +23 -0
  42. package/dist/editors/adapters/cursor.d.ts.map +1 -0
  43. package/dist/editors/adapters/cursor.js +39 -0
  44. package/dist/editors/adapters/cursor.js.map +1 -0
  45. package/dist/editors/adapters/index.d.ts +8 -0
  46. package/dist/editors/adapters/index.d.ts.map +1 -0
  47. package/dist/editors/adapters/index.js +8 -0
  48. package/dist/editors/adapters/index.js.map +1 -0
  49. package/dist/editors/adapters/vscode.d.ts +23 -0
  50. package/dist/editors/adapters/vscode.d.ts.map +1 -0
  51. package/dist/editors/adapters/vscode.js +36 -0
  52. package/dist/editors/adapters/vscode.js.map +1 -0
  53. package/dist/editors/adapters/windsurf.d.ts +23 -0
  54. package/dist/editors/adapters/windsurf.d.ts.map +1 -0
  55. package/dist/editors/adapters/windsurf.js +38 -0
  56. package/dist/editors/adapters/windsurf.js.map +1 -0
  57. package/dist/editors/adapters/zed.d.ts +29 -0
  58. package/dist/editors/adapters/zed.d.ts.map +1 -0
  59. package/dist/editors/adapters/zed.js +61 -0
  60. package/dist/editors/adapters/zed.js.map +1 -0
  61. package/dist/editors/import.d.ts +31 -0
  62. package/dist/editors/import.d.ts.map +1 -0
  63. package/dist/editors/import.js +271 -0
  64. package/dist/editors/import.js.map +1 -0
  65. package/dist/editors/index.d.ts +6 -0
  66. package/dist/editors/index.d.ts.map +1 -0
  67. package/dist/editors/index.js +4 -0
  68. package/dist/editors/index.js.map +1 -0
  69. package/dist/editors/install.d.ts +33 -0
  70. package/dist/editors/install.d.ts.map +1 -0
  71. package/dist/editors/install.js +186 -0
  72. package/dist/editors/install.js.map +1 -0
  73. package/dist/editors/strategies/claude-code/hooks.d.ts +13 -0
  74. package/dist/editors/strategies/claude-code/hooks.d.ts.map +1 -0
  75. package/dist/editors/strategies/claude-code/hooks.js +61 -0
  76. package/dist/editors/strategies/claude-code/hooks.js.map +1 -0
  77. package/dist/editors/strategies/claude-code/index.d.ts +5 -0
  78. package/dist/editors/strategies/claude-code/index.d.ts.map +1 -0
  79. package/dist/editors/strategies/claude-code/index.js +5 -0
  80. package/dist/editors/strategies/claude-code/index.js.map +1 -0
  81. package/dist/editors/strategies/claude-code/mcp.d.ts +10 -0
  82. package/dist/editors/strategies/claude-code/mcp.d.ts.map +1 -0
  83. package/dist/editors/strategies/claude-code/mcp.js +17 -0
  84. package/dist/editors/strategies/claude-code/mcp.js.map +1 -0
  85. package/dist/editors/strategies/claude-code/prompts.d.ts +18 -0
  86. package/dist/editors/strategies/claude-code/prompts.d.ts.map +1 -0
  87. package/dist/editors/strategies/claude-code/prompts.js +42 -0
  88. package/dist/editors/strategies/claude-code/prompts.js.map +1 -0
  89. package/dist/editors/strategies/claude-code/rules.d.ts +17 -0
  90. package/dist/editors/strategies/claude-code/rules.d.ts.map +1 -0
  91. package/dist/editors/strategies/claude-code/rules.js +61 -0
  92. package/dist/editors/strategies/claude-code/rules.js.map +1 -0
  93. package/dist/editors/strategies/codex/index.d.ts +4 -0
  94. package/dist/editors/strategies/codex/index.d.ts.map +1 -0
  95. package/dist/editors/strategies/codex/index.js +4 -0
  96. package/dist/editors/strategies/codex/index.js.map +1 -0
  97. package/dist/editors/strategies/codex/mcp.d.ts +18 -0
  98. package/dist/editors/strategies/codex/mcp.d.ts.map +1 -0
  99. package/dist/editors/strategies/codex/mcp.js +93 -0
  100. package/dist/editors/strategies/codex/mcp.js.map +1 -0
  101. package/dist/editors/strategies/codex/prompts.d.ts +37 -0
  102. package/dist/editors/strategies/codex/prompts.d.ts.map +1 -0
  103. package/dist/editors/strategies/codex/prompts.js +82 -0
  104. package/dist/editors/strategies/codex/prompts.js.map +1 -0
  105. package/dist/editors/strategies/codex/rules.d.ts +17 -0
  106. package/dist/editors/strategies/codex/rules.d.ts.map +1 -0
  107. package/dist/editors/strategies/codex/rules.js +35 -0
  108. package/dist/editors/strategies/codex/rules.js.map +1 -0
  109. package/dist/editors/strategies/cursor/hooks.d.ts +13 -0
  110. package/dist/editors/strategies/cursor/hooks.d.ts.map +1 -0
  111. package/dist/editors/strategies/cursor/hooks.js +54 -0
  112. package/dist/editors/strategies/cursor/hooks.js.map +1 -0
  113. package/dist/editors/strategies/cursor/index.d.ts +4 -0
  114. package/dist/editors/strategies/cursor/index.d.ts.map +1 -0
  115. package/dist/editors/strategies/cursor/index.js +4 -0
  116. package/dist/editors/strategies/cursor/index.js.map +1 -0
  117. package/dist/editors/strategies/cursor/prompts.d.ts +18 -0
  118. package/dist/editors/strategies/cursor/prompts.d.ts.map +1 -0
  119. package/dist/editors/strategies/cursor/prompts.js +67 -0
  120. package/dist/editors/strategies/cursor/prompts.js.map +1 -0
  121. package/dist/editors/strategies/cursor/rules.d.ts +17 -0
  122. package/dist/editors/strategies/cursor/rules.d.ts.map +1 -0
  123. package/dist/editors/strategies/cursor/rules.js +41 -0
  124. package/dist/editors/strategies/cursor/rules.js.map +1 -0
  125. package/dist/editors/strategies/index.d.ts +9 -0
  126. package/dist/editors/strategies/index.d.ts.map +1 -0
  127. package/dist/editors/strategies/index.js +10 -0
  128. package/dist/editors/strategies/index.js.map +1 -0
  129. package/dist/editors/strategies/shared/global-mcp.d.ts +74 -0
  130. package/dist/editors/strategies/shared/global-mcp.d.ts.map +1 -0
  131. package/dist/editors/strategies/shared/global-mcp.js +85 -0
  132. package/dist/editors/strategies/shared/global-mcp.js.map +1 -0
  133. package/dist/editors/strategies/shared/index.d.ts +8 -0
  134. package/dist/editors/strategies/shared/index.d.ts.map +1 -0
  135. package/dist/editors/strategies/shared/index.js +8 -0
  136. package/dist/editors/strategies/shared/index.js.map +1 -0
  137. package/dist/editors/strategies/shared/native-skills.d.ts +19 -0
  138. package/dist/editors/strategies/shared/native-skills.d.ts.map +1 -0
  139. package/dist/editors/strategies/shared/native-skills.js +72 -0
  140. package/dist/editors/strategies/shared/native-skills.js.map +1 -0
  141. package/dist/editors/strategies/shared/no-hooks.d.ts +13 -0
  142. package/dist/editors/strategies/shared/no-hooks.d.ts.map +1 -0
  143. package/dist/editors/strategies/shared/no-hooks.js +19 -0
  144. package/dist/editors/strategies/shared/no-hooks.js.map +1 -0
  145. package/dist/editors/strategies/shared/no-mcp.d.ts +16 -0
  146. package/dist/editors/strategies/shared/no-mcp.d.ts.map +1 -0
  147. package/dist/editors/strategies/shared/no-mcp.js +21 -0
  148. package/dist/editors/strategies/shared/no-mcp.js.map +1 -0
  149. package/dist/editors/strategies/shared/no-prompts.d.ts +17 -0
  150. package/dist/editors/strategies/shared/no-prompts.d.ts.map +1 -0
  151. package/dist/editors/strategies/shared/no-prompts.js +24 -0
  152. package/dist/editors/strategies/shared/no-prompts.js.map +1 -0
  153. package/dist/editors/strategies/shared/pointer-skills.d.ts +17 -0
  154. package/dist/editors/strategies/shared/pointer-skills.d.ts.map +1 -0
  155. package/dist/editors/strategies/shared/pointer-skills.js +72 -0
  156. package/dist/editors/strategies/shared/pointer-skills.js.map +1 -0
  157. package/dist/editors/strategies/shared/standard-mcp.d.ts +16 -0
  158. package/dist/editors/strategies/shared/standard-mcp.d.ts.map +1 -0
  159. package/dist/editors/strategies/shared/standard-mcp.js +68 -0
  160. package/dist/editors/strategies/shared/standard-mcp.js.map +1 -0
  161. package/dist/editors/strategies/types.d.ts +126 -0
  162. package/dist/editors/strategies/types.d.ts.map +1 -0
  163. package/dist/editors/strategies/types.js +2 -0
  164. package/dist/editors/strategies/types.js.map +1 -0
  165. package/dist/editors/strategies/vscode/index.d.ts +4 -0
  166. package/dist/editors/strategies/vscode/index.d.ts.map +1 -0
  167. package/dist/editors/strategies/vscode/index.js +4 -0
  168. package/dist/editors/strategies/vscode/index.js.map +1 -0
  169. package/dist/editors/strategies/vscode/mcp.d.ts +17 -0
  170. package/dist/editors/strategies/vscode/mcp.d.ts.map +1 -0
  171. package/dist/editors/strategies/vscode/mcp.js +85 -0
  172. package/dist/editors/strategies/vscode/mcp.js.map +1 -0
  173. package/dist/editors/strategies/vscode/prompts.d.ts +18 -0
  174. package/dist/editors/strategies/vscode/prompts.d.ts.map +1 -0
  175. package/dist/editors/strategies/vscode/prompts.js +81 -0
  176. package/dist/editors/strategies/vscode/prompts.js.map +1 -0
  177. package/dist/editors/strategies/vscode/rules.d.ts +17 -0
  178. package/dist/editors/strategies/vscode/rules.d.ts.map +1 -0
  179. package/dist/editors/strategies/vscode/rules.js +38 -0
  180. package/dist/editors/strategies/vscode/rules.js.map +1 -0
  181. package/dist/editors/strategies/windsurf/hooks.d.ts +13 -0
  182. package/dist/editors/strategies/windsurf/hooks.d.ts.map +1 -0
  183. package/dist/editors/strategies/windsurf/hooks.js +61 -0
  184. package/dist/editors/strategies/windsurf/hooks.js.map +1 -0
  185. package/dist/editors/strategies/windsurf/index.d.ts +6 -0
  186. package/dist/editors/strategies/windsurf/index.d.ts.map +1 -0
  187. package/dist/editors/strategies/windsurf/index.js +6 -0
  188. package/dist/editors/strategies/windsurf/index.js.map +1 -0
  189. package/dist/editors/strategies/windsurf/mcp.d.ts +8 -0
  190. package/dist/editors/strategies/windsurf/mcp.d.ts.map +1 -0
  191. package/dist/editors/strategies/windsurf/mcp.js +99 -0
  192. package/dist/editors/strategies/windsurf/mcp.js.map +1 -0
  193. package/dist/editors/strategies/windsurf/prompts.d.ts +18 -0
  194. package/dist/editors/strategies/windsurf/prompts.d.ts.map +1 -0
  195. package/dist/editors/strategies/windsurf/prompts.js +68 -0
  196. package/dist/editors/strategies/windsurf/prompts.js.map +1 -0
  197. package/dist/editors/strategies/windsurf/rules.d.ts +17 -0
  198. package/dist/editors/strategies/windsurf/rules.d.ts.map +1 -0
  199. package/dist/editors/strategies/windsurf/rules.js +55 -0
  200. package/dist/editors/strategies/windsurf/rules.js.map +1 -0
  201. package/dist/editors/strategies/windsurf/skills.d.ts +9 -0
  202. package/dist/editors/strategies/windsurf/skills.d.ts.map +1 -0
  203. package/dist/editors/strategies/windsurf/skills.js +11 -0
  204. package/dist/editors/strategies/windsurf/skills.js.map +1 -0
  205. package/dist/editors/strategies/zed/index.d.ts +4 -0
  206. package/dist/editors/strategies/zed/index.d.ts.map +1 -0
  207. package/dist/editors/strategies/zed/index.js +4 -0
  208. package/dist/editors/strategies/zed/index.js.map +1 -0
  209. package/dist/editors/strategies/zed/mcp.d.ts +17 -0
  210. package/dist/editors/strategies/zed/mcp.d.ts.map +1 -0
  211. package/dist/editors/strategies/zed/mcp.js +68 -0
  212. package/dist/editors/strategies/zed/mcp.js.map +1 -0
  213. package/dist/editors/strategies/zed/prompts.d.ts +18 -0
  214. package/dist/editors/strategies/zed/prompts.d.ts.map +1 -0
  215. package/dist/editors/strategies/zed/prompts.js +25 -0
  216. package/dist/editors/strategies/zed/prompts.js.map +1 -0
  217. package/dist/editors/strategies/zed/rules.d.ts +17 -0
  218. package/dist/editors/strategies/zed/rules.d.ts.map +1 -0
  219. package/dist/editors/strategies/zed/rules.js +33 -0
  220. package/dist/editors/strategies/zed/rules.js.map +1 -0
  221. package/dist/editors/types.d.ts +164 -0
  222. package/dist/editors/types.d.ts.map +1 -0
  223. package/dist/editors/types.js +2 -0
  224. package/dist/editors/types.js.map +1 -0
  225. package/dist/env/ci.d.ts +6 -0
  226. package/dist/env/ci.d.ts.map +1 -0
  227. package/dist/env/ci.js +22 -0
  228. package/dist/env/ci.js.map +1 -0
  229. package/dist/env/index.d.ts +2 -0
  230. package/dist/env/index.d.ts.map +1 -0
  231. package/dist/env/index.js +2 -0
  232. package/dist/env/index.js.map +1 -0
  233. package/dist/errors.d.ts +44 -0
  234. package/dist/errors.d.ts.map +1 -0
  235. package/dist/errors.js +68 -0
  236. package/dist/errors.js.map +1 -0
  237. package/dist/format-error.d.ts +18 -0
  238. package/dist/format-error.d.ts.map +1 -0
  239. package/dist/format-error.js +113 -0
  240. package/dist/format-error.js.map +1 -0
  241. package/dist/fs/safe-rm.d.ts +20 -0
  242. package/dist/fs/safe-rm.d.ts.map +1 -0
  243. package/dist/fs/safe-rm.js +129 -0
  244. package/dist/fs/safe-rm.js.map +1 -0
  245. package/dist/git-loader.d.ts +21 -0
  246. package/dist/git-loader.d.ts.map +1 -0
  247. package/dist/git-loader.js +61 -0
  248. package/dist/git-loader.js.map +1 -0
  249. package/dist/global/comparison.d.ts +16 -0
  250. package/dist/global/comparison.d.ts.map +1 -0
  251. package/dist/global/comparison.js +52 -0
  252. package/dist/global/comparison.js.map +1 -0
  253. package/dist/global/index.d.ts +5 -0
  254. package/dist/global/index.d.ts.map +1 -0
  255. package/dist/global/index.js +4 -0
  256. package/dist/global/index.js.map +1 -0
  257. package/dist/global/processor.d.ts +26 -0
  258. package/dist/global/processor.d.ts.map +1 -0
  259. package/dist/global/processor.js +318 -0
  260. package/dist/global/processor.js.map +1 -0
  261. package/dist/global/tracking.d.ts +109 -0
  262. package/dist/global/tracking.d.ts.map +1 -0
  263. package/dist/global/tracking.js +193 -0
  264. package/dist/global/tracking.js.map +1 -0
  265. package/dist/global/types.d.ts +54 -0
  266. package/dist/global/types.d.ts.map +1 -0
  267. package/dist/global/types.js +2 -0
  268. package/dist/global/types.js.map +1 -0
  269. package/dist/import-writer.d.ts +37 -0
  270. package/dist/import-writer.d.ts.map +1 -0
  271. package/dist/import-writer.js +129 -0
  272. package/dist/import-writer.js.map +1 -0
  273. package/dist/index.d.ts +23 -0
  274. package/dist/index.d.ts.map +1 -0
  275. package/dist/index.js +23 -0
  276. package/dist/index.js.map +1 -0
  277. package/dist/inheritance.d.ts +9 -0
  278. package/dist/inheritance.d.ts.map +1 -0
  279. package/dist/inheritance.js +133 -0
  280. package/dist/inheritance.js.map +1 -0
  281. package/dist/json.d.ts +75 -0
  282. package/dist/json.d.ts.map +1 -0
  283. package/dist/json.js +123 -0
  284. package/dist/json.js.map +1 -0
  285. package/dist/loader.d.ts +35 -0
  286. package/dist/loader.d.ts.map +1 -0
  287. package/dist/loader.js +147 -0
  288. package/dist/loader.js.map +1 -0
  289. package/dist/mcp/env.d.ts +28 -0
  290. package/dist/mcp/env.d.ts.map +1 -0
  291. package/dist/mcp/env.js +47 -0
  292. package/dist/mcp/env.js.map +1 -0
  293. package/dist/mcp/index.d.ts +4 -0
  294. package/dist/mcp/index.d.ts.map +1 -0
  295. package/dist/mcp/index.js +4 -0
  296. package/dist/mcp/index.js.map +1 -0
  297. package/dist/mcp/normalize.d.ts +33 -0
  298. package/dist/mcp/normalize.d.ts.map +1 -0
  299. package/dist/mcp/normalize.js +29 -0
  300. package/dist/mcp/normalize.js.map +1 -0
  301. package/dist/mcp/templates.d.ts +18 -0
  302. package/dist/mcp/templates.d.ts.map +1 -0
  303. package/dist/mcp/templates.js +66 -0
  304. package/dist/mcp/templates.js.map +1 -0
  305. package/dist/merge.d.ts +29 -0
  306. package/dist/merge.d.ts.map +1 -0
  307. package/dist/merge.js +154 -0
  308. package/dist/merge.js.map +1 -0
  309. package/dist/npm/index.d.ts +2 -0
  310. package/dist/npm/index.d.ts.map +1 -0
  311. package/dist/npm/index.js +2 -0
  312. package/dist/npm/index.js.map +1 -0
  313. package/dist/npm/resolve.d.ts +16 -0
  314. package/dist/npm/resolve.d.ts.map +1 -0
  315. package/dist/npm/resolve.js +42 -0
  316. package/dist/npm/resolve.js.map +1 -0
  317. package/dist/prompts/index.d.ts +2 -0
  318. package/dist/prompts/index.d.ts.map +1 -0
  319. package/dist/prompts/index.js +2 -0
  320. package/dist/prompts/index.js.map +1 -0
  321. package/dist/prompts/loader.d.ts +23 -0
  322. package/dist/prompts/loader.d.ts.map +1 -0
  323. package/dist/prompts/loader.js +115 -0
  324. package/dist/prompts/loader.js.map +1 -0
  325. package/dist/remote-loader.d.ts +29 -0
  326. package/dist/remote-loader.d.ts.map +1 -0
  327. package/dist/remote-loader.js +208 -0
  328. package/dist/remote-loader.js.map +1 -0
  329. package/dist/rules/index.d.ts +6 -0
  330. package/dist/rules/index.d.ts.map +1 -0
  331. package/dist/rules/index.js +6 -0
  332. package/dist/rules/index.js.map +1 -0
  333. package/dist/rules/interpolate.d.ts +27 -0
  334. package/dist/rules/interpolate.d.ts.map +1 -0
  335. package/dist/rules/interpolate.js +48 -0
  336. package/dist/rules/interpolate.js.map +1 -0
  337. package/dist/rules/loader.d.ts +27 -0
  338. package/dist/rules/loader.d.ts.map +1 -0
  339. package/dist/rules/loader.js +94 -0
  340. package/dist/rules/loader.js.map +1 -0
  341. package/dist/rules/merger.d.ts +37 -0
  342. package/dist/rules/merger.d.ts.map +1 -0
  343. package/dist/rules/merger.js +93 -0
  344. package/dist/rules/merger.js.map +1 -0
  345. package/dist/rules/skill-rules.d.ts +13 -0
  346. package/dist/rules/skill-rules.d.ts.map +1 -0
  347. package/dist/rules/skill-rules.js +70 -0
  348. package/dist/rules/skill-rules.js.map +1 -0
  349. package/dist/rules/utils.d.ts +36 -0
  350. package/dist/rules/utils.d.ts.map +1 -0
  351. package/dist/rules/utils.js +82 -0
  352. package/dist/rules/utils.js.map +1 -0
  353. package/dist/skills/cache.d.ts +10 -0
  354. package/dist/skills/cache.d.ts.map +1 -0
  355. package/dist/skills/cache.js +20 -0
  356. package/dist/skills/cache.js.map +1 -0
  357. package/dist/skills/index.d.ts +9 -0
  358. package/dist/skills/index.d.ts.map +1 -0
  359. package/dist/skills/index.js +9 -0
  360. package/dist/skills/index.js.map +1 -0
  361. package/dist/skills/parser.d.ts +6 -0
  362. package/dist/skills/parser.d.ts.map +1 -0
  363. package/dist/skills/parser.js +28 -0
  364. package/dist/skills/parser.js.map +1 -0
  365. package/dist/skills/reference-parser.d.ts +23 -0
  366. package/dist/skills/reference-parser.d.ts.map +1 -0
  367. package/dist/skills/reference-parser.js +162 -0
  368. package/dist/skills/reference-parser.js.map +1 -0
  369. package/dist/skills/resolve.d.ts +21 -0
  370. package/dist/skills/resolve.d.ts.map +1 -0
  371. package/dist/skills/resolve.js +43 -0
  372. package/dist/skills/resolve.js.map +1 -0
  373. package/dist/skills/resolvers/git.d.ts +8 -0
  374. package/dist/skills/resolvers/git.d.ts.map +1 -0
  375. package/dist/skills/resolvers/git.js +43 -0
  376. package/dist/skills/resolvers/git.js.map +1 -0
  377. package/dist/skills/resolvers/local.d.ts +7 -0
  378. package/dist/skills/resolvers/local.d.ts.map +1 -0
  379. package/dist/skills/resolvers/local.js +16 -0
  380. package/dist/skills/resolvers/local.js.map +1 -0
  381. package/dist/skills/resolvers/npm.d.ts +12 -0
  382. package/dist/skills/resolvers/npm.d.ts.map +1 -0
  383. package/dist/skills/resolvers/npm.js +28 -0
  384. package/dist/skills/resolvers/npm.js.map +1 -0
  385. package/dist/skills/validate.d.ts +11 -0
  386. package/dist/skills/validate.d.ts.map +1 -0
  387. package/dist/skills/validate.js +43 -0
  388. package/dist/skills/validate.js.map +1 -0
  389. package/dist/updater.d.ts +23 -0
  390. package/dist/updater.d.ts.map +1 -0
  391. package/dist/updater.js +100 -0
  392. package/dist/updater.js.map +1 -0
  393. package/dist/url-parsing.d.ts +121 -0
  394. package/dist/url-parsing.d.ts.map +1 -0
  395. package/dist/url-parsing.js +199 -0
  396. package/dist/url-parsing.js.map +1 -0
  397. package/package.json +41 -0
@@ -0,0 +1,101 @@
1
+ import type { AiJsonConfig, McpServerConfig } from '@a1st/aix-schema';
2
+ import type { EditorAdapter, EditorConfig, EditorName, ApplyOptions, ApplyResult, FileChange, EditorRule, EditorPrompt, UnsupportedFeatures } from '../types.js';
3
+ import type { RulesStrategy, McpStrategy, SkillsStrategy, PromptsStrategy, HooksStrategy } from '../strategies/types.js';
4
+ /**
5
+ * Filter out `false` values from MCP config (used to disable inherited servers).
6
+ */
7
+ export declare function filterMcpConfig(mcp: AiJsonConfig['mcp']): Record<string, McpServerConfig>;
8
+ /**
9
+ * Base class for editor adapters providing common functionality for detecting editor config
10
+ * directories, writing files atomically, and managing backups. Subclasses provide strategies for
11
+ * rules, MCP, and skills handling.
12
+ */
13
+ export declare abstract class BaseEditorAdapter implements EditorAdapter {
14
+ abstract readonly name: EditorName;
15
+ abstract readonly configDir: string;
16
+ /** Strategy for formatting and writing rules */
17
+ protected abstract readonly rulesStrategy: RulesStrategy;
18
+ /** Strategy for formatting and writing MCP config */
19
+ protected abstract readonly mcpStrategy: McpStrategy;
20
+ /** Strategy for installing skills (native or pointer) */
21
+ protected abstract readonly skillsStrategy: SkillsStrategy;
22
+ /** Strategy for formatting and writing prompts/commands */
23
+ protected abstract readonly promptsStrategy: PromptsStrategy;
24
+ /** Strategy for formatting and writing hooks */
25
+ protected abstract readonly hooksStrategy: HooksStrategy;
26
+ detect(projectRoot: string): Promise<boolean>;
27
+ abstract generateConfig(config: AiJsonConfig, projectRoot: string, options?: ApplyOptions): Promise<EditorConfig>;
28
+ apply(editorConfig: EditorConfig, projectRoot: string, options?: ApplyOptions): Promise<ApplyResult>;
29
+ /**
30
+ * Remove the .aix folder to ensure a clean install state.
31
+ * Preserves .aix/.tmp if it exists (for temporary files).
32
+ */
33
+ protected cleanAixFolder(projectRoot: string): Promise<void>;
34
+ /**
35
+ * Apply file changes atomically. If any write fails, attempt to rollback.
36
+ * Sequential execution is required here for atomic rollback support.
37
+ */
38
+ protected applyChanges(changes: FileChange[]): Promise<void>;
39
+ /**
40
+ * Read existing file content, returning null if file doesn't exist.
41
+ */
42
+ protected readExisting(filePath: string): Promise<string | null>;
43
+ /**
44
+ * Determine if a file needs to be created, updated, or is unchanged.
45
+ */
46
+ protected determineAction(existingContent: string | null, newContent: string): 'create' | 'update' | 'unchanged';
47
+ /**
48
+ * Load and merge rules from config and skills. Uses the skills strategy to install skills and
49
+ * generate any necessary pointer rules.
50
+ */
51
+ protected loadRules(config: AiJsonConfig, projectRoot: string, options?: {
52
+ dryRun?: boolean;
53
+ scopes?: string[];
54
+ }): Promise<{
55
+ rules: EditorRule[];
56
+ skillChanges: FileChange[];
57
+ }>;
58
+ /**
59
+ * Plan file changes using the rules and MCP strategies. This is the default implementation that
60
+ * most adapters can use directly.
61
+ */
62
+ protected planChanges(editorConfig: EditorConfig, projectRoot: string, scopes: string[], options?: ApplyOptions): Promise<FileChange[]>;
63
+ /**
64
+ * Check if a file path is a JSON file based on extension.
65
+ */
66
+ protected isJsonFile(filePath: string): boolean;
67
+ /**
68
+ * Plan a change for a JSON file, merging with existing content unless overwrite is set.
69
+ */
70
+ protected planJsonFileChange(filePath: string, newContent: string, options?: ApplyOptions): Promise<FileChange>;
71
+ /**
72
+ * Sanitize a string for use as a filename.
73
+ */
74
+ protected sanitizeFileName(name: string): string;
75
+ /**
76
+ * Extract filename from a source path (git or local).
77
+ * Git format: "url#ref:path/to/file.md" -> "file.md"
78
+ * Local format: "/path/to/file.md" -> "file.md"
79
+ */
80
+ private extractFileNameFromPath;
81
+ /**
82
+ * Derive a rule name from the rule's name field or sourcePath.
83
+ * For git sources, extracts the filename from the path.
84
+ * For local files, extracts the filename from the path.
85
+ */
86
+ protected deriveRuleName(rule: EditorRule): string;
87
+ /**
88
+ * Derive a prompt name from the prompt's name field or sourcePath.
89
+ */
90
+ protected derivePromptName(prompt: EditorPrompt): string;
91
+ /**
92
+ * Load prompts from config. Resolves content from inline, path, or git sources.
93
+ */
94
+ protected loadPrompts(config: AiJsonConfig, projectRoot: string): Promise<EditorPrompt[]>;
95
+ /**
96
+ * Get features from the config that this editor doesn't support. Uses the strategy isSupported()
97
+ * methods to determine what's available.
98
+ */
99
+ getUnsupportedFeatures(config: AiJsonConfig): UnsupportedFeatures;
100
+ }
101
+ //# sourceMappingURL=base.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../../../src/editors/adapters/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,399 @@
1
+ import { mkdir, readFile, writeFile, rm, access, constants, chmod } from 'node:fs/promises';
2
+ import { join, dirname, basename } from 'pathe';
3
+ import { existsSync } from 'node:fs';
4
+ import { deepMergeJson, mcpConfigMergeResolver } from '../../json.js';
5
+ import { loadPrompts as loadPromptsFromConfig } from '../../prompts/loader.js';
6
+ import { mergeRules } from '../../rules/merger.js';
7
+ import { resolveAllSkills } from '../../skills/resolve.js';
8
+ /**
9
+ * Filter out `false` values from MCP config (used to disable inherited servers).
10
+ */
11
+ export function filterMcpConfig(mcp) {
12
+ if (!mcp) {
13
+ return {};
14
+ }
15
+ const result = {};
16
+ for (const [key, value] of Object.entries(mcp)) {
17
+ if (value !== false) {
18
+ result[key] = value;
19
+ }
20
+ }
21
+ return result;
22
+ }
23
+ /**
24
+ * Base class for editor adapters providing common functionality for detecting editor config
25
+ * directories, writing files atomically, and managing backups. Subclasses provide strategies for
26
+ * rules, MCP, and skills handling.
27
+ */
28
+ export class BaseEditorAdapter {
29
+ async detect(projectRoot) {
30
+ const configPath = join(projectRoot, this.configDir);
31
+ try {
32
+ await access(configPath, constants.F_OK);
33
+ return true;
34
+ }
35
+ catch {
36
+ return false;
37
+ }
38
+ }
39
+ async apply(editorConfig, projectRoot, options = {}) {
40
+ const result = {
41
+ editor: this.name,
42
+ success: true,
43
+ changes: [],
44
+ errors: [],
45
+ };
46
+ const scopes = options.scopes ?? ['rules', 'mcp', 'skills', 'editors'];
47
+ try {
48
+ // Clean the .aix folder if requested (ensures exact match with ai.json)
49
+ if (options.clean && !options.dryRun) {
50
+ await this.cleanAixFolder(projectRoot);
51
+ }
52
+ // Generate file changes
53
+ const changes = await this.planChanges(editorConfig, projectRoot, scopes, options);
54
+ result.changes = changes;
55
+ // If dry-run, don't actually write
56
+ if (options.dryRun) {
57
+ return result;
58
+ }
59
+ // Apply changes atomically
60
+ await this.applyChanges(changes);
61
+ }
62
+ catch (error) {
63
+ result.success = false;
64
+ result.errors.push(error instanceof Error ? error.message : String(error));
65
+ }
66
+ return result;
67
+ }
68
+ /**
69
+ * Remove the .aix folder to ensure a clean install state.
70
+ * Preserves .aix/.tmp if it exists (for temporary files).
71
+ */
72
+ async cleanAixFolder(projectRoot) {
73
+ const aixPath = join(projectRoot, '.aix');
74
+ if (!existsSync(aixPath)) {
75
+ return;
76
+ }
77
+ // Remove the .aix folder entirely, then recreate .tmp if needed
78
+ await rm(aixPath, { recursive: true, force: true });
79
+ }
80
+ /**
81
+ * Apply file changes atomically. If any write fails, attempt to rollback.
82
+ * Sequential execution is required here for atomic rollback support.
83
+ */
84
+ async applyChanges(changes) {
85
+ const applied = [];
86
+ try {
87
+ for (const change of changes) {
88
+ // Skip unchanged and directory changes (directories are already copied elsewhere)
89
+ if (change.action === 'unchanged' || change.isDirectory) {
90
+ continue;
91
+ }
92
+ // Store original content for rollback
93
+ let originalContent = null;
94
+ if (existsSync(change.path)) {
95
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic rollback
96
+ originalContent = await readFile(change.path, 'utf-8');
97
+ }
98
+ applied.push({ path: change.path, originalContent });
99
+ if (change.action === 'delete') {
100
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic rollback
101
+ await rm(change.path, { force: true });
102
+ }
103
+ else {
104
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic rollback
105
+ await mkdir(dirname(change.path), { recursive: true });
106
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic rollback
107
+ await writeFile(change.path, change.content ?? '', 'utf-8');
108
+ if (change.mode !== undefined) {
109
+ // eslint-disable-next-line no-await-in-loop -- Sequential for atomic rollback
110
+ await chmod(change.path, change.mode);
111
+ }
112
+ }
113
+ }
114
+ }
115
+ catch (error) {
116
+ // Rollback on failure - must be sequential to restore in reverse order
117
+ for (const { path, originalContent } of applied) {
118
+ try {
119
+ if (originalContent === null) {
120
+ // eslint-disable-next-line no-await-in-loop -- Sequential rollback
121
+ await rm(path, { force: true });
122
+ }
123
+ else {
124
+ // eslint-disable-next-line no-await-in-loop -- Sequential rollback
125
+ await writeFile(path, originalContent, 'utf-8');
126
+ }
127
+ }
128
+ catch {
129
+ // Best effort rollback
130
+ }
131
+ }
132
+ throw error;
133
+ }
134
+ }
135
+ /**
136
+ * Read existing file content, returning null if file doesn't exist.
137
+ */
138
+ async readExisting(filePath) {
139
+ try {
140
+ return await readFile(filePath, 'utf-8');
141
+ }
142
+ catch {
143
+ return null;
144
+ }
145
+ }
146
+ /**
147
+ * Determine if a file needs to be created, updated, or is unchanged.
148
+ */
149
+ determineAction(existingContent, newContent) {
150
+ if (existingContent === null) {
151
+ return 'create';
152
+ }
153
+ if (existingContent === newContent) {
154
+ return 'unchanged';
155
+ }
156
+ return 'update';
157
+ }
158
+ /**
159
+ * Load and merge rules from config and skills. Uses the skills strategy to install skills and
160
+ * generate any necessary pointer rules.
161
+ */
162
+ async loadRules(config, projectRoot, options = {}) {
163
+ const basePath = join(projectRoot, 'ai.json'), scopes = options.scopes ?? ['rules', 'mcp', 'skills', 'editors'];
164
+ let skillChanges = [], skillRules = [];
165
+ // Resolve skills and use the skills strategy to install them (only if skills scope is included)
166
+ if (scopes.includes('skills') && config.skills && Object.keys(config.skills).length > 0) {
167
+ const resolvedSkills = await resolveAllSkills(config.skills, {
168
+ baseDir: projectRoot,
169
+ projectRoot,
170
+ });
171
+ // Install skills using the strategy (handles copying and symlinks/pointer rules)
172
+ skillChanges = await this.skillsStrategy.installSkills(resolvedSkills, projectRoot, options);
173
+ // Generate skill rules (empty for native, pointer rules for non-native)
174
+ skillRules = this.skillsStrategy.generateSkillRules(resolvedSkills);
175
+ }
176
+ // Merge config rules with skill rules
177
+ const merged = await mergeRules(config.rules ?? {}, [], { basePath });
178
+ const configRules = merged.all.map((rule) => ({
179
+ name: rule.name,
180
+ content: rule.content,
181
+ activation: {
182
+ type: rule.metadata.activation,
183
+ description: rule.metadata.description,
184
+ globs: rule.metadata.globs,
185
+ },
186
+ sourcePath: rule.sourcePath,
187
+ }));
188
+ // Combine config rules with skill rules
189
+ const rules = [...configRules, ...skillRules];
190
+ return { rules, skillChanges };
191
+ }
192
+ /**
193
+ * Plan file changes using the rules and MCP strategies. This is the default implementation that
194
+ * most adapters can use directly.
195
+ */
196
+ async planChanges(editorConfig, projectRoot, scopes, options = {}) {
197
+ const changes = [], configDir = join(projectRoot, this.configDir);
198
+ // Rules (markdown files - always overwrite, no merge)
199
+ if (scopes.includes('rules')) {
200
+ const rulesDir = join(configDir, this.rulesStrategy.getRulesDir()), ext = this.rulesStrategy.getFileExtension();
201
+ const ruleChanges = await Promise.all(editorConfig.rules.map(async (rule) => {
202
+ const fileName = this.sanitizeFileName(this.deriveRuleName(rule)) + ext, filePath = join(rulesDir, fileName), content = this.rulesStrategy.formatRule(rule), existing = await this.readExisting(filePath), action = this.determineAction(existing, content);
203
+ return { path: filePath, action, content, category: 'rule' };
204
+ }));
205
+ changes.push(...ruleChanges);
206
+ }
207
+ // MCP config (JSON file - merge by default unless overwrite is set)
208
+ // Skip for global-only strategies (e.g., Windsurf) - they're handled separately
209
+ if (scopes.includes('mcp') && this.mcpStrategy.isSupported() && !this.mcpStrategy.isGlobalOnly?.()) {
210
+ const mcpEntries = Object.keys(editorConfig.mcp);
211
+ if (mcpEntries.length > 0) {
212
+ const mcpPath = join(configDir, this.mcpStrategy.getConfigPath());
213
+ // Only merge JSON files that we directly write to (MCP config files)
214
+ if (this.isJsonFile(mcpPath)) {
215
+ const change = await this.planJsonFileChange(mcpPath, this.mcpStrategy.formatConfig(editorConfig.mcp), options);
216
+ changes.push({ ...change, category: 'mcp' });
217
+ }
218
+ else {
219
+ // Non-JSON MCP config (e.g., codex flags) - always overwrite
220
+ const content = this.mcpStrategy.formatConfig(editorConfig.mcp), existing = await this.readExisting(mcpPath), action = this.determineAction(existing, content);
221
+ changes.push({ path: mcpPath, action, content, category: 'mcp' });
222
+ }
223
+ }
224
+ }
225
+ // Prompts/commands (markdown files - always overwrite, no merge)
226
+ if (scopes.includes('editors') && this.promptsStrategy.isSupported()) {
227
+ const promptsDir = join(configDir, this.promptsStrategy.getPromptsDir()), ext = this.promptsStrategy.getFileExtension();
228
+ const promptChanges = await Promise.all(editorConfig.prompts.map(async (prompt) => {
229
+ const fileName = this.sanitizeFileName(this.derivePromptName(prompt)) + ext, filePath = join(promptsDir, fileName), content = this.promptsStrategy.formatPrompt(prompt), existing = await this.readExisting(filePath), action = this.determineAction(existing, content);
230
+ return { path: filePath, action, content, category: 'workflow' };
231
+ }));
232
+ changes.push(...promptChanges);
233
+ }
234
+ // Hooks (JSON file - merge by default unless overwrite is set)
235
+ if (scopes.includes('editors') && this.hooksStrategy.isSupported() && editorConfig.hooks) {
236
+ const hookEvents = Object.keys(editorConfig.hooks);
237
+ if (hookEvents.length > 0) {
238
+ const formattedHooks = this.hooksStrategy.formatConfig(editorConfig.hooks);
239
+ // Only write hooks file if formatConfig produced actual hooks (not just empty wrapper)
240
+ const parsedHooks = JSON.parse(formattedHooks);
241
+ if (parsedHooks.hooks && Object.keys(parsedHooks.hooks).length > 0) {
242
+ const hooksPath = join(configDir, this.hooksStrategy.getConfigPath()), change = await this.planJsonFileChange(hooksPath, formattedHooks, options);
243
+ changes.push({ ...change, category: 'hook' });
244
+ }
245
+ }
246
+ }
247
+ return changes;
248
+ }
249
+ /**
250
+ * Check if a file path is a JSON file based on extension.
251
+ */
252
+ isJsonFile(filePath) {
253
+ return filePath.endsWith('.json');
254
+ }
255
+ /**
256
+ * Plan a change for a JSON file, merging with existing content unless overwrite is set.
257
+ */
258
+ async planJsonFileChange(filePath, newContent, options = {}) {
259
+ const existing = await this.readExisting(filePath);
260
+ // If overwrite mode or file doesn't exist, use new content directly
261
+ if (options.overwrite || existing === null) {
262
+ const action = this.determineAction(existing, newContent);
263
+ return { path: filePath, action, content: newContent };
264
+ }
265
+ // Merge existing JSON with new JSON
266
+ try {
267
+ const existingJson = JSON.parse(existing), newJson = JSON.parse(newContent), merged = deepMergeJson(existingJson, newJson, { resolver: mcpConfigMergeResolver }), mergedContent = JSON.stringify(merged, null, 2) + '\n', action = this.determineAction(existing, mergedContent);
268
+ return { path: filePath, action, content: mergedContent };
269
+ }
270
+ catch {
271
+ // If JSON parsing fails, fall back to overwrite
272
+ const action = this.determineAction(existing, newContent);
273
+ return { path: filePath, action, content: newContent };
274
+ }
275
+ }
276
+ /**
277
+ * Sanitize a string for use as a filename.
278
+ */
279
+ sanitizeFileName(name) {
280
+ return name
281
+ .toLowerCase()
282
+ .replace(/[^a-z0-9-]/g, '-')
283
+ .replace(/-+/g, '-')
284
+ .replace(/^-|-$/g, '');
285
+ }
286
+ /**
287
+ * Extract filename from a source path (git or local).
288
+ * Git format: "url#ref:path/to/file.md" -> "file.md"
289
+ * Local format: "/path/to/file.md" -> "file.md"
290
+ */
291
+ extractFileNameFromPath(sourcePath) {
292
+ // Git source format: "url#ref:path/to/file.md"
293
+ const hashIdx = sourcePath.indexOf('#');
294
+ if (hashIdx !== -1) {
295
+ const afterHash = sourcePath.slice(hashIdx + 1);
296
+ const colonIdx = afterHash.indexOf(':');
297
+ if (colonIdx !== -1) {
298
+ const filePath = afterHash.slice(colonIdx + 1);
299
+ if (filePath) {
300
+ // Git paths always use forward slashes
301
+ return filePath.split('/').pop();
302
+ }
303
+ }
304
+ }
305
+ // Local file path - use basename for cross-platform support
306
+ return basename(sourcePath);
307
+ }
308
+ /**
309
+ * Derive a rule name from the rule's name field or sourcePath.
310
+ * For git sources, extracts the filename from the path.
311
+ * For local files, extracts the filename from the path.
312
+ */
313
+ deriveRuleName(rule) {
314
+ if (rule.name) {
315
+ return rule.name;
316
+ }
317
+ if (rule.sourcePath) {
318
+ const fileName = this.extractFileNameFromPath(rule.sourcePath);
319
+ if (fileName) {
320
+ return fileName.replace(/\.(md|mdc|txt)$/i, '');
321
+ }
322
+ }
323
+ return 'rule';
324
+ }
325
+ /**
326
+ * Derive a prompt name from the prompt's name field or sourcePath.
327
+ */
328
+ derivePromptName(prompt) {
329
+ if (prompt.name) {
330
+ return prompt.name;
331
+ }
332
+ if (prompt.sourcePath) {
333
+ const fileName = this.extractFileNameFromPath(prompt.sourcePath);
334
+ if (fileName) {
335
+ return fileName.replace(/\.(md|prompt\.md|txt)$/i, '');
336
+ }
337
+ }
338
+ return 'prompt';
339
+ }
340
+ /**
341
+ * Load prompts from config. Resolves content from inline, path, or git sources.
342
+ */
343
+ async loadPrompts(config, projectRoot) {
344
+ if (!config.prompts || Object.keys(config.prompts).length === 0) {
345
+ return [];
346
+ }
347
+ const basePath = join(projectRoot, 'ai.json');
348
+ const loaded = await loadPromptsFromConfig(config.prompts, basePath);
349
+ return Object.values(loaded).map((p) => ({
350
+ name: p.name,
351
+ content: p.content,
352
+ description: p.description,
353
+ argumentHint: p.argumentHint,
354
+ sourcePath: p.sourcePath,
355
+ }));
356
+ }
357
+ /**
358
+ * Get features from the config that this editor doesn't support. Uses the strategy isSupported()
359
+ * methods to determine what's available.
360
+ */
361
+ getUnsupportedFeatures(config) {
362
+ const unsupported = {}, mcpServers = Object.keys(config.mcp ?? {});
363
+ // Check MCP support
364
+ if (mcpServers.length > 0 && !this.mcpStrategy.isSupported()) {
365
+ unsupported.mcp = {
366
+ reason: `${this.name} does not support MCP servers`,
367
+ servers: mcpServers,
368
+ };
369
+ }
370
+ // Check hooks support
371
+ if (config.hooks && Object.keys(config.hooks).length > 0) {
372
+ if (!this.hooksStrategy.isSupported()) {
373
+ unsupported.hooks = {
374
+ reason: `${this.name} does not support hooks`,
375
+ allUnsupported: true,
376
+ };
377
+ }
378
+ else {
379
+ const unsupportedEvents = this.hooksStrategy.getUnsupportedEvents(config.hooks);
380
+ if (unsupportedEvents.length > 0) {
381
+ unsupported.hooks = {
382
+ reason: `${this.name} does not support some hook events`,
383
+ unsupportedEvents,
384
+ };
385
+ }
386
+ }
387
+ }
388
+ // Check prompts support
389
+ const promptNames = Object.keys(config.prompts ?? {});
390
+ if (promptNames.length > 0 && !this.promptsStrategy.isSupported()) {
391
+ unsupported.prompts = {
392
+ reason: `${this.name} does not support prompts/commands`,
393
+ prompts: promptNames,
394
+ };
395
+ }
396
+ return unsupported;
397
+ }
398
+ }
399
+ //# sourceMappingURL=base.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"base.js","sourceRoot":"","sources":["../../../src/editors/adapters/base.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,27 @@
1
+ import type { AiJsonConfig } from '@a1st/aix-schema';
2
+ import { BaseEditorAdapter } from './base.js';
3
+ import type { EditorConfig, FileChange, ApplyOptions } from '../types.js';
4
+ import type { RulesStrategy, McpStrategy, SkillsStrategy, PromptsStrategy, HooksStrategy } from '../strategies/types.js';
5
+ /**
6
+ * Claude Code editor adapter. Writes rules to `.claude/rules/*.md` and MCP config to
7
+ * `.claude/mcp.json`. Skills are installed to `.aix/skills/{name}/` with symlinks from
8
+ * `.claude/skills/` since Claude Code has native Agent Skills support. Hooks are written
9
+ * to `.claude/settings.json`.
10
+ */
11
+ export declare class ClaudeCodeAdapter extends BaseEditorAdapter {
12
+ readonly name: "claude-code";
13
+ readonly configDir = ".claude";
14
+ protected readonly rulesStrategy: RulesStrategy;
15
+ protected readonly mcpStrategy: McpStrategy;
16
+ protected readonly skillsStrategy: SkillsStrategy;
17
+ protected readonly promptsStrategy: PromptsStrategy;
18
+ protected readonly hooksStrategy: HooksStrategy;
19
+ private pendingSkillChanges;
20
+ generateConfig(config: AiJsonConfig, projectRoot: string, options?: ApplyOptions): Promise<EditorConfig>;
21
+ /**
22
+ * Extract hooks from the top-level config.
23
+ */
24
+ private extractHooks;
25
+ protected planChanges(editorConfig: EditorConfig, projectRoot: string, scopes: string[], options?: ApplyOptions): Promise<FileChange[]>;
26
+ }
27
+ //# sourceMappingURL=claude-code.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.d.ts","sourceRoot":"","sources":["../../../src/editors/adapters/claude-code.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAe,MAAM,kBAAkB,CAAC;AAClE,OAAO,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAO1E,OAAO,KAAK,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,EACf,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,qBAAa,iBAAkB,SAAQ,iBAAiB;IACrD,QAAQ,CAAC,IAAI,EAAG,aAAa,CAAU;IACvC,QAAQ,CAAC,SAAS,aAAa;IAE/B,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAiC;IAChF,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAA6B;IACxE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAE9C;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAAmC;IACtF,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAiC;IAEhF,OAAO,CAAC,mBAAmB,CAAoB;IAEzC,cAAc,CACjB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,YAAiB,GAC1B,OAAO,CAAC,YAAY,CAAC;IAaxB;;OAEG;IACH,OAAO,CAAC,YAAY;cAIK,WAAW,CACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,EAChB,OAAO,GAAE,YAAiB,GAC1B,OAAO,CAAC,UAAU,EAAE,CAAC;CAY1B"}
@@ -0,0 +1,46 @@
1
+ import { BaseEditorAdapter, filterMcpConfig } from './base.js';
2
+ import { ClaudeCodeRulesStrategy, ClaudeCodePromptsStrategy, ClaudeCodeHooksStrategy, } from '../strategies/claude-code/index.js';
3
+ import { StandardMcpStrategy, NativeSkillsStrategy } from '../strategies/shared/index.js';
4
+ /**
5
+ * Claude Code editor adapter. Writes rules to `.claude/rules/*.md` and MCP config to
6
+ * `.claude/mcp.json`. Skills are installed to `.aix/skills/{name}/` with symlinks from
7
+ * `.claude/skills/` since Claude Code has native Agent Skills support. Hooks are written
8
+ * to `.claude/settings.json`.
9
+ */
10
+ export class ClaudeCodeAdapter extends BaseEditorAdapter {
11
+ name = 'claude-code';
12
+ configDir = '.claude';
13
+ rulesStrategy = new ClaudeCodeRulesStrategy();
14
+ mcpStrategy = new StandardMcpStrategy();
15
+ skillsStrategy = new NativeSkillsStrategy({
16
+ editorSkillsDir: '.claude/skills',
17
+ });
18
+ promptsStrategy = new ClaudeCodePromptsStrategy();
19
+ hooksStrategy = new ClaudeCodeHooksStrategy();
20
+ pendingSkillChanges = [];
21
+ async generateConfig(config, projectRoot, options = {}) {
22
+ const { rules, skillChanges } = await this.loadRules(config, projectRoot, {
23
+ dryRun: options.dryRun,
24
+ scopes: options.scopes,
25
+ }), prompts = await this.loadPrompts(config, projectRoot), mcp = filterMcpConfig(config.mcp), hooks = this.extractHooks(config);
26
+ this.pendingSkillChanges = skillChanges;
27
+ return { rules, prompts, mcp, hooks };
28
+ }
29
+ /**
30
+ * Extract hooks from the top-level config.
31
+ */
32
+ extractHooks(config) {
33
+ return config.hooks;
34
+ }
35
+ async planChanges(editorConfig, projectRoot, scopes, options = {}) {
36
+ // Get base changes from parent (rules, MCP, prompts, hooks)
37
+ const changes = await super.planChanges(editorConfig, projectRoot, scopes, options);
38
+ // Add skill changes only if skills scope is included
39
+ if (scopes.includes('skills')) {
40
+ changes.unshift(...this.pendingSkillChanges);
41
+ }
42
+ this.pendingSkillChanges = [];
43
+ return changes;
44
+ }
45
+ }
46
+ //# sourceMappingURL=claude-code.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"claude-code.js","sourceRoot":"","sources":["../../../src/editors/adapters/claude-code.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,iBAAiB,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE/D,OAAO,EACJ,uBAAuB,EACvB,yBAAyB,EACzB,uBAAuB,GACzB,MAAM,oCAAoC,CAAC;AAC5C,OAAO,EAAE,mBAAmB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAS1F;;;;;GAKG;AACH,MAAM,OAAO,iBAAkB,SAAQ,iBAAiB;IAC5C,IAAI,GAAG,aAAsB,CAAC;IAC9B,SAAS,GAAG,SAAS,CAAC;IAEZ,aAAa,GAAkB,IAAI,uBAAuB,EAAE,CAAC;IAC7D,WAAW,GAAgB,IAAI,mBAAmB,EAAE,CAAC;IACrD,cAAc,GAAmB,IAAI,oBAAoB,CAAC;QAC1E,eAAe,EAAE,gBAAgB;KACnC,CAAC,CAAC;IACgB,eAAe,GAAoB,IAAI,yBAAyB,EAAE,CAAC;IACnE,aAAa,GAAkB,IAAI,uBAAuB,EAAE,CAAC;IAExE,mBAAmB,GAAiB,EAAE,CAAC;IAE/C,KAAK,CAAC,cAAc,CACjB,MAAoB,EACpB,WAAmB,EACnB,UAAwB,EAAE;QAE1B,MAAM,EAAE,KAAK,EAAE,YAAY,EAAE,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,WAAW,EAAE;YACjE,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,MAAM,EAAE,OAAO,CAAC,MAAM;SACxB,CAAC,EACF,OAAO,GAAG,MAAM,IAAI,CAAC,WAAW,CAAC,MAAM,EAAE,WAAW,CAAC,EACrD,GAAG,GAAG,eAAe,CAAC,MAAM,CAAC,GAAG,CAAC,EACjC,KAAK,GAAG,IAAI,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC;QAExC,IAAI,CAAC,mBAAmB,GAAG,YAAY,CAAC;QACxC,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACK,YAAY,CAAC,MAAoB;QACtC,OAAO,MAAM,CAAC,KAAK,CAAC;IACvB,CAAC;IAEkB,KAAK,CAAC,WAAW,CACjC,YAA0B,EAC1B,WAAmB,EACnB,MAAgB,EAChB,UAAwB,EAAE;QAE1B,4DAA4D;QAC5D,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,WAAW,CAAC,YAAY,EAAE,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;QAEpF,qDAAqD;QACrD,IAAI,MAAM,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC7B,OAAO,CAAC,OAAO,CAAC,GAAG,IAAI,CAAC,mBAAmB,CAAC,CAAC;QAChD,CAAC;QACD,IAAI,CAAC,mBAAmB,GAAG,EAAE,CAAC;QAE9B,OAAO,OAAO,CAAC;IAClB,CAAC;CACH"}
@@ -0,0 +1,30 @@
1
+ import type { AiJsonConfig } from '@a1st/aix-schema';
2
+ import { BaseEditorAdapter } from './base.js';
3
+ import type { EditorConfig, FileChange, ApplyOptions } from '../types.js';
4
+ import type { RulesStrategy, McpStrategy, SkillsStrategy, PromptsStrategy, HooksStrategy } from '../strategies/types.js';
5
+ /**
6
+ * Codex CLI editor adapter. Writes rules to `.codex/AGENTS.md` (single file, plain markdown) and
7
+ * skills to `.codex/skills/{name}/`. MCP config is global-only (`~/.codex/config.toml`) and
8
+ * requires user confirmation to modify. Codex prompts are also global-only (`~/.codex/prompts/`).
9
+ * Codex does not support hooks.
10
+ */
11
+ export declare class CodexAdapter extends BaseEditorAdapter {
12
+ readonly name: "codex";
13
+ readonly configDir = ".codex";
14
+ protected readonly rulesStrategy: RulesStrategy;
15
+ protected readonly mcpStrategy: McpStrategy;
16
+ protected readonly skillsStrategy: SkillsStrategy;
17
+ protected readonly promptsStrategy: PromptsStrategy;
18
+ protected readonly hooksStrategy: HooksStrategy;
19
+ private pendingSkillChanges;
20
+ generateConfig(config: AiJsonConfig, projectRoot: string, options?: ApplyOptions): Promise<EditorConfig>;
21
+ /**
22
+ * Override planChanges to write all rules to a single AGENTS.md file instead of separate files.
23
+ */
24
+ protected planChanges(editorConfig: EditorConfig, projectRoot: string, scopes: string[], _options?: ApplyOptions): Promise<FileChange[]>;
25
+ /**
26
+ * Format all rules into a single AGENTS.md file.
27
+ */
28
+ private formatAgentsMd;
29
+ }
30
+ //# sourceMappingURL=codex.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codex.d.ts","sourceRoot":"","sources":["../../../src/editors/adapters/codex.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAErD,OAAO,EAAE,iBAAiB,EAAmB,MAAM,WAAW,CAAC;AAC/D,OAAO,KAAK,EAAE,YAAY,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAG1E,OAAO,KAAK,EACT,aAAa,EACb,WAAW,EACX,cAAc,EACd,eAAe,EACf,aAAa,EACf,MAAM,wBAAwB,CAAC;AAEhC;;;;;GAKG;AACH,qBAAa,YAAa,SAAQ,iBAAiB;IAChD,QAAQ,CAAC,IAAI,EAAG,OAAO,CAAU;IACjC,QAAQ,CAAC,SAAS,YAAY;IAE9B,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAA4B;IAC3E,SAAS,CAAC,QAAQ,CAAC,WAAW,EAAE,WAAW,CAA0B;IACrE,SAAS,CAAC,QAAQ,CAAC,cAAc,EAAE,cAAc,CAE9C;IACH,SAAS,CAAC,QAAQ,CAAC,eAAe,EAAE,eAAe,CAA8B;IACjF,SAAS,CAAC,QAAQ,CAAC,aAAa,EAAE,aAAa,CAAyB;IAExE,OAAO,CAAC,mBAAmB,CAAoB;IAEzC,cAAc,CACjB,MAAM,EAAE,YAAY,EACpB,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,YAAiB,GAC1B,OAAO,CAAC,YAAY,CAAC;IAYxB;;OAEG;cACsB,WAAW,CACjC,YAAY,EAAE,YAAY,EAC1B,WAAW,EAAE,MAAM,EACnB,MAAM,EAAE,MAAM,EAAE,EAChB,QAAQ,GAAE,YAAiB,GAC3B,OAAO,CAAC,UAAU,EAAE,CAAC;IAqBxB;;OAEG;IACH,OAAO,CAAC,cAAc;CASxB"}