@detergent-software/atk 0.12.1-dev.2

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 (314) hide show
  1. package/build/cli.d.ts +3 -0
  2. package/build/cli.d.ts.map +1 -0
  3. package/build/cli.js +35 -0
  4. package/build/cli.js.map +1 -0
  5. package/build/commands/_app.d.ts +3 -0
  6. package/build/commands/_app.d.ts.map +1 -0
  7. package/build/commands/_app.js +12 -0
  8. package/build/commands/_app.js.map +1 -0
  9. package/build/commands/audit.d.ts +12 -0
  10. package/build/commands/audit.d.ts.map +1 -0
  11. package/build/commands/audit.js +78 -0
  12. package/build/commands/audit.js.map +1 -0
  13. package/build/commands/browse.d.ts +15 -0
  14. package/build/commands/browse.d.ts.map +1 -0
  15. package/build/commands/browse.js +284 -0
  16. package/build/commands/browse.js.map +1 -0
  17. package/build/commands/cache.d.ts +13 -0
  18. package/build/commands/cache.d.ts.map +1 -0
  19. package/build/commands/cache.js +67 -0
  20. package/build/commands/cache.js.map +1 -0
  21. package/build/commands/config.d.ts +13 -0
  22. package/build/commands/config.d.ts.map +1 -0
  23. package/build/commands/config.js +62 -0
  24. package/build/commands/config.js.map +1 -0
  25. package/build/commands/diff.d.ts +16 -0
  26. package/build/commands/diff.d.ts.map +1 -0
  27. package/build/commands/diff.js +158 -0
  28. package/build/commands/diff.js.map +1 -0
  29. package/build/commands/doctor.d.ts +11 -0
  30. package/build/commands/doctor.d.ts.map +1 -0
  31. package/build/commands/doctor.js +30 -0
  32. package/build/commands/doctor.js.map +1 -0
  33. package/build/commands/index.d.ts +3 -0
  34. package/build/commands/index.d.ts.map +1 -0
  35. package/build/commands/index.js +30 -0
  36. package/build/commands/index.js.map +1 -0
  37. package/build/commands/info.d.ts +25 -0
  38. package/build/commands/info.d.ts.map +1 -0
  39. package/build/commands/info.js +198 -0
  40. package/build/commands/info.js.map +1 -0
  41. package/build/commands/init.d.ts +17 -0
  42. package/build/commands/init.d.ts.map +1 -0
  43. package/build/commands/init.js +504 -0
  44. package/build/commands/init.js.map +1 -0
  45. package/build/commands/install.d.ts +18 -0
  46. package/build/commands/install.d.ts.map +1 -0
  47. package/build/commands/install.js +186 -0
  48. package/build/commands/install.js.map +1 -0
  49. package/build/commands/list.d.ts +20 -0
  50. package/build/commands/list.d.ts.map +1 -0
  51. package/build/commands/list.js +61 -0
  52. package/build/commands/list.js.map +1 -0
  53. package/build/commands/outdated.d.ts +21 -0
  54. package/build/commands/outdated.d.ts.map +1 -0
  55. package/build/commands/outdated.js +81 -0
  56. package/build/commands/outdated.js.map +1 -0
  57. package/build/commands/pin.d.ts +22 -0
  58. package/build/commands/pin.d.ts.map +1 -0
  59. package/build/commands/pin.js +94 -0
  60. package/build/commands/pin.js.map +1 -0
  61. package/build/commands/prune.d.ts +14 -0
  62. package/build/commands/prune.d.ts.map +1 -0
  63. package/build/commands/prune.js +203 -0
  64. package/build/commands/prune.js.map +1 -0
  65. package/build/commands/publish.d.ts +14 -0
  66. package/build/commands/publish.d.ts.map +1 -0
  67. package/build/commands/publish.js +345 -0
  68. package/build/commands/publish.js.map +1 -0
  69. package/build/commands/search.d.ts +16 -0
  70. package/build/commands/search.d.ts.map +1 -0
  71. package/build/commands/search.js +80 -0
  72. package/build/commands/search.js.map +1 -0
  73. package/build/commands/sync.d.ts +15 -0
  74. package/build/commands/sync.d.ts.map +1 -0
  75. package/build/commands/sync.js +209 -0
  76. package/build/commands/sync.js.map +1 -0
  77. package/build/commands/uninstall.d.ts +18 -0
  78. package/build/commands/uninstall.d.ts.map +1 -0
  79. package/build/commands/uninstall.js +304 -0
  80. package/build/commands/uninstall.js.map +1 -0
  81. package/build/commands/unpin.d.ts +22 -0
  82. package/build/commands/unpin.d.ts.map +1 -0
  83. package/build/commands/unpin.js +79 -0
  84. package/build/commands/unpin.js.map +1 -0
  85. package/build/commands/update.d.ts +17 -0
  86. package/build/commands/update.d.ts.map +1 -0
  87. package/build/commands/update.js +151 -0
  88. package/build/commands/update.js.map +1 -0
  89. package/build/commands/why.d.ts +23 -0
  90. package/build/commands/why.d.ts.map +1 -0
  91. package/build/commands/why.js +108 -0
  92. package/build/commands/why.js.map +1 -0
  93. package/build/components/AssetDetail.d.ts +32 -0
  94. package/build/components/AssetDetail.d.ts.map +1 -0
  95. package/build/components/AssetDetail.js +45 -0
  96. package/build/components/AssetDetail.js.map +1 -0
  97. package/build/components/AssetTable.d.ts +25 -0
  98. package/build/components/AssetTable.d.ts.map +1 -0
  99. package/build/components/AssetTable.js +96 -0
  100. package/build/components/AssetTable.js.map +1 -0
  101. package/build/components/BrowseExpandedBundle.d.ts +26 -0
  102. package/build/components/BrowseExpandedBundle.d.ts.map +1 -0
  103. package/build/components/BrowseExpandedBundle.js +59 -0
  104. package/build/components/BrowseExpandedBundle.js.map +1 -0
  105. package/build/components/BrowseExpandedRow.d.ts +14 -0
  106. package/build/components/BrowseExpandedRow.d.ts.map +1 -0
  107. package/build/components/BrowseExpandedRow.js +9 -0
  108. package/build/components/BrowseExpandedRow.js.map +1 -0
  109. package/build/components/BrowseList.d.ts +26 -0
  110. package/build/components/BrowseList.d.ts.map +1 -0
  111. package/build/components/BrowseList.js +101 -0
  112. package/build/components/BrowseList.js.map +1 -0
  113. package/build/components/BundleDetail.d.ts +7 -0
  114. package/build/components/BundleDetail.d.ts.map +1 -0
  115. package/build/components/BundleDetail.js +12 -0
  116. package/build/components/BundleDetail.js.map +1 -0
  117. package/build/components/DependencyTree.d.ts +19 -0
  118. package/build/components/DependencyTree.d.ts.map +1 -0
  119. package/build/components/DependencyTree.js +21 -0
  120. package/build/components/DependencyTree.js.map +1 -0
  121. package/build/components/DiagnosticList.d.ts +19 -0
  122. package/build/components/DiagnosticList.d.ts.map +1 -0
  123. package/build/components/DiagnosticList.js +17 -0
  124. package/build/components/DiagnosticList.js.map +1 -0
  125. package/build/components/DiffView.d.ts +30 -0
  126. package/build/components/DiffView.d.ts.map +1 -0
  127. package/build/components/DiffView.js +32 -0
  128. package/build/components/DiffView.js.map +1 -0
  129. package/build/components/DryRunBanner.d.ts +11 -0
  130. package/build/components/DryRunBanner.d.ts.map +1 -0
  131. package/build/components/DryRunBanner.js +6 -0
  132. package/build/components/DryRunBanner.js.map +1 -0
  133. package/build/components/Field.d.ts +12 -0
  134. package/build/components/Field.d.ts.map +1 -0
  135. package/build/components/Field.js +9 -0
  136. package/build/components/Field.js.map +1 -0
  137. package/build/components/FilterBar.d.ts +18 -0
  138. package/build/components/FilterBar.d.ts.map +1 -0
  139. package/build/components/FilterBar.js +21 -0
  140. package/build/components/FilterBar.js.map +1 -0
  141. package/build/components/Header.d.ts +13 -0
  142. package/build/components/Header.d.ts.map +1 -0
  143. package/build/components/Header.js +20 -0
  144. package/build/components/Header.js.map +1 -0
  145. package/build/components/HelpBar.d.ts +11 -0
  146. package/build/components/HelpBar.d.ts.map +1 -0
  147. package/build/components/HelpBar.js +9 -0
  148. package/build/components/HelpBar.js.map +1 -0
  149. package/build/components/InstallConfirmBar.d.ts +9 -0
  150. package/build/components/InstallConfirmBar.d.ts.map +1 -0
  151. package/build/components/InstallConfirmBar.js +23 -0
  152. package/build/components/InstallConfirmBar.js.map +1 -0
  153. package/build/components/InstallSummary.d.ts +29 -0
  154. package/build/components/InstallSummary.d.ts.map +1 -0
  155. package/build/components/InstallSummary.js +12 -0
  156. package/build/components/InstallSummary.js.map +1 -0
  157. package/build/components/SectionDivider.d.ts +5 -0
  158. package/build/components/SectionDivider.d.ts.map +1 -0
  159. package/build/components/SectionDivider.js +11 -0
  160. package/build/components/SectionDivider.js.map +1 -0
  161. package/build/components/Spinner.d.ts +13 -0
  162. package/build/components/Spinner.d.ts.map +1 -0
  163. package/build/components/Spinner.js +11 -0
  164. package/build/components/Spinner.js.map +1 -0
  165. package/build/components/StatusBadge.d.ts +23 -0
  166. package/build/components/StatusBadge.d.ts.map +1 -0
  167. package/build/components/StatusBadge.js +43 -0
  168. package/build/components/StatusBadge.js.map +1 -0
  169. package/build/components/index.d.ts +20 -0
  170. package/build/components/index.d.ts.map +1 -0
  171. package/build/components/index.js +20 -0
  172. package/build/components/index.js.map +1 -0
  173. package/build/hooks/useBrowseState.d.ts +122 -0
  174. package/build/hooks/useBrowseState.d.ts.map +1 -0
  175. package/build/hooks/useBrowseState.js +315 -0
  176. package/build/hooks/useBrowseState.js.map +1 -0
  177. package/build/hooks/useCommand.d.ts +23 -0
  178. package/build/hooks/useCommand.d.ts.map +1 -0
  179. package/build/hooks/useCommand.js +43 -0
  180. package/build/hooks/useCommand.js.map +1 -0
  181. package/build/lib/adapter.d.ts +40 -0
  182. package/build/lib/adapter.d.ts.map +1 -0
  183. package/build/lib/adapter.js +112 -0
  184. package/build/lib/adapter.js.map +1 -0
  185. package/build/lib/auth.d.ts +31 -0
  186. package/build/lib/auth.d.ts.map +1 -0
  187. package/build/lib/auth.js +101 -0
  188. package/build/lib/auth.js.map +1 -0
  189. package/build/lib/breakpoints.d.ts +3 -0
  190. package/build/lib/breakpoints.d.ts.map +1 -0
  191. package/build/lib/breakpoints.js +8 -0
  192. package/build/lib/breakpoints.js.map +1 -0
  193. package/build/lib/checksum.d.ts +31 -0
  194. package/build/lib/checksum.d.ts.map +1 -0
  195. package/build/lib/checksum.js +78 -0
  196. package/build/lib/checksum.js.map +1 -0
  197. package/build/lib/config.d.ts +42 -0
  198. package/build/lib/config.d.ts.map +1 -0
  199. package/build/lib/config.js +123 -0
  200. package/build/lib/config.js.map +1 -0
  201. package/build/lib/detector.d.ts +35 -0
  202. package/build/lib/detector.d.ts.map +1 -0
  203. package/build/lib/detector.js +125 -0
  204. package/build/lib/detector.js.map +1 -0
  205. package/build/lib/diagnostics.d.ts +10 -0
  206. package/build/lib/diagnostics.d.ts.map +1 -0
  207. package/build/lib/diagnostics.js +195 -0
  208. package/build/lib/diagnostics.js.map +1 -0
  209. package/build/lib/diff.d.ts +34 -0
  210. package/build/lib/diff.d.ts.map +1 -0
  211. package/build/lib/diff.js +78 -0
  212. package/build/lib/diff.js.map +1 -0
  213. package/build/lib/fetch-retry.d.ts +43 -0
  214. package/build/lib/fetch-retry.d.ts.map +1 -0
  215. package/build/lib/fetch-retry.js +137 -0
  216. package/build/lib/fetch-retry.js.map +1 -0
  217. package/build/lib/github.d.ts +57 -0
  218. package/build/lib/github.d.ts.map +1 -0
  219. package/build/lib/github.js +96 -0
  220. package/build/lib/github.js.map +1 -0
  221. package/build/lib/gitignore.d.ts +37 -0
  222. package/build/lib/gitignore.d.ts.map +1 -0
  223. package/build/lib/gitignore.js +142 -0
  224. package/build/lib/gitignore.js.map +1 -0
  225. package/build/lib/init.d.ts +100 -0
  226. package/build/lib/init.d.ts.map +1 -0
  227. package/build/lib/init.js +295 -0
  228. package/build/lib/init.js.map +1 -0
  229. package/build/lib/installer.d.ts +50 -0
  230. package/build/lib/installer.d.ts.map +1 -0
  231. package/build/lib/installer.js +435 -0
  232. package/build/lib/installer.js.map +1 -0
  233. package/build/lib/lockfile.d.ts +170 -0
  234. package/build/lib/lockfile.d.ts.map +1 -0
  235. package/build/lib/lockfile.js +437 -0
  236. package/build/lib/lockfile.js.map +1 -0
  237. package/build/lib/markdown.d.ts +9 -0
  238. package/build/lib/markdown.d.ts.map +1 -0
  239. package/build/lib/markdown.js +67 -0
  240. package/build/lib/markdown.js.map +1 -0
  241. package/build/lib/parse-json.d.ts +34 -0
  242. package/build/lib/parse-json.d.ts.map +1 -0
  243. package/build/lib/parse-json.js +52 -0
  244. package/build/lib/parse-json.js.map +1 -0
  245. package/build/lib/paths.d.ts +28 -0
  246. package/build/lib/paths.d.ts.map +1 -0
  247. package/build/lib/paths.js +68 -0
  248. package/build/lib/paths.js.map +1 -0
  249. package/build/lib/publisher.d.ts +49 -0
  250. package/build/lib/publisher.d.ts.map +1 -0
  251. package/build/lib/publisher.js +388 -0
  252. package/build/lib/publisher.js.map +1 -0
  253. package/build/lib/registry.d.ts +97 -0
  254. package/build/lib/registry.d.ts.map +1 -0
  255. package/build/lib/registry.js +248 -0
  256. package/build/lib/registry.js.map +1 -0
  257. package/build/lib/resolver.d.ts +50 -0
  258. package/build/lib/resolver.d.ts.map +1 -0
  259. package/build/lib/resolver.js +110 -0
  260. package/build/lib/resolver.js.map +1 -0
  261. package/build/lib/schemas/adapter.d.ts +33 -0
  262. package/build/lib/schemas/adapter.d.ts.map +1 -0
  263. package/build/lib/schemas/adapter.js +27 -0
  264. package/build/lib/schemas/adapter.js.map +1 -0
  265. package/build/lib/schemas/bundle.d.ts +38 -0
  266. package/build/lib/schemas/bundle.d.ts.map +1 -0
  267. package/build/lib/schemas/bundle.js +19 -0
  268. package/build/lib/schemas/bundle.js.map +1 -0
  269. package/build/lib/schemas/config.d.ts +12 -0
  270. package/build/lib/schemas/config.d.ts.map +1 -0
  271. package/build/lib/schemas/config.js +14 -0
  272. package/build/lib/schemas/config.js.map +1 -0
  273. package/build/lib/schemas/index.d.ts +7 -0
  274. package/build/lib/schemas/index.d.ts.map +1 -0
  275. package/build/lib/schemas/index.js +7 -0
  276. package/build/lib/schemas/index.js.map +1 -0
  277. package/build/lib/schemas/lockfile.d.ts +102 -0
  278. package/build/lib/schemas/lockfile.d.ts.map +1 -0
  279. package/build/lib/schemas/lockfile.js +50 -0
  280. package/build/lib/schemas/lockfile.js.map +1 -0
  281. package/build/lib/schemas/manifest.d.ts +91 -0
  282. package/build/lib/schemas/manifest.d.ts.map +1 -0
  283. package/build/lib/schemas/manifest.js +42 -0
  284. package/build/lib/schemas/manifest.js.map +1 -0
  285. package/build/lib/schemas/registry.d.ts +225 -0
  286. package/build/lib/schemas/registry.d.ts.map +1 -0
  287. package/build/lib/schemas/registry.js +59 -0
  288. package/build/lib/schemas/registry.js.map +1 -0
  289. package/build/lib/search.d.ts +23 -0
  290. package/build/lib/search.d.ts.map +1 -0
  291. package/build/lib/search.js +139 -0
  292. package/build/lib/search.js.map +1 -0
  293. package/build/lib/tool-resolver.d.ts +12 -0
  294. package/build/lib/tool-resolver.d.ts.map +1 -0
  295. package/build/lib/tool-resolver.js +24 -0
  296. package/build/lib/tool-resolver.js.map +1 -0
  297. package/build/lib/uninstaller.d.ts +109 -0
  298. package/build/lib/uninstaller.d.ts.map +1 -0
  299. package/build/lib/uninstaller.js +368 -0
  300. package/build/lib/uninstaller.js.map +1 -0
  301. package/build/lib/updater.d.ts +68 -0
  302. package/build/lib/updater.d.ts.map +1 -0
  303. package/build/lib/updater.js +230 -0
  304. package/build/lib/updater.js.map +1 -0
  305. package/build/lib/version.d.ts +13 -0
  306. package/build/lib/version.d.ts.map +1 -0
  307. package/build/lib/version.js +30 -0
  308. package/build/lib/version.js.map +1 -0
  309. package/build/windows-esm-loader.d.ts +15 -0
  310. package/build/windows-esm-loader.d.ts.map +1 -0
  311. package/build/windows-esm-loader.js +11 -0
  312. package/build/windows-esm-loader.js.map +1 -0
  313. package/package.json +67 -0
  314. package/tool-adapters/claude-code.json +34 -0
