@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,12 @@
1
+ export interface BackupOptions {
2
+ maxBackups?: number;
3
+ maxAgeDays?: number;
4
+ }
5
+ export interface BackupInfo {
6
+ path: string;
7
+ timestamp: Date;
8
+ }
9
+ export declare function createBackup(filePath: string, options?: BackupOptions): Promise<BackupInfo>;
10
+ export declare function restoreBackup(backupPath: string, targetPath: string): Promise<void>;
11
+ export declare function listBackups(filePath: string, backupDir?: string): Promise<BackupInfo[]>;
12
+ //# sourceMappingURL=backup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,aAAa;IAC3B,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,UAAU,CAAC,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,UAAU;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,SAAS,EAAE,IAAI,CAAC;CAClB;AAED,wBAAsB,YAAY,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,GAAE,aAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAyBrG;AAED,wBAAsB,aAAa,CAAC,UAAU,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CASzF;AAED,wBAAsB,WAAW,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAwC7F"}
package/dist/backup.js ADDED
@@ -0,0 +1,70 @@
1
+ import { mkdir, copyFile, readdir, unlink } from 'node:fs/promises';
2
+ import { existsSync } from 'node:fs';
3
+ import { resolve, dirname, basename, join } from 'pathe';
4
+ import { getBackupsDir } from './cache/paths.js';
5
+ export async function createBackup(filePath, options = {}) {
6
+ const { maxBackups = 5, maxAgeDays } = options, absolutePath = resolve(filePath);
7
+ if (!existsSync(absolutePath)) {
8
+ throw new Error(`File not found: ${filePath}`);
9
+ }
10
+ const fileName = basename(absolutePath), fileDir = dirname(absolutePath), backupPath = getBackupsDir(fileDir), timestamp = new Date(), timestampStr = timestamp.toISOString().replace(/[:.]/g, '-'), backupFileName = `${fileName}.${timestampStr}.backup`, backupFilePath = join(backupPath, backupFileName);
11
+ await mkdir(backupPath, { recursive: true });
12
+ await copyFile(absolutePath, backupFilePath);
13
+ await cleanupOldBackups(backupPath, fileName, maxBackups, maxAgeDays);
14
+ return {
15
+ path: backupFilePath,
16
+ timestamp,
17
+ };
18
+ }
19
+ export async function restoreBackup(backupPath, targetPath) {
20
+ const absoluteBackupPath = resolve(backupPath), absoluteTargetPath = resolve(targetPath);
21
+ if (!existsSync(absoluteBackupPath)) {
22
+ throw new Error(`Backup not found: ${backupPath}`);
23
+ }
24
+ await copyFile(absoluteBackupPath, absoluteTargetPath);
25
+ }
26
+ export async function listBackups(filePath, backupDir) {
27
+ const absolutePath = resolve(filePath), fileName = basename(absolutePath), fileDir = dirname(absolutePath), backupPath = backupDir ? resolve(fileDir, backupDir) : getBackupsDir(fileDir);
28
+ if (!existsSync(backupPath)) {
29
+ return [];
30
+ }
31
+ const files = await readdir(backupPath), backups = [];
32
+ for (const file of files) {
33
+ if (file.startsWith(fileName) && file.endsWith('.backup')) {
34
+ const match = file.match(/\.(\d{4}-\d{2}-\d{2}T\d{2}-\d{2}-\d{2}-\d{3}Z)\.backup$/);
35
+ if (match?.[1]) {
36
+ const timestampStr = match[1].replace(/-/g, (m, offset) => {
37
+ if (offset < 10) {
38
+ return m;
39
+ }
40
+ if (offset === 13 || offset === 16) {
41
+ return ':';
42
+ }
43
+ if (offset === 19) {
44
+ return '.';
45
+ }
46
+ return m;
47
+ });
48
+ backups.push({
49
+ path: join(backupPath, file),
50
+ timestamp: new Date(timestampStr),
51
+ });
52
+ }
53
+ }
54
+ }
55
+ return backups.toSorted((a, b) => b.timestamp.getTime() - a.timestamp.getTime());
56
+ }
57
+ async function cleanupOldBackups(backupPath, fileName, maxBackups, maxAgeDays) {
58
+ const backups = await listBackups(join(backupPath, '..', fileName), basename(backupPath));
59
+ // Delete by count (keep newest maxBackups)
60
+ if (backups.length > maxBackups) {
61
+ const toDelete = backups.slice(maxBackups);
62
+ await Promise.all(toDelete.map((backup) => unlink(backup.path)));
63
+ }
64
+ // Delete by age
65
+ if (maxAgeDays !== undefined) {
66
+ const cutoff = Date.now() - maxAgeDays * 24 * 60 * 60 * 1000, oldBackups = backups.filter((b) => b.timestamp.getTime() < cutoff);
67
+ await Promise.all(oldBackups.map((backup) => unlink(backup.path)));
68
+ }
69
+ }
70
+ //# sourceMappingURL=backup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../src/backup.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AACpE,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AACzD,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAYjD,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,QAAgB,EAAE,UAAyB,EAAE;IAC7E,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,UAAU,EAAE,GAAG,OAAO,EACxC,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,CAAC;IAEvC,IAAI,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QAC7B,MAAM,IAAI,KAAK,CAAC,mBAAmB,QAAQ,EAAE,CAAC,CAAC;IAClD,CAAC;IAED,MAAM,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,EACjC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,EAC/B,UAAU,GAAG,aAAa,CAAC,OAAO,CAAC,EACnC,SAAS,GAAG,IAAI,IAAI,EAAE,EACtB,YAAY,GAAG,SAAS,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,EAC5D,cAAc,GAAG,GAAG,QAAQ,IAAI,YAAY,SAAS,EACrD,cAAc,GAAG,IAAI,CAAC,UAAU,EAAE,cAAc,CAAC,CAAC;IAExD,MAAM,KAAK,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAC7C,MAAM,QAAQ,CAAC,YAAY,EAAE,cAAc,CAAC,CAAC;IAE7C,MAAM,iBAAiB,CAAC,UAAU,EAAE,QAAQ,EAAE,UAAU,EAAE,UAAU,CAAC,CAAC;IAEtE,OAAO;QACJ,IAAI,EAAE,cAAc;QACpB,SAAS;KACX,CAAC;AACL,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB,EAAE,UAAkB;IACvE,MAAM,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,EACxC,kBAAkB,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,EAAE,CAAC;QACnC,MAAM,IAAI,KAAK,CAAC,qBAAqB,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;IAED,MAAM,QAAQ,CAAC,kBAAkB,EAAE,kBAAkB,CAAC,CAAC;AAC1D,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,QAAgB,EAAE,SAAkB;IACnE,MAAM,YAAY,GAAG,OAAO,CAAC,QAAQ,CAAC,EAChC,QAAQ,GAAG,QAAQ,CAAC,YAAY,CAAC,EACjC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC,EAC/B,UAAU,GAAG,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,SAAS,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,OAAO,CAAC,CAAC;IAEpF,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;QAC3B,OAAO,EAAE,CAAC;IACb,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,UAAU,CAAC,EACjC,OAAO,GAAiB,EAAE,CAAC;IAEjC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACxB,IAAI,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,EAAE,CAAC;YACzD,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,yDAAyD,CAAC,CAAC;YAEpF,IAAI,KAAK,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACd,MAAM,YAAY,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,EAAE;oBACvD,IAAI,MAAM,GAAG,EAAE,EAAE,CAAC;wBACf,OAAO,CAAC,CAAC;oBACZ,CAAC;oBACD,IAAI,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;wBAClC,OAAO,GAAG,CAAC;oBACd,CAAC;oBACD,IAAI,MAAM,KAAK,EAAE,EAAE,CAAC;wBACjB,OAAO,GAAG,CAAC;oBACd,CAAC;oBACD,OAAO,CAAC,CAAC;gBACZ,CAAC,CAAC,CAAC;gBAEH,OAAO,CAAC,IAAI,CAAC;oBACV,IAAI,EAAE,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC;oBAC5B,SAAS,EAAE,IAAI,IAAI,CAAC,YAAY,CAAC;iBACnC,CAAC,CAAC;YACN,CAAC;QACJ,CAAC;IACJ,CAAC;IAED,OAAO,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,CAAC,CAAC;AACpF,CAAC;AAED,KAAK,UAAU,iBAAiB,CAC7B,UAAkB,EAClB,QAAgB,EAChB,UAAkB,EAClB,UAAmB;IAEnB,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,EAAE,QAAQ,CAAC,EAAE,QAAQ,CAAC,UAAU,CAAC,CAAC,CAAC;IAE1F,2CAA2C;IAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,UAAU,EAAE,CAAC;QAC/B,MAAM,QAAQ,GAAG,OAAO,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAE3C,MAAM,OAAO,CAAC,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,gBAAgB;IAChB,IAAI,UAAU,KAAK,SAAS,EAAE,CAAC;QAC5B,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,EAAE,GAAG,UAAU,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,IAAI,EACtD,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,OAAO,EAAE,GAAG,MAAM,CAAC,CAAC;QAEzE,MAAM,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IACtE,CAAC;AACJ,CAAC"}
@@ -0,0 +1,14 @@
1
+ export interface CleanupOptions {
2
+ maxCacheAgeDays?: number;
3
+ maxBackupAgeDays?: number;
4
+ }
5
+ export interface CleanupResult {
6
+ deletedPaths: string[];
7
+ freedBytes: number;
8
+ }
9
+ /**
10
+ * Clean stale cache entries based on age.
11
+ * Called automatically during `aix install`.
12
+ */
13
+ export declare function cleanStaleCache(projectRoot: string, options?: CleanupOptions): Promise<CleanupResult>;
14
+ //# sourceMappingURL=cleanup.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.d.ts","sourceRoot":"","sources":["../../src/cache/cleanup.ts"],"names":[],"mappings":"AAOA,MAAM,WAAW,cAAc;IAC5B,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,aAAa;IAC3B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,eAAe,CAClC,WAAW,EAAE,MAAM,EACnB,OAAO,GAAE,cAAmB,GAC5B,OAAO,CAAC,aAAa,CAAC,CA8BxB"}
@@ -0,0 +1,61 @@
1
+ import pMap from 'p-map';
2
+ import { readdir, stat } from 'node:fs/promises';
3
+ import { join } from 'pathe';
4
+ import { existsSync } from 'node:fs';
5
+ import { getCacheDir, getBackupsDir } from './paths.js';
6
+ import { safeRm } from '../fs/safe-rm.js';
7
+ /**
8
+ * Clean stale cache entries based on age.
9
+ * Called automatically during `aix install`.
10
+ */
11
+ export async function cleanStaleCache(projectRoot, options = {}) {
12
+ const { maxCacheAgeDays = 7, maxBackupAgeDays = 30 } = options, result = { deletedPaths: [], freedBytes: 0 }, now = Date.now();
13
+ // Clean git cache (rules + prompts) - both new and legacy paths
14
+ const cacheDirs = [
15
+ getCacheDir(projectRoot),
16
+ join(projectRoot, '.aix', 'cache'), // legacy
17
+ ].filter(existsSync);
18
+ const cacheMaxAge = maxCacheAgeDays * 24 * 60 * 60 * 1000;
19
+ await pMap(cacheDirs, (dir) => cleanOldEntries(dir, now - cacheMaxAge, result), {
20
+ concurrency: 2,
21
+ });
22
+ // Clean old backups (beyond maxBackupAgeDays) - both new and legacy paths
23
+ const backupDirs = [
24
+ getBackupsDir(projectRoot),
25
+ join(projectRoot, '.aix', 'backups'), // legacy
26
+ ].filter(existsSync);
27
+ const backupMaxAge = maxBackupAgeDays * 24 * 60 * 60 * 1000;
28
+ await pMap(backupDirs, (dir) => cleanOldEntries(dir, now - backupMaxAge, result), {
29
+ concurrency: 2,
30
+ });
31
+ return result;
32
+ }
33
+ async function cleanOldEntries(dir, cutoffTime, result) {
34
+ const entries = await readdir(dir, { withFileTypes: true });
35
+ const deletions = await pMap(entries, async (entry) => {
36
+ const fullPath = join(dir, entry.name), stats = await stat(fullPath);
37
+ if (stats.mtimeMs < cutoffTime) {
38
+ const size = entry.isDirectory() ? await getDirectorySize(fullPath) : stats.size;
39
+ await safeRm(fullPath, { force: true });
40
+ return { path: fullPath, size };
41
+ }
42
+ return null;
43
+ }, { concurrency: 5 });
44
+ for (const deletion of deletions) {
45
+ if (deletion) {
46
+ result.deletedPaths.push(deletion.path);
47
+ result.freedBytes += deletion.size;
48
+ }
49
+ }
50
+ }
51
+ async function getDirectorySize(dirPath) {
52
+ const stats = await stat(dirPath);
53
+ if (!stats.isDirectory()) {
54
+ return stats.size;
55
+ }
56
+ const entries = await readdir(dirPath, { withFileTypes: true }), sizes = await pMap(entries, (entry) => getDirectorySize(join(dirPath, entry.name)), {
57
+ concurrency: 5,
58
+ });
59
+ return sizes.reduce((sum, s) => sum + s, 0);
60
+ }
61
+ //# sourceMappingURL=cleanup.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cleanup.js","sourceRoot":"","sources":["../../src/cache/cleanup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,10 @@
1
+ export interface ClearCacheResult {
2
+ deletedPaths: string[];
3
+ freedBytes: number;
4
+ }
5
+ /**
6
+ * Clear all cache and temporary content from .aix/.tmp/ directory.
7
+ * Also cleans up legacy directories (.aix/backups, .aix/cache, .aix/node_modules).
8
+ */
9
+ export declare function clearCache(projectRoot: string): Promise<ClearCacheResult>;
10
+ //# sourceMappingURL=clear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.d.ts","sourceRoot":"","sources":["../../src/cache/clear.ts"],"names":[],"mappings":"AAMA,MAAM,WAAW,gBAAgB;IAC9B,YAAY,EAAE,MAAM,EAAE,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;CACrB;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA6B/E"}
@@ -0,0 +1,30 @@
1
+ import { safeRm } from '../fs/safe-rm.js';
2
+ import { join } from 'pathe';
3
+ import { existsSync } from 'node:fs';
4
+ import { getTmpDir } from './paths.js';
5
+ import { getCacheStatus } from './status.js';
6
+ /**
7
+ * Clear all cache and temporary content from .aix/.tmp/ directory.
8
+ * Also cleans up legacy directories (.aix/backups, .aix/cache, .aix/node_modules).
9
+ */
10
+ export async function clearCache(projectRoot) {
11
+ const aixDir = join(projectRoot, '.aix'), result = { deletedPaths: [], freedBytes: 0 };
12
+ if (!existsSync(aixDir)) {
13
+ return result;
14
+ }
15
+ // Get current size before deletion
16
+ const status = await getCacheStatus(projectRoot);
17
+ result.freedBytes = status.totalSize;
18
+ // Delete entire .tmp directory (preserves skills/)
19
+ const tmpDir = getTmpDir(projectRoot);
20
+ if (existsSync(tmpDir)) {
21
+ await safeRm(tmpDir, { force: true });
22
+ result.deletedPaths.push(tmpDir);
23
+ }
24
+ // Legacy cleanup: remove old top-level directories if they exist
25
+ const legacyDirs = ['backups', 'cache', 'node_modules'], legacyPaths = legacyDirs.map((dir) => join(aixDir, dir)).filter(existsSync);
26
+ await Promise.all(legacyPaths.map((path) => safeRm(path, { force: true })));
27
+ result.deletedPaths.push(...legacyPaths);
28
+ return result;
29
+ }
30
+ //# sourceMappingURL=clear.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clear.js","sourceRoot":"","sources":["../../src/cache/clear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAC1C,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,SAAS,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAO7C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,WAAmB;IACjD,MAAM,MAAM,GAAG,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,EAClC,MAAM,GAAqB,EAAE,YAAY,EAAE,EAAE,EAAE,UAAU,EAAE,CAAC,EAAE,CAAC;IAErE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,OAAO,MAAM,CAAC;IACjB,CAAC;IAED,mCAAmC;IACnC,MAAM,MAAM,GAAG,MAAM,cAAc,CAAC,WAAW,CAAC,CAAC;IAEjD,MAAM,CAAC,UAAU,GAAG,MAAM,CAAC,SAAS,CAAC;IAErC,mDAAmD;IACnD,MAAM,MAAM,GAAG,SAAS,CAAC,WAAW,CAAC,CAAC;IAEtC,IAAI,UAAU,CAAC,MAAM,CAAC,EAAE,CAAC;QACtB,MAAM,MAAM,CAAC,MAAM,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;QACtC,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;IACpC,CAAC;IAED,iEAAiE;IACjE,MAAM,UAAU,GAAG,CAAC,SAAS,EAAE,OAAO,EAAE,cAAc,CAAC,EACjD,WAAW,GAAG,UAAU,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;IAElF,MAAM,OAAO,CAAC,GAAG,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,MAAM,CAAC,IAAI,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC;IAC5E,MAAM,CAAC,YAAY,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;IAEzC,OAAO,MAAM,CAAC;AACjB,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { getAixDir, getTmpDir, getBackupsDir, getCacheDir, getRulesCacheDir, getPromptsCacheDir, getSkillsDir, getNpmCacheDir, getImportedDir, getImportedEditorDir, getImportedRulesDir, getImportedPromptsDir, getImportStagingDir, getImportBackupDir, } from './paths.js';
2
+ export { getCacheStatus, type CacheStatus, type CacheEntry, type CacheCategory } from './status.js';
3
+ export { clearCache, type ClearCacheResult } from './clear.js';
4
+ export { cleanStaleCache, type CleanupOptions, type CleanupResult } from './cleanup.js';
5
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACJ,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAE,KAAK,WAAW,EAAE,KAAK,UAAU,EAAE,KAAK,aAAa,EAAE,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,UAAU,EAAE,KAAK,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAAE,KAAK,cAAc,EAAE,KAAK,aAAa,EAAE,MAAM,cAAc,CAAC"}
@@ -0,0 +1,5 @@
1
+ export { getAixDir, getTmpDir, getBackupsDir, getCacheDir, getRulesCacheDir, getPromptsCacheDir, getSkillsDir, getNpmCacheDir, getImportedDir, getImportedEditorDir, getImportedRulesDir, getImportedPromptsDir, getImportStagingDir, getImportBackupDir, } from './paths.js';
2
+ export { getCacheStatus } from './status.js';
3
+ export { clearCache } from './clear.js';
4
+ export { cleanStaleCache } from './cleanup.js';
5
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cache/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACJ,SAAS,EACT,SAAS,EACT,aAAa,EACb,WAAW,EACX,gBAAgB,EAChB,kBAAkB,EAClB,YAAY,EACZ,cAAc,EACd,cAAc,EACd,oBAAoB,EACpB,mBAAmB,EACnB,qBAAqB,EACrB,mBAAmB,EACnB,kBAAkB,GACpB,MAAM,YAAY,CAAC;AACpB,OAAO,EAAE,cAAc,EAAyD,MAAM,aAAa,CAAC;AACpG,OAAO,EAAE,UAAU,EAAyB,MAAM,YAAY,CAAC;AAC/D,OAAO,EAAE,eAAe,EAA2C,MAAM,cAAc,CAAC"}
@@ -0,0 +1,57 @@
1
+ /**
2
+ * Get the .aix directory path for a project.
3
+ */
4
+ export declare function getAixDir(projectRoot: string): string;
5
+ /**
6
+ * Get the .aix/.tmp directory path (all temporary/cache content).
7
+ */
8
+ export declare function getTmpDir(projectRoot: string): string;
9
+ /**
10
+ * Get the backups directory path.
11
+ */
12
+ export declare function getBackupsDir(projectRoot: string): string;
13
+ /**
14
+ * Get the cache directory path (git-sourced rules/prompts).
15
+ */
16
+ export declare function getCacheDir(projectRoot: string): string;
17
+ /**
18
+ * Get the rules cache directory path.
19
+ */
20
+ export declare function getRulesCacheDir(projectRoot: string): string;
21
+ /**
22
+ * Get the prompts cache directory path.
23
+ */
24
+ export declare function getPromptsCacheDir(projectRoot: string): string;
25
+ /**
26
+ * Get the npm cache directory path (for standalone ai.json).
27
+ */
28
+ export declare function getNpmCacheDir(projectRoot: string): string;
29
+ /**
30
+ * Get the skills directory path (persistent, user-managed).
31
+ */
32
+ export declare function getSkillsDir(projectRoot: string): string;
33
+ /**
34
+ * Get the imported content directory path (persistent, user-managed).
35
+ */
36
+ export declare function getImportedDir(projectRoot: string): string;
37
+ /**
38
+ * Get the imported content directory for a specific editor.
39
+ */
40
+ export declare function getImportedEditorDir(projectRoot: string, editor: string): string;
41
+ /**
42
+ * Get the imported rules directory for a specific editor.
43
+ */
44
+ export declare function getImportedRulesDir(projectRoot: string, editor: string): string;
45
+ /**
46
+ * Get the imported prompts directory for a specific editor.
47
+ */
48
+ export declare function getImportedPromptsDir(projectRoot: string, editor: string): string;
49
+ /**
50
+ * Get the import staging directory (temporary, used during atomic import).
51
+ */
52
+ export declare function getImportStagingDir(projectRoot: string): string;
53
+ /**
54
+ * Get the import backup directory (temporary, used during atomic import rollback).
55
+ */
56
+ export declare function getImportBackupDir(projectRoot: string): string;
57
+ //# sourceMappingURL=paths.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.d.ts","sourceRoot":"","sources":["../../src/cache/paths.ts"],"names":[],"mappings":"AAEA;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,SAAS,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAErD;AAED;;GAEG;AACH,wBAAgB,aAAa,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEzD;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAEvD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE5D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,YAAY,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAExD;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE1D;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEhF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAE/E;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAEjF;AAED;;GAEG;AACH,wBAAgB,mBAAmB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,kBAAkB,CAAC,WAAW,EAAE,MAAM,GAAG,MAAM,CAE9D"}
@@ -0,0 +1,86 @@
1
+ import { join } from 'pathe';
2
+ /**
3
+ * Get the .aix directory path for a project.
4
+ */
5
+ export function getAixDir(projectRoot) {
6
+ return join(projectRoot, '.aix');
7
+ }
8
+ /**
9
+ * Get the .aix/.tmp directory path (all temporary/cache content).
10
+ */
11
+ export function getTmpDir(projectRoot) {
12
+ return join(projectRoot, '.aix', '.tmp');
13
+ }
14
+ /**
15
+ * Get the backups directory path.
16
+ */
17
+ export function getBackupsDir(projectRoot) {
18
+ return join(projectRoot, '.aix', '.tmp', 'backups');
19
+ }
20
+ /**
21
+ * Get the cache directory path (git-sourced rules/prompts).
22
+ */
23
+ export function getCacheDir(projectRoot) {
24
+ return join(projectRoot, '.aix', '.tmp', 'cache');
25
+ }
26
+ /**
27
+ * Get the rules cache directory path.
28
+ */
29
+ export function getRulesCacheDir(projectRoot) {
30
+ return join(projectRoot, '.aix', '.tmp', 'cache', 'rules');
31
+ }
32
+ /**
33
+ * Get the prompts cache directory path.
34
+ */
35
+ export function getPromptsCacheDir(projectRoot) {
36
+ return join(projectRoot, '.aix', '.tmp', 'cache', 'prompts');
37
+ }
38
+ /**
39
+ * Get the npm cache directory path (for standalone ai.json).
40
+ */
41
+ export function getNpmCacheDir(projectRoot) {
42
+ return join(projectRoot, '.aix', '.tmp', 'node_modules');
43
+ }
44
+ /**
45
+ * Get the skills directory path (persistent, user-managed).
46
+ */
47
+ export function getSkillsDir(projectRoot) {
48
+ return join(projectRoot, '.aix', 'skills');
49
+ }
50
+ /**
51
+ * Get the imported content directory path (persistent, user-managed).
52
+ */
53
+ export function getImportedDir(projectRoot) {
54
+ return join(projectRoot, '.aix', 'imported');
55
+ }
56
+ /**
57
+ * Get the imported content directory for a specific editor.
58
+ */
59
+ export function getImportedEditorDir(projectRoot, editor) {
60
+ return join(projectRoot, '.aix', 'imported', editor);
61
+ }
62
+ /**
63
+ * Get the imported rules directory for a specific editor.
64
+ */
65
+ export function getImportedRulesDir(projectRoot, editor) {
66
+ return join(projectRoot, '.aix', 'imported', editor, 'rules');
67
+ }
68
+ /**
69
+ * Get the imported prompts directory for a specific editor.
70
+ */
71
+ export function getImportedPromptsDir(projectRoot, editor) {
72
+ return join(projectRoot, '.aix', 'imported', editor, 'prompts');
73
+ }
74
+ /**
75
+ * Get the import staging directory (temporary, used during atomic import).
76
+ */
77
+ export function getImportStagingDir(projectRoot) {
78
+ return join(projectRoot, '.aix', '.tmp', 'import-staging');
79
+ }
80
+ /**
81
+ * Get the import backup directory (temporary, used during atomic import rollback).
82
+ */
83
+ export function getImportBackupDir(projectRoot) {
84
+ return join(projectRoot, '.aix', '.tmp', 'import-backup');
85
+ }
86
+ //# sourceMappingURL=paths.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"paths.js","sourceRoot":"","sources":["../../src/cache/paths.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAE7B;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC1C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,SAAS,CAAC,WAAmB;IAC1C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC;AAC5C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,WAAmB;IAC9C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACvD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,WAAW,CAAC,WAAmB;IAC5C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACrD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,WAAmB;IACjD,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACnD,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,cAAc,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,YAAY,CAAC,WAAmB;IAC7C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,QAAQ,CAAC,CAAC;AAC9C,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,cAAc,CAAC,WAAmB;IAC/C,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,CAAC,CAAC;AAChD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,oBAAoB,CAAC,WAAmB,EAAE,MAAc;IACrE,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC;AACxD,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB,EAAE,MAAc;IACpE,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;AACjE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,qBAAqB,CAAC,WAAmB,EAAE,MAAc;IACtE,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;AACnE,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,mBAAmB,CAAC,WAAmB;IACpD,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,gBAAgB,CAAC,CAAC;AAC9D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,kBAAkB,CAAC,WAAmB;IACnD,OAAO,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,CAAC,CAAC;AAC7D,CAAC"}
@@ -0,0 +1,21 @@
1
+ export interface CacheEntry {
2
+ path: string;
3
+ size: number;
4
+ modifiedAt: Date;
5
+ }
6
+ export interface CacheCategory {
7
+ size: number;
8
+ count: number;
9
+ entries: CacheEntry[];
10
+ }
11
+ export interface CacheStatus {
12
+ totalSize: number;
13
+ backups: CacheCategory;
14
+ gitCache: CacheCategory;
15
+ npmCache: CacheCategory;
16
+ }
17
+ /**
18
+ * Get the current cache status for a project.
19
+ */
20
+ export declare function getCacheStatus(projectRoot: string): Promise<CacheStatus>;
21
+ //# sourceMappingURL=status.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.d.ts","sourceRoot":"","sources":["../../src/cache/status.ts"],"names":[],"mappings":"AAKA,MAAM,WAAW,UAAU;IACxB,IAAI,EAAE,MAAM,CAAC;IACb,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,IAAI,CAAC;CACnB;AAED,MAAM,WAAW,aAAa;IAC3B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;IACd,OAAO,EAAE,UAAU,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IACzB,SAAS,EAAE,MAAM,CAAC;IAClB,OAAO,EAAE,aAAa,CAAC;IACvB,QAAQ,EAAE,aAAa,CAAC;IACxB,QAAQ,EAAE,aAAa,CAAC;CAC1B;AAED;;GAEG;AACH,wBAAsB,cAAc,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CA0B9E"}
@@ -0,0 +1,67 @@
1
+ import { readdir, stat } from 'node:fs/promises';
2
+ import { join } from 'pathe';
3
+ import { existsSync } from 'node:fs';
4
+ import { getBackupsDir, getCacheDir, getNpmCacheDir } from './paths.js';
5
+ /**
6
+ * Get the current cache status for a project.
7
+ */
8
+ export async function getCacheStatus(projectRoot) {
9
+ // Check both new (.tmp/) and legacy paths
10
+ const [backups, gitCache, npmCache] = await Promise.all([
11
+ scanDirectory(getBackupsDir(projectRoot)),
12
+ scanDirectory(getCacheDir(projectRoot)),
13
+ scanDirectory(getNpmCacheDir(projectRoot)),
14
+ ]);
15
+ // Also check legacy paths (for migration)
16
+ const [legacyBackups, legacyGitCache, legacyNpmCache] = await Promise.all([
17
+ scanDirectory(join(projectRoot, '.aix', 'backups')),
18
+ scanDirectory(join(projectRoot, '.aix', 'cache')),
19
+ scanDirectory(join(projectRoot, '.aix', 'node_modules')),
20
+ ]);
21
+ // Merge new and legacy results
22
+ const mergedBackups = mergeCategories(backups, legacyBackups), mergedGitCache = mergeCategories(gitCache, legacyGitCache), mergedNpmCache = mergeCategories(npmCache, legacyNpmCache);
23
+ return {
24
+ totalSize: mergedBackups.size + mergedGitCache.size + mergedNpmCache.size,
25
+ backups: mergedBackups,
26
+ gitCache: mergedGitCache,
27
+ npmCache: mergedNpmCache,
28
+ };
29
+ }
30
+ function mergeCategories(a, b) {
31
+ return {
32
+ size: a.size + b.size,
33
+ count: a.count + b.count,
34
+ entries: [...a.entries, ...b.entries],
35
+ };
36
+ }
37
+ async function scanDirectory(dir) {
38
+ if (!existsSync(dir)) {
39
+ return { size: 0, count: 0, entries: [] };
40
+ }
41
+ const entries = [];
42
+ let totalSize = 0;
43
+ async function scan(currentDir) {
44
+ const items = await readdir(currentDir, { withFileTypes: true });
45
+ // Sequential scan is required to accumulate totalSize correctly
46
+ for (const item of items) {
47
+ const fullPath = join(currentDir, item.name);
48
+ if (item.isDirectory()) {
49
+ // eslint-disable-next-line no-await-in-loop -- Recursive directory traversal
50
+ await scan(fullPath);
51
+ }
52
+ else {
53
+ // eslint-disable-next-line no-await-in-loop -- Sequential accumulation of totalSize
54
+ const stats = await stat(fullPath);
55
+ totalSize += stats.size;
56
+ entries.push({
57
+ path: fullPath,
58
+ size: stats.size,
59
+ modifiedAt: stats.mtime,
60
+ });
61
+ }
62
+ }
63
+ }
64
+ await scan(dir);
65
+ return { size: totalSize, count: entries.length, entries };
66
+ }
67
+ //# sourceMappingURL=status.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"status.js","sourceRoot":"","sources":["../../src/cache/status.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,14 @@
1
+ export interface DiscoveryResult {
2
+ path: string;
3
+ content: string;
4
+ source: 'file' | 'package.json';
5
+ /** Set when ai.json takes precedence but package.json also has an ai field */
6
+ packageJsonAlsoHasAi?: boolean;
7
+ /** Path to ai.local.json if it exists */
8
+ localPath?: string;
9
+ /** Content of ai.local.json if it exists */
10
+ localContent?: string;
11
+ }
12
+ export declare function discoverConfig(startDir?: string, explicitPath?: string): Promise<DiscoveryResult | undefined>;
13
+ export declare function parseConfigContent(content: string): unknown;
14
+ //# sourceMappingURL=discovery.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.d.ts","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"AAIA,MAAM,WAAW,eAAe;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,GAAG,cAAc,CAAC;IAChC,8EAA8E;IAC9E,oBAAoB,CAAC,EAAE,OAAO,CAAC;IAC/B,yCAAyC;IACzC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,4CAA4C;IAC5C,YAAY,CAAC,EAAE,MAAM,CAAC;CACxB;AAED,wBAAsB,cAAc,CACjC,QAAQ,GAAE,MAAsB,EAChC,YAAY,CAAC,EAAE,MAAM,GACrB,OAAO,CAAC,eAAe,GAAG,SAAS,CAAC,CAqGtC;AAED,wBAAgB,kBAAkB,CAAC,OAAO,EAAE,MAAM,GAAG,OAAO,CAU3D"}
@@ -0,0 +1,96 @@
1
+ import { resolve, dirname, join } from 'pathe';
2
+ import { existsSync, readFileSync } from 'node:fs';
3
+ import { parseJsonc } from '@a1st/aix-schema';
4
+ export async function discoverConfig(startDir = process.cwd(), explicitPath) {
5
+ if (explicitPath) {
6
+ const absolutePath = resolve(startDir, explicitPath);
7
+ if (existsSync(absolutePath)) {
8
+ return {
9
+ path: absolutePath,
10
+ content: readFileSync(absolutePath, 'utf-8'),
11
+ source: 'file',
12
+ };
13
+ }
14
+ return undefined;
15
+ }
16
+ let currentDir = resolve(startDir);
17
+ const root = resolve('/');
18
+ while (true) {
19
+ const aiJsonPath = join(currentDir, 'ai.json'), packageJsonPath = join(currentDir, 'package.json'), hasAiJson = existsSync(aiJsonPath);
20
+ // Check if package.json has an ai field (for warning detection)
21
+ let packageJsonHasAi = false;
22
+ let packageJson;
23
+ if (existsSync(packageJsonPath)) {
24
+ packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));
25
+ packageJsonHasAi = packageJson.ai !== undefined;
26
+ }
27
+ // Check for ai.local.json
28
+ const localJsonPath = join(currentDir, 'ai.local.json'), hasLocalJson = existsSync(localJsonPath);
29
+ // ai.json takes precedence
30
+ if (hasAiJson) {
31
+ const result = {
32
+ path: aiJsonPath,
33
+ content: readFileSync(aiJsonPath, 'utf-8'),
34
+ source: 'file',
35
+ packageJsonAlsoHasAi: packageJsonHasAi,
36
+ };
37
+ if (hasLocalJson) {
38
+ result.localPath = localJsonPath;
39
+ result.localContent = readFileSync(localJsonPath, 'utf-8');
40
+ }
41
+ return result;
42
+ }
43
+ // Fall back to package.json ai field
44
+ if (packageJson?.ai) {
45
+ let result;
46
+ if (typeof packageJson.ai === 'string') {
47
+ const referencedPath = resolve(currentDir, packageJson.ai);
48
+ if (existsSync(referencedPath)) {
49
+ result = {
50
+ path: referencedPath,
51
+ content: readFileSync(referencedPath, 'utf-8'),
52
+ source: 'file',
53
+ };
54
+ }
55
+ }
56
+ else {
57
+ result = {
58
+ path: packageJsonPath,
59
+ content: JSON.stringify(packageJson.ai),
60
+ source: 'package.json',
61
+ };
62
+ }
63
+ if (result) {
64
+ if (hasLocalJson) {
65
+ result.localPath = localJsonPath;
66
+ result.localContent = readFileSync(localJsonPath, 'utf-8');
67
+ }
68
+ return result;
69
+ }
70
+ }
71
+ // ai.local.json alone (no ai.json, no package.json ai field) - use empty base config
72
+ if (hasLocalJson) {
73
+ return {
74
+ path: localJsonPath, // Use local path as the "path" for context
75
+ content: '{}', // Empty base config
76
+ source: 'file',
77
+ localPath: localJsonPath,
78
+ localContent: readFileSync(localJsonPath, 'utf-8'),
79
+ };
80
+ }
81
+ if (currentDir === root) {
82
+ break;
83
+ }
84
+ currentDir = dirname(currentDir);
85
+ }
86
+ return undefined;
87
+ }
88
+ export function parseConfigContent(content) {
89
+ const result = parseJsonc(content);
90
+ if (result.errors.length > 0) {
91
+ const firstError = result.errors[0];
92
+ throw new Error(`Parse error at offset ${firstError?.offset}: ${firstError?.message}`);
93
+ }
94
+ return result.data;
95
+ }
96
+ //# sourceMappingURL=discovery.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"discovery.js","sourceRoot":"","sources":["../src/discovery.ts"],"names":[],"mappings":"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"}