@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,20 @@
1
+ import { mkdir } from 'node:fs/promises';
2
+ import { getNpmCacheDir } from '../cache/paths.js';
3
+ import { safeRm } from '../fs/safe-rm.js';
4
+ /**
5
+ * Ensure the npm cache directory exists.
6
+ */
7
+ export async function ensureNpmCacheDir(projectRoot) {
8
+ const path = getNpmCacheDir(projectRoot);
9
+ await mkdir(path, { recursive: true });
10
+ return path;
11
+ }
12
+ /**
13
+ * Clear the npm skills cache.
14
+ * Note: Git skills cache is managed by giget and not cleared here.
15
+ */
16
+ export async function clearNpmCache(projectRoot) {
17
+ const cacheDir = getNpmCacheDir(projectRoot);
18
+ await safeRm(cacheDir, { force: true });
19
+ }
20
+ //# sourceMappingURL=cache.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cache.js","sourceRoot":"","sources":["../../src/skills/cache.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,EAAE,MAAM,kBAAkB,CAAC;AACzC,OAAO,EAAE,cAAc,EAAE,MAAM,mBAAmB,CAAC;AACnD,OAAO,EAAE,MAAM,EAAE,MAAM,kBAAkB,CAAC;AAE1C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,WAAmB;IACxD,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAEzC,MAAM,KAAK,CAAC,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IACvC,OAAO,IAAI,CAAC;AACf,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,WAAmB;IACpD,MAAM,QAAQ,GAAG,cAAc,CAAC,WAAW,CAAC,CAAC;IAE7C,MAAM,MAAM,CAAC,QAAQ,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { parseSkillMd } from './parser.js';
2
+ export { parseSkillRef, type LocalRef, type GitRef, type NpmRef, type SkillRef, } from './reference-parser.js';
3
+ export { resolveLocal } from './resolvers/local.js';
4
+ export { resolveGit } from './resolvers/git.js';
5
+ export { resolveNpm } from './resolvers/npm.js';
6
+ export { resolveSkill, resolveSkillRef, resolveAllSkills, type SkillResolveOptions } from './resolve.js';
7
+ export { validateSkill, type ValidationResult } from './validate.js';
8
+ export { ensureNpmCacheDir, clearNpmCache } from './cache.js';
9
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACJ,aAAa,EACb,KAAK,QAAQ,EACb,KAAK,MAAM,EACX,KAAK,MAAM,EACX,KAAK,QAAQ,GACf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAAE,KAAK,mBAAmB,EAAE,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,aAAa,EAAE,KAAK,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,9 @@
1
+ export { parseSkillMd } from './parser.js';
2
+ export { parseSkillRef, } from './reference-parser.js';
3
+ export { resolveLocal } from './resolvers/local.js';
4
+ export { resolveGit } from './resolvers/git.js';
5
+ export { resolveNpm } from './resolvers/npm.js';
6
+ export { resolveSkill, resolveSkillRef, resolveAllSkills } from './resolve.js';
7
+ export { validateSkill } from './validate.js';
8
+ export { ensureNpmCacheDir, clearNpmCache } from './cache.js';
9
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/skills/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAC3C,OAAO,EACJ,aAAa,GAKf,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,YAAY,EAAE,eAAe,EAAE,gBAAgB,EAA4B,MAAM,cAAc,CAAC;AACzG,OAAO,EAAE,aAAa,EAAyB,MAAM,eAAe,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC"}
@@ -0,0 +1,6 @@
1
+ import { type ParsedSkill } from '@a1st/aix-schema';
2
+ /**
3
+ * Parse a SKILL.md file from a skill directory
4
+ */
5
+ export declare function parseSkillMd(skillPath: string, source: ParsedSkill['source']): Promise<ParsedSkill>;
6
+ //# sourceMappingURL=parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAGA,OAAO,EAA0B,KAAK,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAI5E;;GAEG;AACH,wBAAsB,YAAY,CAC/B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,WAAW,CAAC,QAAQ,CAAC,GAC7B,OAAO,CAAC,WAAW,CAAC,CA0BtB"}
@@ -0,0 +1,28 @@
1
+ import { readFile } from 'node:fs/promises';
2
+ import { join } from 'pathe';
3
+ import { parse as parseYaml } from 'yaml';
4
+ import { skillFrontmatterSchema } from '@a1st/aix-schema';
5
+ const FRONTMATTER_REGEX = /^---\n([\s\S]*?)\n---\n([\s\S]*)$/;
6
+ /**
7
+ * Parse a SKILL.md file from a skill directory
8
+ */
9
+ export async function parseSkillMd(skillPath, source) {
10
+ const skillMdPath = join(skillPath, 'SKILL.md');
11
+ const content = await readFile(skillMdPath, 'utf-8');
12
+ const match = content.match(FRONTMATTER_REGEX);
13
+ if (!match) {
14
+ throw new Error(`Invalid SKILL.md format: missing frontmatter in ${skillMdPath}`);
15
+ }
16
+ const yamlContent = match[1], body = match[2];
17
+ if (!yamlContent || body === undefined) {
18
+ throw new Error(`Invalid SKILL.md format: could not parse frontmatter in ${skillMdPath}`);
19
+ }
20
+ const rawFrontmatter = parseYaml(yamlContent), frontmatter = skillFrontmatterSchema.parse(rawFrontmatter);
21
+ return {
22
+ frontmatter,
23
+ body: body.trim(),
24
+ basePath: skillPath,
25
+ source,
26
+ };
27
+ }
28
+ //# sourceMappingURL=parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"parser.js","sourceRoot":"","sources":["../../src/skills/parser.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAC5C,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,KAAK,IAAI,SAAS,EAAE,MAAM,MAAM,CAAC;AAC1C,OAAO,EAAE,sBAAsB,EAAoB,MAAM,kBAAkB,CAAC;AAE5E,MAAM,iBAAiB,GAAG,mCAAmC,CAAC;AAE9D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC/B,SAAiB,EACjB,MAA6B;IAE7B,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,EAAE,UAAU,CAAC,CAAC;IAChD,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,CAAC;IAErD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,iBAAiB,CAAC,CAAC;IAE/C,IAAI,CAAC,KAAK,EAAE,CAAC;QACV,MAAM,IAAI,KAAK,CAAC,mDAAmD,WAAW,EAAE,CAAC,CAAC;IACrF,CAAC;IAED,MAAM,WAAW,GAAG,KAAK,CAAC,CAAC,CAAC,EACtB,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEtB,IAAI,CAAC,WAAW,IAAI,IAAI,KAAK,SAAS,EAAE,CAAC;QACtC,MAAM,IAAI,KAAK,CAAC,2DAA2D,WAAW,EAAE,CAAC,CAAC;IAC7F,CAAC;IAED,MAAM,cAAc,GAAG,SAAS,CAAC,WAAW,CAAY,EAClD,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC;IAEjE,OAAO;QACJ,WAAW;QACX,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,QAAQ,EAAE,SAAS;QACnB,MAAM;KACR,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ export type LocalRef = {
2
+ type: 'local';
3
+ path: string;
4
+ };
5
+ export type GitRef = {
6
+ type: 'git';
7
+ url: string;
8
+ ref?: string;
9
+ path?: string;
10
+ };
11
+ export type NpmRef = {
12
+ type: 'npm';
13
+ packageName: string;
14
+ path?: string;
15
+ version?: string;
16
+ };
17
+ export type SkillRef = LocalRef | GitRef | NpmRef;
18
+ /**
19
+ * Parse a skill reference into a structured object.
20
+ * Supports local paths, git shorthand, git objects, and npm package names.
21
+ */
22
+ export declare function parseSkillRef(name: string, input: unknown): SkillRef;
23
+ //# sourceMappingURL=reference-parser.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-parser.d.ts","sourceRoot":"","sources":["../../src/skills/reference-parser.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,QAAQ,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,CAAC;AACvD,MAAM,MAAM,MAAM,GAAG;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,GAAG,CAAC,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC;AAC/E,MAAM,MAAM,MAAM,GAAG;IAClB,IAAI,EAAE,KAAK,CAAC;IACZ,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,OAAO,CAAC,EAAE,MAAM,CAAC;CACnB,CAAC;AACF,MAAM,MAAM,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,MAAM,CAAC;AA8HlD;;;GAGG;AACH,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,GAAG,QAAQ,CAgEpE"}
@@ -0,0 +1,162 @@
1
+ /**
2
+ * Check if a string looks like an npm package name (without subpath).
3
+ * Matches: aix-skill-*, @scope/aix-skill-*, or any scoped/unscoped package
4
+ */
5
+ function isNpmPackageName(str) {
6
+ // Scoped package: @scope/package (exactly two parts)
7
+ if (str.startsWith('@')) {
8
+ const parts = str.split('/');
9
+ return parts.length === 2;
10
+ }
11
+ // aix-skill- prefix (our convention)
12
+ if (str.startsWith('aix-skill-')) {
13
+ return true;
14
+ }
15
+ // Any other package name (no path separators, no git prefixes)
16
+ return !str.includes('/') && !str.includes(':') && !str.startsWith('.');
17
+ }
18
+ /**
19
+ * Parse npm package reference with optional subpath.
20
+ * Requires file extension to distinguish from plain package names.
21
+ *
22
+ * Examples:
23
+ * - "@scope/pkg/rules/style.md" → { packageName: "@scope/pkg", path: "rules/style.md" }
24
+ * - "pkg/prompts/review.md" → { packageName: "pkg", path: "prompts/review.md" }
25
+ * - "@scope/pkg" → { packageName: "@scope/pkg" } (no subpath)
26
+ */
27
+ function parseNpmWithSubpath(str) {
28
+ // Must have a file extension to be treated as having a subpath
29
+ const hasExtension = /\.[a-z0-9]+$/i.test(str);
30
+ if (str.startsWith('@')) {
31
+ // Scoped: @scope/package or @scope/package/subpath
32
+ const parts = str.split('/');
33
+ if (parts.length < 2) {
34
+ return undefined;
35
+ }
36
+ const packageName = `${parts[0]}/${parts[1]}`;
37
+ if (parts.length === 2) {
38
+ return { packageName };
39
+ }
40
+ // Has subpath - only valid if has extension
41
+ if (!hasExtension) {
42
+ return undefined;
43
+ }
44
+ return { packageName, path: parts.slice(2).join('/') };
45
+ }
46
+ // Unscoped: package or package/subpath
47
+ const slashIdx = str.indexOf('/');
48
+ if (slashIdx === -1) {
49
+ return { packageName: str };
50
+ }
51
+ // Has subpath - only valid if has extension
52
+ if (!hasExtension) {
53
+ return undefined;
54
+ }
55
+ return {
56
+ packageName: str.slice(0, slashIdx),
57
+ path: str.slice(slashIdx + 1),
58
+ };
59
+ }
60
+ /**
61
+ * Parse git shorthand format: github:user/repo/path#ref or github:user/repo#ref:path
62
+ * Supported providers: github, gitlab
63
+ *
64
+ * Two path formats are supported:
65
+ * 1. Path in repo portion: github:user/repo/subdir/path#ref
66
+ * 2. Path after ref: github:user/repo#ref:subdir/path
67
+ */
68
+ function parseGitShorthand(input) {
69
+ // Match: github:user/repo or gitlab:user/repo with optional /path and #ref
70
+ const match = input.match(/^(github|gitlab):([^#]+)(?:#(.+))?$/);
71
+ if (!match) {
72
+ return undefined;
73
+ }
74
+ const [, provider, repoPath, refAndPath] = match;
75
+ // Split repo path: user/repo/optional/subpath
76
+ const parts = repoPath?.split('/') ?? [];
77
+ if (parts.length < 2) {
78
+ return undefined;
79
+ }
80
+ const user = parts[0], repo = parts[1], subpathFromRepo = parts.length > 2 ? parts.slice(2).join('/') : undefined;
81
+ // Parse ref and path - supports both #ref and #ref:path formats
82
+ let ref, subpathFromRef;
83
+ if (refAndPath) {
84
+ const colonIdx = refAndPath.indexOf(':');
85
+ if (colonIdx !== -1) {
86
+ // Format: #ref:path
87
+ ref = refAndPath.slice(0, colonIdx);
88
+ subpathFromRef = refAndPath.slice(colonIdx + 1);
89
+ }
90
+ else {
91
+ // Format: #ref (no path)
92
+ ref = refAndPath;
93
+ }
94
+ }
95
+ // Use path from ref portion if present, otherwise from repo portion
96
+ const path = subpathFromRef ?? subpathFromRepo;
97
+ return {
98
+ type: 'git',
99
+ url: `https://${provider}.com/${user}/${repo}`,
100
+ ref,
101
+ path,
102
+ };
103
+ }
104
+ /**
105
+ * Parse a skill reference into a structured object.
106
+ * Supports local paths, git shorthand, git objects, and npm package names.
107
+ */
108
+ export function parseSkillRef(name, input) {
109
+ // Handle false/disabled skills
110
+ if (input === false) {
111
+ throw new Error(`Skill "${name}" is disabled`);
112
+ }
113
+ if (typeof input === 'string') {
114
+ // Local path
115
+ if (input.startsWith('./') || input.startsWith('/') || input.startsWith('../')) {
116
+ return { type: 'local', path: input };
117
+ }
118
+ // Git shorthand (github:user/repo, gitlab:user/repo)
119
+ const gitRef = parseGitShorthand(input);
120
+ if (gitRef) {
121
+ return gitRef;
122
+ }
123
+ // NPM package (possibly with subpath)
124
+ const npmParsed = parseNpmWithSubpath(input);
125
+ if (npmParsed &&
126
+ (isNpmPackageName(npmParsed.packageName) || npmParsed.packageName.startsWith('@'))) {
127
+ return { type: 'npm', ...npmParsed };
128
+ }
129
+ throw new Error(`Cannot determine skill reference type for "${name}": ${input}`);
130
+ }
131
+ if (typeof input === 'object' && input !== null) {
132
+ const obj = input;
133
+ // Check git first (git objects may also have a path property for subdirectory)
134
+ if ('git' in obj && typeof obj.git === 'string') {
135
+ return {
136
+ type: 'git',
137
+ url: obj.git,
138
+ ref: typeof obj.ref === 'string' ? obj.ref : undefined,
139
+ path: typeof obj.path === 'string' ? obj.path : undefined,
140
+ };
141
+ }
142
+ // NPM package (check before path since npm objects may also have a path property)
143
+ if ('npm' in obj && typeof obj.npm === 'string') {
144
+ return {
145
+ type: 'npm',
146
+ packageName: obj.npm,
147
+ path: typeof obj.path === 'string' ? obj.path : undefined,
148
+ version: typeof obj.version === 'string' ? obj.version : undefined,
149
+ };
150
+ }
151
+ // Local path (only if no git or npm property)
152
+ if ('path' in obj && typeof obj.path === 'string') {
153
+ return { type: 'local', path: obj.path };
154
+ }
155
+ // Handle source wrapper object
156
+ if ('source' in obj) {
157
+ return parseSkillRef(name, obj.source);
158
+ }
159
+ }
160
+ throw new Error(`Invalid skill reference for "${name}": ${JSON.stringify(input)}`);
161
+ }
162
+ //# sourceMappingURL=reference-parser.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reference-parser.js","sourceRoot":"","sources":["../../src/skills/reference-parser.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,21 @@
1
+ import type { ParsedSkill } from '@a1st/aix-schema';
2
+ import { type SkillRef } from './reference-parser.js';
3
+ export interface SkillResolveOptions {
4
+ /** Base directory for resolving relative paths */
5
+ baseDir: string;
6
+ /** Project root for npm resolution */
7
+ projectRoot?: string;
8
+ }
9
+ /**
10
+ * Resolve a skill reference to a parsed skill
11
+ */
12
+ export declare function resolveSkill(name: string, ref: unknown, options: SkillResolveOptions): Promise<ParsedSkill>;
13
+ /**
14
+ * Resolve a parsed skill reference
15
+ */
16
+ export declare function resolveSkillRef(ref: SkillRef, baseDir: string, projectRoot: string): Promise<ParsedSkill>;
17
+ /**
18
+ * Resolve all skills from a config's skills map
19
+ */
20
+ export declare function resolveAllSkills(skills: Record<string, unknown>, options: SkillResolveOptions): Promise<Map<string, ParsedSkill>>;
21
+ //# sourceMappingURL=resolve.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.d.ts","sourceRoot":"","sources":["../../src/skills/resolve.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AACpD,OAAO,EAAiB,KAAK,QAAQ,EAAE,MAAM,uBAAuB,CAAC;AAKrE,MAAM,WAAW,mBAAmB;IACjC,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,sCAAsC;IACtC,WAAW,CAAC,EAAE,MAAM,CAAC;CACvB;AAED;;GAEG;AACH,wBAAsB,YAAY,CAC/B,IAAI,EAAE,MAAM,EACZ,GAAG,EAAE,OAAO,EACZ,OAAO,EAAE,mBAAmB,GAC5B,OAAO,CAAC,WAAW,CAAC,CAKtB;AAED;;GAEG;AACH,wBAAsB,eAAe,CAClC,GAAG,EAAE,QAAQ,EACb,OAAO,EAAE,MAAM,EACf,WAAW,EAAE,MAAM,GACnB,OAAO,CAAC,WAAW,CAAC,CAStB;AAED;;GAEG;AACH,wBAAsB,gBAAgB,CACnC,MAAM,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC/B,OAAO,EAAE,mBAAmB,GAC5B,OAAO,CAAC,GAAG,CAAC,MAAM,EAAE,WAAW,CAAC,CAAC,CAoBnC"}
@@ -0,0 +1,43 @@
1
+ import pMap from 'p-map';
2
+ import { parseSkillRef } from './reference-parser.js';
3
+ import { resolveLocal } from './resolvers/local.js';
4
+ import { resolveGit } from './resolvers/git.js';
5
+ import { resolveNpm } from './resolvers/npm.js';
6
+ /**
7
+ * Resolve a skill reference to a parsed skill
8
+ */
9
+ export async function resolveSkill(name, ref, options) {
10
+ const parsed = parseSkillRef(name, ref), projectRoot = options.projectRoot ?? options.baseDir;
11
+ return resolveSkillRef(parsed, options.baseDir, projectRoot);
12
+ }
13
+ /**
14
+ * Resolve a parsed skill reference
15
+ */
16
+ export async function resolveSkillRef(ref, baseDir, projectRoot) {
17
+ switch (ref.type) {
18
+ case 'local':
19
+ return resolveLocal(ref, baseDir);
20
+ case 'git':
21
+ return resolveGit(ref);
22
+ case 'npm':
23
+ return resolveNpm(ref, projectRoot);
24
+ }
25
+ }
26
+ /**
27
+ * Resolve all skills from a config's skills map
28
+ */
29
+ export async function resolveAllSkills(skills, options) {
30
+ const entries = Object.entries(skills).filter(([, ref]) => ref !== false);
31
+ const resolved = await pMap(entries, async ([name, ref]) => {
32
+ try {
33
+ const skill = await resolveSkill(name, ref, options);
34
+ return { name, skill };
35
+ }
36
+ catch (error) {
37
+ const message = error instanceof Error ? error.message : String(error);
38
+ throw new Error(`Failed to resolve skill "${name}": ${message}`, { cause: error });
39
+ }
40
+ }, { concurrency: 5 });
41
+ return new Map(resolved.map(({ name, skill }) => [name, skill]));
42
+ }
43
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/skills/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,OAAO,CAAC;AAEzB,OAAO,EAAE,aAAa,EAAiB,MAAM,uBAAuB,CAAC;AACrE,OAAO,EAAE,YAAY,EAAE,MAAM,sBAAsB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAChD,OAAO,EAAE,UAAU,EAAE,MAAM,oBAAoB,CAAC;AAShD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAC/B,IAAY,EACZ,GAAY,EACZ,OAA4B;IAE5B,MAAM,MAAM,GAAG,aAAa,CAAC,IAAI,EAAE,GAAG,CAAC,EACjC,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,OAAO,CAAC,OAAO,CAAC;IAE3D,OAAO,eAAe,CAAC,MAAM,EAAE,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,CAAC;AAChE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CAClC,GAAa,EACb,OAAe,EACf,WAAmB;IAEnB,QAAQ,GAAG,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,OAAO;YACT,OAAO,YAAY,CAAC,GAAG,EAAE,OAAO,CAAC,CAAC;QACrC,KAAK,KAAK;YACP,OAAO,UAAU,CAAC,GAAG,CAAC,CAAC;QAC1B,KAAK,KAAK;YACP,OAAO,UAAU,CAAC,GAAG,EAAE,WAAW,CAAC,CAAC;IACvC,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,gBAAgB,CACnC,MAA+B,EAC/B,OAA4B;IAE5B,MAAM,OAAO,GAAG,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,KAAK,CAAC,CAAC;IAE1E,MAAM,QAAQ,GAAG,MAAM,IAAI,CACxB,OAAO,EACP,KAAK,EAAE,CAAC,IAAI,EAAE,GAAG,CAAC,EAAE,EAAE;QACnB,IAAI,CAAC;YACF,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,IAAI,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;YAErD,OAAO,EAAE,IAAI,EAAE,KAAK,EAAE,CAAC;QAC1B,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACd,MAAM,OAAO,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YAEvE,MAAM,IAAI,KAAK,CAAC,4BAA4B,IAAI,MAAM,OAAO,EAAE,EAAE,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAC;QACtF,CAAC;IACJ,CAAC,EACD,EAAE,WAAW,EAAE,CAAC,EAAE,CACpB,CAAC;IAEF,OAAO,IAAI,GAAG,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;AACpE,CAAC"}
@@ -0,0 +1,8 @@
1
+ import type { GitRef } from '../reference-parser.js';
2
+ import type { ParsedSkill } from '@a1st/aix-schema';
3
+ /**
4
+ * Resolve a skill from a git repository.
5
+ * Uses giget for downloading which handles caching internally.
6
+ */
7
+ export declare function resolveGit(ref: GitRef): Promise<ParsedSkill>;
8
+ //# sourceMappingURL=git.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/git.ts"],"names":[],"mappings":"AAIA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;;GAGG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAgClE"}
@@ -0,0 +1,43 @@
1
+ import { downloadTemplate } from 'giget';
2
+ import { join } from 'pathe';
3
+ import { tmpdir } from 'node:os';
4
+ import { parseSkillMd } from '../parser.js';
5
+ /**
6
+ * Resolve a skill from a git repository.
7
+ * Uses giget for downloading which handles caching internally.
8
+ */
9
+ export async function resolveGit(ref) {
10
+ const cacheKey = createCacheKey(ref), cachePath = join(tmpdir(), 'aix-skills', 'git', cacheKey);
11
+ // Build giget source string
12
+ // giget supports: gh:user/repo, gitlab:user/repo, https://...
13
+ let source = ref.url;
14
+ // Convert https URLs to giget format if needed
15
+ if (source.startsWith('https://github.com/')) {
16
+ source = source.replace('https://github.com/', 'gh:');
17
+ }
18
+ else if (source.startsWith('https://gitlab.com/')) {
19
+ source = source.replace('https://gitlab.com/', 'gitlab:');
20
+ }
21
+ // Add subdirectory path if specified
22
+ if (ref.path) {
23
+ source = `${source}/${ref.path}`;
24
+ }
25
+ // Add ref (branch/tag/commit) if specified
26
+ if (ref.ref) {
27
+ source = `${source}#${ref.ref}`;
28
+ }
29
+ // Download using giget
30
+ await downloadTemplate(source, {
31
+ dir: cachePath,
32
+ force: true,
33
+ });
34
+ return parseSkillMd(cachePath, 'git');
35
+ }
36
+ /**
37
+ * Create a cache key for a git reference
38
+ */
39
+ function createCacheKey(ref) {
40
+ const urlHash = Buffer.from(ref.url).toString('base64url').slice(0, 16), refPart = ref.ref ?? 'default', pathPart = ref.path ? `-${ref.path.replace(/\//g, '-')}` : '';
41
+ return `${urlHash}-${refPart}${pathPart}`;
42
+ }
43
+ //# sourceMappingURL=git.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"git.js","sourceRoot":"","sources":["../../../src/skills/resolvers/git.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,gBAAgB,EAAE,MAAM,OAAO,CAAC;AACzC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AACjC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW;IACzC,MAAM,QAAQ,GAAG,cAAc,CAAC,GAAG,CAAC,EAC9B,SAAS,GAAG,IAAI,CAAC,MAAM,EAAE,EAAE,YAAY,EAAE,KAAK,EAAE,QAAQ,CAAC,CAAC;IAEhE,4BAA4B;IAC5B,8DAA8D;IAC9D,IAAI,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC;IAErB,+CAA+C;IAC/C,IAAI,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QAC5C,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,KAAK,CAAC,CAAC;IACzD,CAAC;SAAM,IAAI,MAAM,CAAC,UAAU,CAAC,qBAAqB,CAAC,EAAE,CAAC;QACnD,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,qBAAqB,EAAE,SAAS,CAAC,CAAC;IAC7D,CAAC;IAED,qCAAqC;IACrC,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;QACZ,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;IACpC,CAAC;IAED,2CAA2C;IAC3C,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;QACX,MAAM,GAAG,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,EAAE,CAAC;IACnC,CAAC;IAED,uBAAuB;IACvB,MAAM,gBAAgB,CAAC,MAAM,EAAE;QAC5B,GAAG,EAAE,SAAS;QACd,KAAK,EAAE,IAAI;KACb,CAAC,CAAC;IAEH,OAAO,YAAY,CAAC,SAAS,EAAE,KAAK,CAAC,CAAC;AACzC,CAAC;AAED;;GAEG;AACH,SAAS,cAAc,CAAC,GAAW;IAChC,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,WAAW,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,EACjE,OAAO,GAAG,GAAG,CAAC,GAAG,IAAI,SAAS,EAC9B,QAAQ,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;IAEpE,OAAO,GAAG,OAAO,IAAI,OAAO,GAAG,QAAQ,EAAE,CAAC;AAC7C,CAAC"}
@@ -0,0 +1,7 @@
1
+ import type { LocalRef } from '../reference-parser.js';
2
+ import type { ParsedSkill } from '@a1st/aix-schema';
3
+ /**
4
+ * Resolve a skill from a local file path
5
+ */
6
+ export declare function resolveLocal(ref: LocalRef, baseDir: string): Promise<ParsedSkill>;
7
+ //# sourceMappingURL=local.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/local.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,wBAAwB,CAAC;AACvD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD;;GAEG;AACH,wBAAsB,YAAY,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAWvF"}
@@ -0,0 +1,16 @@
1
+ import { stat } from 'node:fs/promises';
2
+ import { resolve } from 'pathe';
3
+ import { parseSkillMd } from '../parser.js';
4
+ /**
5
+ * Resolve a skill from a local file path
6
+ */
7
+ export async function resolveLocal(ref, baseDir) {
8
+ const skillPath = resolve(baseDir, ref.path);
9
+ // Check if path exists and is a directory
10
+ const stats = await stat(skillPath);
11
+ if (!stats.isDirectory()) {
12
+ throw new Error(`Skill path is not a directory: ${skillPath}`);
13
+ }
14
+ return parseSkillMd(skillPath, 'local');
15
+ }
16
+ //# sourceMappingURL=local.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"local.js","sourceRoot":"","sources":["../../../src/skills/resolvers/local.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,kBAAkB,CAAC;AACxC,OAAO,EAAE,OAAO,EAAE,MAAM,OAAO,CAAC;AAChC,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAI5C;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,GAAa,EAAE,OAAe;IAC9D,MAAM,SAAS,GAAG,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,IAAI,CAAC,CAAC;IAE7C,0CAA0C;IAC1C,MAAM,KAAK,GAAG,MAAM,IAAI,CAAC,SAAS,CAAC,CAAC;IAEpC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,kCAAkC,SAAS,EAAE,CAAC,CAAC;IAClE,CAAC;IAED,OAAO,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,CAAC;AAC3C,CAAC"}
@@ -0,0 +1,12 @@
1
+ import type { NpmRef } from '../reference-parser.js';
2
+ import type { ParsedSkill } from '@a1st/aix-schema';
3
+ /**
4
+ * Resolve an npm skill package.
5
+ * Skills are directories containing SKILL.md and supporting files.
6
+ *
7
+ * Resolution modes:
8
+ * - No version: Resolve from project's node_modules only (error if not found)
9
+ * - With version: Auto-install to .aix/.tmp/node_modules cache
10
+ */
11
+ export declare function resolveNpm(ref: NpmRef, projectRoot: string): Promise<ParsedSkill>;
12
+ //# sourceMappingURL=npm.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.d.ts","sourceRoot":"","sources":["../../../src/skills/resolvers/npm.ts"],"names":[],"mappings":"AAGA,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AACrD,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAGpD;;;;;;;GAOG;AACH,wBAAsB,UAAU,CAAC,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,CAAC,CAmBvF"}
@@ -0,0 +1,28 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { join } from 'pathe';
3
+ import { parseSkillMd } from '../parser.js';
4
+ import { resolveNpmPath } from '../../npm/resolve.js';
5
+ /**
6
+ * Resolve an npm skill package.
7
+ * Skills are directories containing SKILL.md and supporting files.
8
+ *
9
+ * Resolution modes:
10
+ * - No version: Resolve from project's node_modules only (error if not found)
11
+ * - With version: Auto-install to .aix/.tmp/node_modules cache
12
+ */
13
+ export async function resolveNpm(ref, projectRoot) {
14
+ const skillDir = await resolveNpmPath({
15
+ packageName: ref.packageName,
16
+ subpath: ref.path,
17
+ version: ref.version,
18
+ projectRoot,
19
+ });
20
+ // Verify SKILL.md exists in the resolved directory
21
+ const skillMdPath = join(skillDir, 'SKILL.md');
22
+ if (!existsSync(skillMdPath)) {
23
+ throw new Error(`SKILL.md not found in ${skillDir}. ` +
24
+ `Ensure the package exports a skill directory at "${ref.path || '(root)'}".`);
25
+ }
26
+ return parseSkillMd(skillDir, 'npm');
27
+ }
28
+ //# sourceMappingURL=npm.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"npm.js","sourceRoot":"","sources":["../../../src/skills/resolvers/npm.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,OAAO,CAAC;AAC7B,OAAO,EAAE,YAAY,EAAE,MAAM,cAAc,CAAC;AAG5C,OAAO,EAAE,cAAc,EAAE,MAAM,sBAAsB,CAAC;AAEtD;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAAC,GAAW,EAAE,WAAmB;IAC9D,MAAM,QAAQ,GAAG,MAAM,cAAc,CAAC;QACnC,WAAW,EAAE,GAAG,CAAC,WAAW;QAC5B,OAAO,EAAE,GAAG,CAAC,IAAI;QACjB,OAAO,EAAE,GAAG,CAAC,OAAO;QACpB,WAAW;KACb,CAAC,CAAC;IAEH,mDAAmD;IACnD,MAAM,WAAW,GAAG,IAAI,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAE/C,IAAI,CAAC,UAAU,CAAC,WAAW,CAAC,EAAE,CAAC;QAC5B,MAAM,IAAI,KAAK,CACZ,yBAAyB,QAAQ,IAAI;YAClC,oDAAoD,GAAG,CAAC,IAAI,IAAI,QAAQ,IAAI,CACjF,CAAC;IACL,CAAC;IAED,OAAO,YAAY,CAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;AACxC,CAAC"}
@@ -0,0 +1,11 @@
1
+ import type { ParsedSkill } from '@a1st/aix-schema';
2
+ export interface ValidationResult {
3
+ valid: boolean;
4
+ errors: string[];
5
+ warnings: string[];
6
+ }
7
+ /**
8
+ * Validate a parsed skill for completeness and correctness
9
+ */
10
+ export declare function validateSkill(skill: ParsedSkill): Promise<ValidationResult>;
11
+ //# sourceMappingURL=validate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.d.ts","sourceRoot":"","sources":["../../src/skills/validate.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,WAAW,EAAE,MAAM,kBAAkB,CAAC;AAEpD,MAAM,WAAW,gBAAgB;IAC9B,KAAK,EAAE,OAAO,CAAC;IACf,MAAM,EAAE,MAAM,EAAE,CAAC;IACjB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACrB;AAID;;GAEG;AACH,wBAAsB,aAAa,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,gBAAgB,CAAC,CA8CjF"}
@@ -0,0 +1,43 @@
1
+ import { access, constants, readdir } from 'node:fs/promises';
2
+ import { join, basename } from 'pathe';
3
+ const OPTIONAL_DIRS = ['scripts', 'references', 'assets'];
4
+ /**
5
+ * Validate a parsed skill for completeness and correctness
6
+ */
7
+ export async function validateSkill(skill) {
8
+ const errors = [], warnings = [];
9
+ // Validate SKILL.md exists (should already be parsed, but double-check)
10
+ const skillMdPath = join(skill.basePath, 'SKILL.md');
11
+ try {
12
+ await access(skillMdPath, constants.R_OK);
13
+ }
14
+ catch {
15
+ errors.push('SKILL.md not found');
16
+ }
17
+ // Validate name matches directory name (warning only)
18
+ const dirName = basename(skill.basePath);
19
+ if (dirName && dirName !== skill.frontmatter.name) {
20
+ warnings.push(`Skill name "${skill.frontmatter.name}" does not match directory name "${dirName}"`);
21
+ }
22
+ // Check optional directories exist if present
23
+ const files = await readdir(skill.basePath), dirsToCheck = OPTIONAL_DIRS.filter((dir) => files.includes(dir)), accessResults = await Promise.all(dirsToCheck.map(async (dir) => {
24
+ try {
25
+ await access(join(skill.basePath, dir), constants.R_OK);
26
+ return null;
27
+ }
28
+ catch {
29
+ return `Cannot access ${dir}/ directory`;
30
+ }
31
+ }));
32
+ errors.push(...accessResults.filter((e) => e !== null));
33
+ // Check description quality
34
+ if (skill.frontmatter.description.length < 50) {
35
+ warnings.push('Description is short - consider adding more detail for better AI discovery');
36
+ }
37
+ return {
38
+ valid: errors.length === 0,
39
+ errors,
40
+ warnings,
41
+ };
42
+ }
43
+ //# sourceMappingURL=validate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate.js","sourceRoot":"","sources":["../../src/skills/validate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,kBAAkB,CAAC;AAC9D,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,OAAO,CAAC;AASvC,MAAM,aAAa,GAAG,CAAC,SAAS,EAAE,YAAY,EAAE,QAAQ,CAAC,CAAC;AAE1D;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,KAAkB;IACnD,MAAM,MAAM,GAAa,EAAE,EACrB,QAAQ,GAAa,EAAE,CAAC;IAE9B,wEAAwE;IACxE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,UAAU,CAAC,CAAC;IAErD,IAAI,CAAC;QACF,MAAM,MAAM,CAAC,WAAW,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;IAC7C,CAAC;IAAC,MAAM,CAAC;QACN,MAAM,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC;IACrC,CAAC;IAED,sDAAsD;IACtD,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;IAEzC,IAAI,OAAO,IAAI,OAAO,KAAK,KAAK,CAAC,WAAW,CAAC,IAAI,EAAE,CAAC;QACjD,QAAQ,CAAC,IAAI,CAAC,eAAe,KAAK,CAAC,WAAW,CAAC,IAAI,oCAAoC,OAAO,GAAG,CAAC,CAAC;IACtG,CAAC;IAED,8CAA8C;IAC9C,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,EACrC,WAAW,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAChE,aAAa,GAAG,MAAM,OAAO,CAAC,GAAG,CAC9B,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;QAC3B,IAAI,CAAC;YACF,MAAM,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,GAAG,CAAC,EAAE,SAAS,CAAC,IAAI,CAAC,CAAC;YACxD,OAAO,IAAI,CAAC;QACf,CAAC;QAAC,MAAM,CAAC;YACN,OAAO,iBAAiB,GAAG,aAAa,CAAC;QAC5C,CAAC;IACJ,CAAC,CAAC,CACJ,CAAC;IAER,MAAM,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,MAAM,CAAC,CAAC,CAAC,EAAe,EAAE,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC;IAErE,4BAA4B;IAC5B,IAAI,KAAK,CAAC,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,EAAE,EAAE,CAAC;QAC7C,QAAQ,CAAC,IAAI,CAAC,4EAA4E,CAAC,CAAC;IAC/F,CAAC;IAED,OAAO;QACJ,KAAK,EAAE,MAAM,CAAC,MAAM,KAAK,CAAC;QAC1B,MAAM;QACN,QAAQ;KACV,CAAC;AACL,CAAC"}
@@ -0,0 +1,23 @@
1
+ import { type AiJsonConfig } from '@a1st/aix-schema';
2
+ export type ConfigUpdater = (config: AiJsonConfig) => AiJsonConfig | Promise<AiJsonConfig>;
3
+ export type LocalConfigUpdater = (config: Partial<AiJsonConfig>) => Partial<AiJsonConfig> | Promise<Partial<AiJsonConfig>>;
4
+ export interface UpdateOptions {
5
+ /** Create a backup before updating (default: true) */
6
+ backup?: boolean;
7
+ }
8
+ export declare function updateConfig(configPath: string, updater: ConfigUpdater, options?: UpdateOptions): Promise<void>;
9
+ /**
10
+ * Update the local config file (ai.local.json).
11
+ * Creates the file if it doesn't exist.
12
+ * @param localPath - Path to ai.local.json (or directory containing it)
13
+ * @param updater - Function to update the config
14
+ * @param options - Update options
15
+ */
16
+ export declare function updateLocalConfig(localPath: string, updater: LocalConfigUpdater, options?: UpdateOptions): Promise<void>;
17
+ /**
18
+ * Get the path to ai.local.json given a base config path.
19
+ * @param configPath - Path to ai.json or directory
20
+ * @returns Path to ai.local.json
21
+ */
22
+ export declare function getLocalConfigPath(configPath: string): string;
23
+ //# sourceMappingURL=updater.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"updater.d.ts","sourceRoot":"","sources":["../src/updater.ts"],"names":[],"mappings":"AAIA,OAAO,EAAiC,KAAK,YAAY,EAAE,MAAM,kBAAkB,CAAC;AAQpF,MAAM,MAAM,aAAa,GAAG,CAAC,MAAM,EAAE,YAAY,KAAK,YAAY,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAC3F,MAAM,MAAM,kBAAkB,GAAG,CAC9B,MAAM,EAAE,OAAO,CAAC,YAAY,CAAC,KAC3B,OAAO,CAAC,YAAY,CAAC,GAAG,OAAO,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AAE5D,MAAM,WAAW,aAAa;IAC3B,sDAAsD;IACtD,MAAM,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,wBAAsB,YAAY,CAC/B,UAAU,EAAE,MAAM,EAClB,OAAO,EAAE,aAAa,EACtB,OAAO,GAAE,aAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;;;GAMG;AACH,wBAAsB,iBAAiB,CACpC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,kBAAkB,EAC3B,OAAO,GAAE,aAAkB,GAC3B,OAAO,CAAC,IAAI,CAAC,CAyCf;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAU7D"}