@@ -0,0 +1,248 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { mkdir, readFile, stat, writeFile } from 'node:fs/promises';
3
+ import { join } from 'node:path';
4
+ import { maxSatisfying, compare as semverCompare, valid as semverValid, validRange } from 'semver';
5
+ import { getGitHubToken } from './auth.js';
6
+ import { getCacheDir, loadConfig } from './config.js';
7
+ import { fetchWithRetry } from './fetch-retry.js';
8
+ import { buildGitHubContentsUrl, buildGitHubHeaders, getEffectiveBranch, GITHUB_ACCEPT_RAW } from './github.js';
9
+ import { parseAndValidate, safeParseJson } from './parse-json.js';
10
+ import { RegistrySchema, } from './schemas/registry.js';
11
+ const REGISTRY_CACHE_FILE = 'registry.json';
12
+ const DEFAULT_REGISTRY_PATH = 'registry.json';
13
+ export class RegistryError extends Error {
14
+ constructor(message) {
15
+ super(message);
16
+ this.name = 'RegistryError';
17
+ }
18
+ }
19
+ /**
20
+ * Clear the registry cache.
21
+ */
22
+ export async function clearCache() {
23
+ const config = await loadConfig();
24
+ const cacheDir = getCacheDir(config);
25
+ const cachePath = join(cacheDir, REGISTRY_CACHE_FILE);
26
+ if (existsSync(cachePath)) {
27
+ const { unlink } = await import('node:fs/promises');
28
+ await unlink(cachePath);
29
+ }
30
+ }
31
+ /**
32
+ * Fetch the registry, using cache when available and not expired.
33
+ */
34
+ export async function fetchRegistry(options) {
35
+ const config = await loadConfig();
36
+ const cacheDir = getCacheDir(config);
37
+ const cachePath = join(cacheDir, REGISTRY_CACHE_FILE);
38
+ // Check cache unless force refresh
39
+ if (!options?.force && existsSync(cachePath)) {
40
+ const cached = await readCachedRegistry(cachePath, config.cacheTtlMinutes ?? 60);
41
+ if (cached) {
42
+ return cached;
43
+ }
44
+ }
45
+ // Fetch fresh from GitHub
46
+ const registry = await fetchRegistryFromGitHub(config.registryUrl, config.registryBranch);
47
+ // Write to cache
48
+ await writeCacheFile(cachePath, cacheDir, registry);
49
+ return registry;
50
+ }
51
+ /**
52
+ * Find an asset in the registry by name and resolve a specific version.
53
+ *
54
+ * Version resolution strategy:
55
+ * - If `version` is omitted or undefined, resolves to the `latest` version.
56
+ * - If `version` is an exact semver string (e.g. "1.2.3"), looks up that exact version.
57
+ * - If `version` is a semver range (e.g. "^1.0.0", ">=2.0.0"), resolves via `semver.maxSatisfying`.
58
+ *
59
+ * @param registry - The registry to search.
60
+ * @param name - Asset name to find.
61
+ * @param type - Optional asset type filter.
62
+ * @param version - Optional semver version or range. Defaults to the asset's `latest` version.
63
+ * @returns The resolved asset with version metadata, or undefined if not found.
64
+ */
65
+ export function findAsset(registry, name, type, version) {
66
+ const asset = registry.assets.find((a) => a.name === name && (!type || a.type === type));
67
+ if (!asset) {
68
+ return undefined;
69
+ }
70
+ return resolveAssetVersion(asset, version);
71
+ }
72
+ /**
73
+ * Find a bundle in the registry by name.
74
+ */
75
+ export function findBundle(registry, name) {
76
+ return (registry.bundles ?? []).find((b) => b.name === name);
77
+ }
78
+ /**
79
+ * Get all assets of a given type from the registry.
80
+ */
81
+ export function getAssetsByType(registry, type) {
82
+ return registry.assets.filter((a) => a.type === type);
83
+ }
84
+ /**
85
+ * Get metadata about the registry cache file.
86
+ */
87
+ export async function getCacheStatus() {
88
+ const config = await loadConfig();
89
+ const cacheDir = getCacheDir(config);
90
+ const cachePath = join(cacheDir, REGISTRY_CACHE_FILE);
91
+ const ttlMinutes = config.cacheTtlMinutes ?? 60;
92
+ if (!existsSync(cachePath)) {
93
+ return { ageMs: 0, exists: false, expired: false, path: cachePath, sizeBytes: 0, ttlMinutes };
94
+ }
95
+ const fileStat = await stat(cachePath);
96
+ const ageMs = Date.now() - fileStat.mtimeMs;
97
+ const expired = ageMs > ttlMinutes * 60 * 1000;
98
+ return { ageMs, exists: true, expired, path: cachePath, sizeBytes: fileStat.size, ttlMinutes };
99
+ }
100
+ /**
101
+ * Extract and sort versions from a resolved registry asset.
102
+ *
103
+ * @param asset - The registry asset to extract versions from.
104
+ * @returns An object with the sorted version list (newest first) and the latest version.
105
+ */
106
+ export function getSortedVersions(asset) {
107
+ const versions = Object.keys(asset.versions).sort((a, b) => {
108
+ // Sort by semver descending (newest first)
109
+ const aValid = semverValid(a);
110
+ const bValid = semverValid(b);
111
+ if (aValid && bValid) {
112
+ return semverCompare(b, a);
113
+ }
114
+ return a.localeCompare(b);
115
+ });
116
+ return { latest: asset.latest, versions };
117
+ }
118
+ /**
119
+ * Check if an asset is deprecated.
120
+ */
121
+ export function isDeprecated(registry, name, type) {
122
+ const entry = (registry.deprecated ?? []).find((d) => d.name === name && (!type || !d.type || d.type === type));
123
+ if (!entry) {
124
+ return { deprecated: false };
125
+ }
126
+ return {
127
+ deprecated: true,
128
+ reason: entry.reason,
129
+ replacement: entry.replacement,
130
+ };
131
+ }
132
+ /**
133
+ * Resolve a version against an asset's versions map.
134
+ *
135
+ * @param asset - The registry asset to resolve a version for.
136
+ * @param version - Optional semver version or range. Defaults to the asset's `latest` version.
137
+ * @returns The resolved asset with version metadata, or undefined if the version cannot be resolved.
138
+ */
139
+ export function resolveAssetVersion(asset, version) {
140
+ const availableVersions = Object.keys(asset.versions);
141
+ // No versions available at all
142
+ if (availableVersions.length === 0) {
143
+ return undefined;
144
+ }
145
+ let resolvedVersion;
146
+ if (!version) {
147
+ // Default to the asset's declared latest version
148
+ resolvedVersion = asset.latest;
149
+ }
150
+ else if (semverValid(version)) {
151
+ // Exact version — check if it exists in the map
152
+ resolvedVersion = availableVersions.includes(version) ? version : undefined;
153
+ }
154
+ else if (validRange(version)) {
155
+ // Semver range — find the best matching version
156
+ resolvedVersion = maxSatisfying(availableVersions, version) ?? undefined;
157
+ }
158
+ else {
159
+ // Invalid version string
160
+ return undefined;
161
+ }
162
+ if (!resolvedVersion) {
163
+ return undefined;
164
+ }
165
+ const versionData = asset.versions[resolvedVersion];
166
+ if (!versionData) {
167
+ return undefined;
168
+ }
169
+ return { asset, version: resolvedVersion, versionData };
170
+ }
171
+ /**
172
+ * Fetch registry.json from the GitHub repo via the Contents API.
173
+ */
174
+ async function fetchRegistryFromGitHub(registryUrl, registryBranch) {
175
+ if (registryUrl) {
176
+ return fetchRegistryFromUrl(registryUrl);
177
+ }
178
+ const token = await getGitHubToken();
179
+ const effectiveBranch = getEffectiveBranch(registryBranch);
180
+ const url = buildGitHubContentsUrl(DEFAULT_REGISTRY_PATH, effectiveBranch);
181
+ const response = await fetchWithRetry(url, {
182
+ headers: buildGitHubHeaders(token, GITHUB_ACCEPT_RAW),
183
+ });
184
+ if (!response.ok) {
185
+ if (response.status === 404) {
186
+ throw new RegistryError('Registry not found. The registry.json file may not exist yet in the repo.');
187
+ }
188
+ if (response.status === 401 || response.status === 403) {
189
+ throw new RegistryError('Authentication failed. Check your GitHub token or run `gh auth login`.');
190
+ }
191
+ throw new RegistryError(`Failed to fetch registry: HTTP ${response.status}`);
192
+ }
193
+ const raw = await response.text();
194
+ try {
195
+ return parseAndValidate(raw, RegistrySchema, 'Invalid registry data');
196
+ }
197
+ catch (err) {
198
+ throw new RegistryError(err.message);
199
+ }
200
+ }
201
+ /**
202
+ * Fetch registry from a custom URL (for custom registryUrl in config).
203
+ */
204
+ async function fetchRegistryFromUrl(url) {
205
+ const response = await fetchWithRetry(url);
206
+ if (!response.ok) {
207
+ throw new RegistryError(`Failed to fetch registry from ${url}: HTTP ${response.status}`);
208
+ }
209
+ const raw = await response.text();
210
+ try {
211
+ return parseAndValidate(raw, RegistrySchema, `Invalid registry data from ${url}`);
212
+ }
213
+ catch (err) {
214
+ throw new RegistryError(err.message);
215
+ }
216
+ }
217
+ /**
218
+ * Read the cached registry file if it exists and is not expired.
219
+ */
220
+ async function readCachedRegistry(cachePath, ttlMinutes) {
221
+ try {
222
+ const fileStat = await stat(cachePath);
223
+ const ageMs = Date.now() - fileStat.mtimeMs;
224
+ const ttlMs = ttlMinutes * 60 * 1000;
225
+ if (ageMs > ttlMs) {
226
+ return null; // Cache expired
227
+ }
228
+ const raw = await readFile(cachePath, 'utf-8');
229
+ const result = safeParseJson(raw, RegistrySchema, 'Invalid cached registry');
230
+ if (!result.success) {
231
+ return null; // Invalid cache — re-fetch
232
+ }
233
+ return result.data;
234
+ }
235
+ catch {
236
+ return null;
237
+ }
238
+ }
239
+ /**
240
+ * Write registry data to the cache file.
241
+ */
242
+ async function writeCacheFile(cachePath, cacheDir, registry) {
243
+ if (!existsSync(cacheDir)) {
244
+ await mkdir(cacheDir, { recursive: true });
245
+ }
246
+ await writeFile(cachePath, JSON.stringify(registry), 'utf-8');
247
+ }
248
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/lib/registry.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
1
+ import type { Registry, RegistryAsset, RegistryAssetVersion, RegistryBundle } from './schemas/registry.js';
2
+ export interface InstallPlan {
3
+ /** Ordered list of assets to install (dependencies first, then direct requests). */
4
+ entries: InstallPlanEntry[];
5
+ /** Total number of assets to install. */
6
+ totalCount: number;
7
+ }
8
+ export interface InstallPlanEntry {
9
+ asset: RegistryAsset;
10
+ /** Why this entry is in the plan (direct request or dependency of another asset). */
11
+ reason: 'dependency' | 'direct';
12
+ /** If reason is 'dependency', which asset required this one. */
13
+ requiredBy?: string;
14
+ /** The resolved semver version for this asset. */
15
+ version: string;
16
+ /** The version-specific metadata for the resolved version. */
17
+ versionData: RegistryAssetVersion;
18
+ }
19
+ export declare class ResolverError extends Error {
20
+ constructor(message: string);
21
+ }
22
+ /** Clear the resolver cache. Useful for testing and flows that need fresh resolution. */
23
+ export declare function clearResolverCache(): void;
24
+ /**
25
+ * Resolve all assets in a bundle into a single install plan.
26
+ * Extracts asset references from the bundle and delegates to resolveMultipleInstallPlans.
27
+ * Throws ResolverError if the bundle has no assets.
28
+ */
29
+ export declare function resolveBundleInstallPlan(registry: Registry, bundle: RegistryBundle): InstallPlan;
30
+ /**
31
+ * Resolve an asset and all its dependencies into a flat, ordered install plan.
32
+ * Dependencies are listed before the assets that depend on them.
33
+ * Detects circular dependencies and throws ResolverError.
34
+ *
35
+ * @param registry - The registry to search.
36
+ * @param assetName - Name of the asset to resolve.
37
+ * @param assetType - Optional asset type filter.
38
+ * @param assetVersion - Optional semver version or range. Defaults to the asset's `latest` version.
39
+ */
40
+ export declare function resolveInstallPlan(registry: Registry, assetName: string, assetType?: string, assetVersion?: string): InstallPlan;
41
+ /**
42
+ * Resolve multiple assets into a single install plan.
43
+ * Deduplicates shared dependencies.
44
+ */
45
+ export declare function resolveMultipleInstallPlans(registry: Registry, assets: Array<{
46
+ name: string;
47
+ type?: string;
48
+ version?: string;
49
+ }>): InstallPlan;
50
+ //# sourceMappingURL=resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.d.ts","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAE,aAAa,EAAE,oBAAoB,EAAE,cAAc,EAAE,MAAM,uBAAuB,CAAC;AAO3G,MAAM,WAAW,WAAW;IAC1B,oFAAoF;IACpF,OAAO,EAAE,gBAAgB,EAAE,CAAC;IAC5B,yCAAyC;IACzC,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,aAAa,CAAC;IACrB,qFAAqF;IACrF,MAAM,EAAE,YAAY,GAAG,QAAQ,CAAC;IAChC,gEAAgE;IAChE,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,kDAAkD;IAClD,OAAO,EAAE,MAAM,CAAC;IAChB,8DAA8D;IAC9D,WAAW,EAAE,oBAAoB,CAAC;CACnC;AAED,qBAAa,aAAc,SAAQ,KAAK;gBAC1B,OAAO,EAAE,MAAM;CAI5B;AAED,yFAAyF;AACzF,wBAAgB,kBAAkB,IAAI,IAAI,CAEzC;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,CAAC,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,cAAc,GAAG,WAAW,CAUhG;AAED;;;;;;;;;GASG;AACH,wBAAgB,kBAAkB,CAChC,QAAQ,EAAE,QAAQ,EAClB,SAAS,EAAE,MAAM,EACjB,SAAS,CAAC,EAAE,MAAM,EAClB,YAAY,CAAC,EAAE,MAAM,GACpB,WAAW,CAqBb;AAED;;;GAGG;AACH,wBAAgB,2BAA2B,CACzC,QAAQ,EAAE,QAAQ,EAClB,MAAM,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IAAC,OAAO,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,GAC/D,WAAW,CAab"}
@@ -0,0 +1,110 @@
1
+ import { findAsset } from './registry.js';
2
+ /** Module-level cache for resolved install plans, keyed by registry version + asset type + asset name + version. */
3
+ const resolverCache = new Map();
4
+ export class ResolverError extends Error {
5
+ constructor(message) {
6
+ super(message);
7
+ this.name = 'ResolverError';
8
+ }
9
+ }
10
+ /** Clear the resolver cache. Useful for testing and flows that need fresh resolution. */
11
+ export function clearResolverCache() {
12
+ resolverCache.clear();
13
+ }
14
+ /**
15
+ * Resolve all assets in a bundle into a single install plan.
16
+ * Extracts asset references from the bundle and delegates to resolveMultipleInstallPlans.
17
+ * Throws ResolverError if the bundle has no assets.
18
+ */
19
+ export function resolveBundleInstallPlan(registry, bundle) {
20
+ const bundleAssets = bundle.assets ?? [];
21
+ if (bundleAssets.length === 0) {
22
+ throw new ResolverError(`Bundle "${bundle.name}" has no assets`);
23
+ }
24
+ const assets = bundleAssets.map(({ name, type, version }) => ({ name, type, version }));
25
+ return resolveMultipleInstallPlans(registry, assets);
26
+ }
27
+ /**
28
+ * Resolve an asset and all its dependencies into a flat, ordered install plan.
29
+ * Dependencies are listed before the assets that depend on them.
30
+ * Detects circular dependencies and throws ResolverError.
31
+ *
32
+ * @param registry - The registry to search.
33
+ * @param assetName - Name of the asset to resolve.
34
+ * @param assetType - Optional asset type filter.
35
+ * @param assetVersion - Optional semver version or range. Defaults to the asset's `latest` version.
36
+ */
37
+ export function resolveInstallPlan(registry, assetName, assetType, assetVersion) {
38
+ const cacheKey = `${registry.version}:${assetType ?? ''}:${assetName}:${assetVersion ?? ''}`;
39
+ const cached = resolverCache.get(cacheKey);
40
+ if (cached) {
41
+ return structuredClone(cached);
42
+ }
43
+ const entries = [];
44
+ const resolved = new Set();
45
+ const visiting = new Set();
46
+ resolveAsset(registry, entries, resolved, visiting, assetName, assetType, assetVersion, 'direct');
47
+ const plan = {
48
+ entries,
49
+ totalCount: entries.length,
50
+ };
51
+ resolverCache.set(cacheKey, plan);
52
+ return structuredClone(plan);
53
+ }
54
+ /**
55
+ * Resolve multiple assets into a single install plan.
56
+ * Deduplicates shared dependencies.
57
+ */
58
+ export function resolveMultipleInstallPlans(registry, assets) {
59
+ const entries = [];
60
+ const resolved = new Set();
61
+ const visiting = new Set();
62
+ for (const { name, type, version } of assets) {
63
+ resolveAsset(registry, entries, resolved, visiting, name, type, version, 'direct');
64
+ }
65
+ return {
66
+ entries,
67
+ totalCount: entries.length,
68
+ };
69
+ }
70
+ /**
71
+ * Shared recursive resolver that resolves a single asset and its dependencies
72
+ * into the provided entries array, using the given resolved/visiting sets for
73
+ * deduplication and circular dependency detection.
74
+ *
75
+ * Graph nodes are keyed as `type:name@version` for version-aware resolution.
76
+ */
77
+ function resolveAsset(registry, entries, resolved, visiting, name, type, version, reason, requiredBy) {
78
+ const result = findAsset(registry, name, type, version);
79
+ if (!result) {
80
+ const typeHint = type ? ` (type: ${type})` : '';
81
+ const versionHint = version ? ` @${version}` : '';
82
+ throw new ResolverError(`Asset "${name}"${versionHint}${typeHint} not found in the registry` +
83
+ (requiredBy ? ` (required by "${requiredBy}")` : ''));
84
+ }
85
+ const key = `${result.asset.type}:${name}@${result.version}`;
86
+ // Already in the plan
87
+ if (resolved.has(key)) {
88
+ return;
89
+ }
90
+ // Circular dependency detection
91
+ if (visiting.has(key)) {
92
+ const chain = [...visiting, key].join(' → ');
93
+ throw new ResolverError(`Circular dependency detected: ${chain}`);
94
+ }
95
+ visiting.add(key);
96
+ // Resolve dependencies first (depth-first), passing their version ranges
97
+ for (const dep of result.versionData.dependencies ?? []) {
98
+ resolveAsset(registry, entries, resolved, visiting, dep.name, dep.type, dep.version, 'dependency', name);
99
+ }
100
+ visiting.delete(key);
101
+ resolved.add(key);
102
+ entries.push({
103
+ asset: result.asset,
104
+ reason,
105
+ requiredBy,
106
+ version: result.version,
107
+ versionData: result.versionData,
108
+ });
109
+ }
110
+ //# sourceMappingURL=resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolver.js","sourceRoot":"","sources":["../../src/lib/resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,33 @@
1
+ import { z } from 'zod';
2
+ export declare const PlacementConfig: z.ZodObject<{
3
+ configFile: z.ZodOptional<z.ZodString>;
4
+ configKey: z.ZodOptional<z.ZodString>;
5
+ configMerge: z.ZodOptional<z.ZodBoolean>;
6
+ entrypointName: z.ZodOptional<z.ZodString>;
7
+ fileless: z.ZodOptional<z.ZodBoolean>;
8
+ path: z.ZodString;
9
+ }, z.core.$strip>;
10
+ export type PlacementConfig = z.infer<typeof PlacementConfig>;
11
+ export declare const AdapterSchema: z.ZodObject<{
12
+ $schema: z.ZodOptional<z.ZodString>;
13
+ configDetection: z.ZodArray<z.ZodString>;
14
+ displayName: z.ZodString;
15
+ placements: z.ZodRecord<z.ZodEnum<{
16
+ skill: "skill";
17
+ agent: "agent";
18
+ rule: "rule";
19
+ hook: "hook";
20
+ "memory-template": "memory-template";
21
+ "mcp-config": "mcp-config";
22
+ }> & z.core.$partial, z.ZodObject<{
23
+ configFile: z.ZodOptional<z.ZodString>;
24
+ configKey: z.ZodOptional<z.ZodString>;
25
+ configMerge: z.ZodOptional<z.ZodBoolean>;
26
+ entrypointName: z.ZodOptional<z.ZodString>;
27
+ fileless: z.ZodOptional<z.ZodBoolean>;
28
+ path: z.ZodString;
29
+ }, z.core.$strip>>;
30
+ tool: z.ZodString;
31
+ }, z.core.$strip>;
32
+ export type Adapter = z.infer<typeof AdapterSchema>;
33
+ //# sourceMappingURL=adapter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,eAAe;;;;;;;iBAkB1B,CAAC;AACH,MAAM,MAAM,eAAe,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AAE9D,eAAO,MAAM,aAAa;;;;;;;;;;;;;;;;;;;;iBAMxB,CAAC;AACH,MAAM,MAAM,OAAO,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC"}
@@ -0,0 +1,27 @@
1
+ import { z } from 'zod';
2
+ import { AssetType } from './manifest.js';
3
+ export const PlacementConfig = z.object({
4
+ configFile: z.string().optional().describe('Config file to update for registration (e.g., settings.json)'),
5
+ configKey: z.string().optional().describe('Key path within the config file to update'),
6
+ configMerge: z
7
+ .boolean()
8
+ .optional()
9
+ .describe('When true, merge actual asset content into configFile[configKey] instead of writing a simple marker'),
10
+ entrypointName: z
11
+ .string()
12
+ .optional()
13
+ .describe('Fixed filename for the entrypoint when placed in a directory (e.g., "SKILL.md"). When set, path is treated as a directory template.'),
14
+ fileless: z
15
+ .boolean()
16
+ .optional()
17
+ .describe('When true, no standalone files are placed. Asset content is only used for config merging.'),
18
+ path: z.string().describe('File placement path template (supports {name} variable)'),
19
+ });
20
+ export const AdapterSchema = z.object({
21
+ $schema: z.string().optional().describe('JSON Schema reference for editor validation and autocomplete'),
22
+ configDetection: z.array(z.string()).describe('Paths/files that indicate this tool is in use (e.g., [".claude/"])'),
23
+ displayName: z.string().describe('Human-readable tool name'),
24
+ placements: z.partialRecord(AssetType, PlacementConfig).describe('File placement rules per asset type'),
25
+ tool: z.string().describe('Tool identifier (e.g., claude-code)'),
26
+ });
27
+ //# sourceMappingURL=adapter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"adapter.js","sourceRoot":"","sources":["../../../src/lib/schemas/adapter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,MAAM,eAAe,GAAG,CAAC,CAAC,MAAM,CAAC;IACtC,UAAU,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IAC1G,SAAS,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACtF,WAAW,EAAE,CAAC;SACX,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,qGAAqG,CAAC;IAClH,cAAc,EAAE,CAAC;SACd,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,qIAAqI,CACtI;IACH,QAAQ,EAAE,CAAC;SACR,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CAAC,2FAA2F,CAAC;IACxG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,yDAAyD,CAAC;CACrF,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,aAAa,GAAG,CAAC,CAAC,MAAM,CAAC;IACpC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACvG,eAAe,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,CAAC,oEAAoE,CAAC;IACnH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,0BAA0B,CAAC;IAC5D,UAAU,EAAE,CAAC,CAAC,aAAa,CAAC,SAAS,EAAE,eAAe,CAAC,CAAC,QAAQ,CAAC,qCAAqC,CAAC;IACvG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,qCAAqC,CAAC;CACjE,CAAC,CAAC"}
@@ -0,0 +1,38 @@
1
+ import { z } from 'zod';
2
+ export declare const BundleAssetRef: z.ZodObject<{
3
+ name: z.ZodString;
4
+ type: z.ZodEnum<{
5
+ skill: "skill";
6
+ agent: "agent";
7
+ rule: "rule";
8
+ hook: "hook";
9
+ "memory-template": "memory-template";
10
+ "mcp-config": "mcp-config";
11
+ }>;
12
+ version: z.ZodOptional<z.ZodString>;
13
+ }, z.core.$strip>;
14
+ export type BundleAssetRef = z.infer<typeof BundleAssetRef>;
15
+ export declare const BundleSchema: z.ZodObject<{
16
+ $schema: z.ZodOptional<z.ZodString>;
17
+ assets: z.ZodArray<z.ZodObject<{
18
+ name: z.ZodString;
19
+ type: z.ZodEnum<{
20
+ skill: "skill";
21
+ agent: "agent";
22
+ rule: "rule";
23
+ hook: "hook";
24
+ "memory-template": "memory-template";
25
+ "mcp-config": "mcp-config";
26
+ }>;
27
+ version: z.ZodOptional<z.ZodString>;
28
+ }, z.core.$strip>>;
29
+ author: z.ZodString;
30
+ description: z.ZodString;
31
+ metadata: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodUnknown>>;
32
+ name: z.ZodString;
33
+ setupInstructions: z.ZodOptional<z.ZodString>;
34
+ tags: z.ZodOptional<z.ZodArray<z.ZodString>>;
35
+ version: z.ZodString;
36
+ }, z.core.$strip>;
37
+ export type Bundle = z.infer<typeof BundleSchema>;
38
+ //# sourceMappingURL=bundle.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,cAAc;;;;;;;;;;;iBAIzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;iBAUvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC"}
@@ -0,0 +1,19 @@
1
+ import { z } from 'zod';
2
+ import { AssetType } from './manifest.js';
3
+ export const BundleAssetRef = z.object({
4
+ name: z.string().describe('Asset name'),
5
+ type: AssetType.describe('Asset type'),
6
+ version: z.string().optional().describe('Pinned version (latest if omitted)'),
7
+ });
8
+ export const BundleSchema = z.object({
9
+ $schema: z.string().optional().describe('JSON Schema reference for editor validation and autocomplete'),
10
+ assets: z.array(BundleAssetRef).min(1).describe('Assets included in this bundle'),
11
+ author: z.string().describe('Author name or identifier'),
12
+ description: z.string().describe('What this bundle provides'),
13
+ metadata: z.record(z.string(), z.unknown()).optional().describe('Arbitrary additional metadata'),
14
+ name: z.string().describe('Unique bundle name (kebab-case)'),
15
+ setupInstructions: z.string().optional().describe('Post-install setup instructions (markdown)'),
16
+ tags: z.array(z.string()).optional().describe('Searchable tags'),
17
+ version: z.string().describe('Semver version string'),
18
+ });
19
+ //# sourceMappingURL=bundle.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"bundle.js","sourceRoot":"","sources":["../../../src/lib/schemas/bundle.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,MAAM,eAAe,CAAC;AAE1C,MAAM,CAAC,MAAM,cAAc,GAAG,CAAC,CAAC,MAAM,CAAC;IACrC,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,YAAY,CAAC;IACvC,IAAI,EAAE,SAAS,CAAC,QAAQ,CAAC,YAAY,CAAC;IACtC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,oCAAoC,CAAC;CAC9E,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,8DAA8D,CAAC;IACvG,MAAM,EAAE,CAAC,CAAC,KAAK,CAAC,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,gCAAgC,CAAC;IACjF,MAAM,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IACxD,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,2BAA2B,CAAC;IAC7D,QAAQ,EAAE,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,+BAA+B,CAAC;IAChG,IAAI,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,iCAAiC,CAAC;IAC5D,iBAAiB,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,4CAA4C,CAAC;IAC/F,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iBAAiB,CAAC;IAChE,OAAO,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,uBAAuB,CAAC;CACtD,CAAC,CAAC"}
@@ -0,0 +1,12 @@
1
+ import { z } from 'zod';
2
+ export declare const ConfigSchema: z.ZodObject<{
3
+ cacheDir: z.ZodOptional<z.ZodString>;
4
+ cacheTtlMinutes: z.ZodOptional<z.ZodNumber>;
5
+ defaultTool: z.ZodOptional<z.ZodString>;
6
+ githubToken: z.ZodOptional<z.ZodString>;
7
+ registryBranch: z.ZodOptional<z.ZodString>;
8
+ registryUrl: z.ZodOptional<z.ZodString>;
9
+ }, z.core.$strip>;
10
+ export type Config = z.infer<typeof ConfigSchema>;
11
+ export declare const DEFAULT_CONFIG: Config;
12
+ //# sourceMappingURL=config.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,eAAO,MAAM,YAAY;;;;;;;iBAOvB,CAAC;AACH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAElD,eAAO,MAAM,cAAc,EAAE,MAG5B,CAAC"}
@@ -0,0 +1,14 @@
1
+ import { z } from 'zod';
2
+ export const ConfigSchema = z.object({
3
+ cacheDir: z.string().optional().describe('Override cache directory (defaults to ~/.atk/cache/)'),
4
+ cacheTtlMinutes: z.number().optional().describe('Cache TTL in minutes for registry data'),
5
+ defaultTool: z.string().optional().describe('Default tool when --tool is not specified'),
6
+ githubToken: z.string().optional().describe('GitHub token override (defaults to gh auth token)'),
7
+ registryBranch: z.string().optional().describe('Override registry branch for GitHub API calls (defaults to main)'),
8
+ registryUrl: z.string().optional().describe('Override registry URL (defaults to GitHub repo)'),
9
+ });
10
+ export const DEFAULT_CONFIG = {
11
+ cacheTtlMinutes: 60,
12
+ defaultTool: 'claude-code',
13
+ };
14
+ //# sourceMappingURL=config.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../../src/lib/schemas/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,CAAC,MAAM,CAAC;IACnC,QAAQ,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,sDAAsD,CAAC;IAChG,eAAe,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,wCAAwC,CAAC;IACzF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,2CAA2C,CAAC;IACxF,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,mDAAmD,CAAC;IAChG,cAAc,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,kEAAkE,CAAC;IAClH,WAAW,EAAE,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,CAAC,iDAAiD,CAAC;CAC/F,CAAC,CAAC;AAGH,MAAM,CAAC,MAAM,cAAc,GAAW;IACpC,eAAe,EAAE,EAAE;IACnB,WAAW,EAAE,aAAa;CAC3B,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { type Adapter, AdapterSchema, PlacementConfig } from './adapter.js';
2
+ export { type Bundle, BundleAssetRef, BundleSchema } from './bundle.js';
3
+ export { type Config, ConfigSchema, DEFAULT_CONFIG } from './config.js';
4
+ export { InstalledAsset, InstalledFile, type Lockfile, LockfileSchema } from './lockfile.js';
5
+ export { AssetDependency, AssetType, type Manifest, ManifestSchema, SecurityBlock, ToolCompatibility, TrustLevel, } from './manifest.js';
6
+ export { DeprecatedEntry, type Registry, RegistryAsset, type RegistryAssetVersion, RegistryAssetVersionSchema, RegistryAssetVersionsMapSchema, RegistryBundle, RegistrySchema, } from './registry.js';
7
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,KAAK,OAAO,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAE,KAAK,MAAM,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,KAAK,MAAM,EAAE,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAE,KAAK,QAAQ,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7F,OAAO,EACL,eAAe,EACf,SAAS,EACT,KAAK,QAAQ,EACb,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EACf,KAAK,QAAQ,EACb,aAAa,EACb,KAAK,oBAAoB,EACzB,0BAA0B,EAC1B,8BAA8B,EAC9B,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC"}
@@ -0,0 +1,7 @@
1
+ export { AdapterSchema, PlacementConfig } from './adapter.js';
2
+ export { BundleAssetRef, BundleSchema } from './bundle.js';
3
+ export { ConfigSchema, DEFAULT_CONFIG } from './config.js';
4
+ export { InstalledAsset, InstalledFile, LockfileSchema } from './lockfile.js';
5
+ export { AssetDependency, AssetType, ManifestSchema, SecurityBlock, ToolCompatibility, TrustLevel, } from './manifest.js';
6
+ export { DeprecatedEntry, RegistryAsset, RegistryAssetVersionSchema, RegistryAssetVersionsMapSchema, RegistryBundle, RegistrySchema, } from './registry.js';
7
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/schemas/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAgB,aAAa,EAAE,eAAe,EAAE,MAAM,cAAc,CAAC;AAE5E,OAAO,EAAe,cAAc,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAe,YAAY,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC;AAExE,OAAO,EAAE,cAAc,EAAE,aAAa,EAAiB,cAAc,EAAE,MAAM,eAAe,CAAC;AAE7F,OAAO,EACL,eAAe,EACf,SAAS,EAET,cAAc,EACd,aAAa,EACb,iBAAiB,EACjB,UAAU,GACX,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,eAAe,EAEf,aAAa,EAEb,0BAA0B,EAC1B,8BAA8B,EAC9B,cAAc,EACd,cAAc,GACf,MAAM,eAAe,CAAC"}