@detergent-software/atk 3.0.0-dev.2 → 3.0.0-dev.21

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 (301) hide show
  1. package/README.md +361 -0
  2. package/build/commands/audit.d.ts.map +1 -1
  3. package/build/commands/audit.js +79 -37
  4. package/build/commands/audit.js.map +1 -1
  5. package/build/commands/browse.d.ts.map +1 -1
  6. package/build/commands/browse.js +119 -154
  7. package/build/commands/browse.js.map +1 -1
  8. package/build/commands/cache.d.ts.map +1 -1
  9. package/build/commands/cache.js +13 -15
  10. package/build/commands/cache.js.map +1 -1
  11. package/build/commands/config.d.ts +1 -1
  12. package/build/commands/config.d.ts.map +1 -1
  13. package/build/commands/config.js +7 -3
  14. package/build/commands/config.js.map +1 -1
  15. package/build/commands/diff.d.ts.map +1 -1
  16. package/build/commands/diff.js +4 -117
  17. package/build/commands/diff.js.map +1 -1
  18. package/build/commands/freeze.d.ts +1 -2
  19. package/build/commands/freeze.d.ts.map +1 -1
  20. package/build/commands/freeze.js +17 -37
  21. package/build/commands/freeze.js.map +1 -1
  22. package/build/commands/info.d.ts +1 -2
  23. package/build/commands/info.d.ts.map +1 -1
  24. package/build/commands/info.js +36 -35
  25. package/build/commands/info.js.map +1 -1
  26. package/build/commands/init.d.ts.map +1 -1
  27. package/build/commands/init.js +39 -405
  28. package/build/commands/init.js.map +1 -1
  29. package/build/commands/install.d.ts.map +1 -1
  30. package/build/commands/install.js +49 -34
  31. package/build/commands/install.js.map +1 -1
  32. package/build/commands/list.d.ts +2 -2
  33. package/build/commands/list.d.ts.map +1 -1
  34. package/build/commands/list.js +138 -27
  35. package/build/commands/list.js.map +1 -1
  36. package/build/commands/outdated.d.ts.map +1 -1
  37. package/build/commands/outdated.js +20 -10
  38. package/build/commands/outdated.js.map +1 -1
  39. package/build/commands/pin.d.ts +1 -2
  40. package/build/commands/pin.d.ts.map +1 -1
  41. package/build/commands/pin.js +44 -47
  42. package/build/commands/pin.js.map +1 -1
  43. package/build/commands/prune.d.ts.map +1 -1
  44. package/build/commands/prune.js +76 -151
  45. package/build/commands/prune.js.map +1 -1
  46. package/build/commands/publish.d.ts +3 -1
  47. package/build/commands/publish.d.ts.map +1 -1
  48. package/build/commands/publish.js +67 -390
  49. package/build/commands/publish.js.map +1 -1
  50. package/build/commands/search.d.ts.map +1 -1
  51. package/build/commands/search.js +14 -19
  52. package/build/commands/search.js.map +1 -1
  53. package/build/commands/setup.d.ts +1 -1
  54. package/build/commands/setup.d.ts.map +1 -1
  55. package/build/commands/setup.js +48 -253
  56. package/build/commands/setup.js.map +1 -1
  57. package/build/commands/sync.d.ts.map +1 -1
  58. package/build/commands/sync.js +43 -169
  59. package/build/commands/sync.js.map +1 -1
  60. package/build/commands/thaw.d.ts +1 -2
  61. package/build/commands/thaw.d.ts.map +1 -1
  62. package/build/commands/thaw.js +19 -37
  63. package/build/commands/thaw.js.map +1 -1
  64. package/build/commands/uninstall.d.ts.map +1 -1
  65. package/build/commands/uninstall.js +106 -221
  66. package/build/commands/uninstall.js.map +1 -1
  67. package/build/commands/unpin.d.ts +1 -2
  68. package/build/commands/unpin.d.ts.map +1 -1
  69. package/build/commands/unpin.js +23 -38
  70. package/build/commands/unpin.js.map +1 -1
  71. package/build/commands/update.d.ts.map +1 -1
  72. package/build/commands/update.js +37 -25
  73. package/build/commands/update.js.map +1 -1
  74. package/build/commands/why.d.ts +1 -1
  75. package/build/commands/why.d.ts.map +1 -1
  76. package/build/commands/why.js +14 -6
  77. package/build/commands/why.js.map +1 -1
  78. package/build/components/AssetDetail.d.ts +1 -3
  79. package/build/components/AssetDetail.d.ts.map +1 -1
  80. package/build/components/AssetDetail.js +24 -21
  81. package/build/components/AssetDetail.js.map +1 -1
  82. package/build/components/AssetTable.d.ts +5 -2
  83. package/build/components/AssetTable.d.ts.map +1 -1
  84. package/build/components/AssetTable.js +37 -40
  85. package/build/components/AssetTable.js.map +1 -1
  86. package/build/components/BrowseExpandedBundle.d.ts +7 -0
  87. package/build/components/BrowseExpandedBundle.d.ts.map +1 -1
  88. package/build/components/BrowseExpandedBundle.js +19 -0
  89. package/build/components/BrowseExpandedBundle.js.map +1 -1
  90. package/build/components/BrowseExpandedRow.d.ts +4 -1
  91. package/build/components/BrowseExpandedRow.d.ts.map +1 -1
  92. package/build/components/BrowseExpandedRow.js +24 -3
  93. package/build/components/BrowseExpandedRow.js.map +1 -1
  94. package/build/components/BrowseList.d.ts +3 -1
  95. package/build/components/BrowseList.d.ts.map +1 -1
  96. package/build/components/BrowseList.js +52 -42
  97. package/build/components/BrowseList.js.map +1 -1
  98. package/build/components/DiffView.d.ts +0 -2
  99. package/build/components/DiffView.d.ts.map +1 -1
  100. package/build/components/DiffView.js +11 -5
  101. package/build/components/DiffView.js.map +1 -1
  102. package/build/components/DryRunBanner.d.ts +3 -3
  103. package/build/components/DryRunBanner.d.ts.map +1 -1
  104. package/build/components/DryRunBanner.js +2 -2
  105. package/build/components/DryRunBanner.js.map +1 -1
  106. package/build/components/FilterBar.d.ts +10 -3
  107. package/build/components/FilterBar.d.ts.map +1 -1
  108. package/build/components/FilterBar.js +4 -4
  109. package/build/components/FilterBar.js.map +1 -1
  110. package/build/components/FrozenSkippedHint.d.ts +11 -0
  111. package/build/components/FrozenSkippedHint.d.ts.map +1 -0
  112. package/build/components/FrozenSkippedHint.js +12 -0
  113. package/build/components/FrozenSkippedHint.js.map +1 -0
  114. package/build/components/HelpBar.d.ts.map +1 -1
  115. package/build/components/HelpBar.js +3 -3
  116. package/build/components/HelpBar.js.map +1 -1
  117. package/build/components/InitSuccess.d.ts +5 -0
  118. package/build/components/InitSuccess.d.ts.map +1 -0
  119. package/build/components/InitSuccess.js +20 -0
  120. package/build/components/InitSuccess.js.map +1 -0
  121. package/build/components/InstallSummary.d.ts +3 -3
  122. package/build/components/InstallSummary.d.ts.map +1 -1
  123. package/build/components/InstallSummary.js +2 -2
  124. package/build/components/InstallSummary.js.map +1 -1
  125. package/build/components/Link.d.ts +7 -0
  126. package/build/components/Link.d.ts.map +1 -0
  127. package/build/components/Link.js +6 -0
  128. package/build/components/Link.js.map +1 -0
  129. package/build/components/ListActionBar.d.ts +11 -0
  130. package/build/components/ListActionBar.d.ts.map +1 -0
  131. package/build/components/ListActionBar.js +30 -0
  132. package/build/components/ListActionBar.js.map +1 -0
  133. package/build/components/ListBrowseList.d.ts +27 -0
  134. package/build/components/ListBrowseList.d.ts.map +1 -0
  135. package/build/components/ListBrowseList.js +57 -0
  136. package/build/components/ListBrowseList.js.map +1 -0
  137. package/build/components/ListExpandedRow.d.ts +38 -0
  138. package/build/components/ListExpandedRow.d.ts.map +1 -0
  139. package/build/components/ListExpandedRow.js +46 -0
  140. package/build/components/ListExpandedRow.js.map +1 -0
  141. package/build/components/ListHelpBar.d.ts +19 -0
  142. package/build/components/ListHelpBar.d.ts.map +1 -0
  143. package/build/components/ListHelpBar.js +11 -0
  144. package/build/components/ListHelpBar.js.map +1 -0
  145. package/build/components/OrphanListItem.d.ts +15 -0
  146. package/build/components/OrphanListItem.d.ts.map +1 -0
  147. package/build/components/OrphanListItem.js +6 -0
  148. package/build/components/OrphanListItem.js.map +1 -0
  149. package/build/components/PromptField.d.ts +19 -0
  150. package/build/components/PromptField.d.ts.map +1 -0
  151. package/build/components/PromptField.js +7 -0
  152. package/build/components/PromptField.js.map +1 -0
  153. package/build/components/StatusBadge.d.ts +1 -1
  154. package/build/components/StatusBadge.d.ts.map +1 -1
  155. package/build/components/StatusBadge.js +4 -0
  156. package/build/components/StatusBadge.js.map +1 -1
  157. package/build/components/SyncAllInSync.d.ts +14 -0
  158. package/build/components/SyncAllInSync.d.ts.map +1 -0
  159. package/build/components/SyncAllInSync.js +10 -0
  160. package/build/components/SyncAllInSync.js.map +1 -0
  161. package/build/components/SyncDriftedList.d.ts +24 -0
  162. package/build/components/SyncDriftedList.d.ts.map +1 -0
  163. package/build/components/SyncDriftedList.js +17 -0
  164. package/build/components/SyncDriftedList.js.map +1 -0
  165. package/build/components/SyncNoAssets.d.ts +12 -0
  166. package/build/components/SyncNoAssets.d.ts.map +1 -0
  167. package/build/components/SyncNoAssets.js +9 -0
  168. package/build/components/SyncNoAssets.js.map +1 -0
  169. package/build/components/index.d.ts +14 -2
  170. package/build/components/index.d.ts.map +1 -1
  171. package/build/components/index.js +14 -2
  172. package/build/components/index.js.map +1 -1
  173. package/build/hooks/useBrowseState.d.ts +41 -1
  174. package/build/hooks/useBrowseState.d.ts.map +1 -1
  175. package/build/hooks/useBrowseState.js +142 -12
  176. package/build/hooks/useBrowseState.js.map +1 -1
  177. package/build/hooks/useConfirmation.d.ts +18 -0
  178. package/build/hooks/useConfirmation.d.ts.map +1 -0
  179. package/build/hooks/useConfirmation.js +56 -0
  180. package/build/hooks/useConfirmation.js.map +1 -0
  181. package/build/hooks/useInitState.d.ts +72 -0
  182. package/build/hooks/useInitState.d.ts.map +1 -0
  183. package/build/hooks/useInitState.js +372 -0
  184. package/build/hooks/useInitState.js.map +1 -0
  185. package/build/hooks/useListActions.d.ts +15 -0
  186. package/build/hooks/useListActions.d.ts.map +1 -0
  187. package/build/hooks/useListActions.js +155 -0
  188. package/build/hooks/useListActions.js.map +1 -0
  189. package/build/hooks/useListState.d.ts +151 -0
  190. package/build/hooks/useListState.d.ts.map +1 -0
  191. package/build/hooks/useListState.js +448 -0
  192. package/build/hooks/useListState.js.map +1 -0
  193. package/build/hooks/usePruneState.d.ts +76 -0
  194. package/build/hooks/usePruneState.d.ts.map +1 -0
  195. package/build/hooks/usePruneState.js +246 -0
  196. package/build/hooks/usePruneState.js.map +1 -0
  197. package/build/hooks/usePublishState.d.ts +115 -0
  198. package/build/hooks/usePublishState.d.ts.map +1 -0
  199. package/build/hooks/usePublishState.js +673 -0
  200. package/build/hooks/usePublishState.js.map +1 -0
  201. package/build/hooks/useSetupState.d.ts +57 -0
  202. package/build/hooks/useSetupState.d.ts.map +1 -0
  203. package/build/hooks/useSetupState.js +236 -0
  204. package/build/hooks/useSetupState.js.map +1 -0
  205. package/build/hooks/useUninstallState.d.ts +102 -0
  206. package/build/hooks/useUninstallState.d.ts.map +1 -0
  207. package/build/hooks/useUninstallState.js +342 -0
  208. package/build/hooks/useUninstallState.js.map +1 -0
  209. package/build/lib/adapter.d.ts +21 -0
  210. package/build/lib/adapter.d.ts.map +1 -1
  211. package/build/lib/adapter.js +59 -1
  212. package/build/lib/adapter.js.map +1 -1
  213. package/build/lib/checksum.d.ts +39 -0
  214. package/build/lib/checksum.d.ts.map +1 -1
  215. package/build/lib/checksum.js +101 -13
  216. package/build/lib/checksum.js.map +1 -1
  217. package/build/lib/config.d.ts +38 -18
  218. package/build/lib/config.d.ts.map +1 -1
  219. package/build/lib/config.js +107 -55
  220. package/build/lib/config.js.map +1 -1
  221. package/build/lib/detector.d.ts +2 -11
  222. package/build/lib/detector.d.ts.map +1 -1
  223. package/build/lib/detector.js +2 -64
  224. package/build/lib/detector.js.map +1 -1
  225. package/build/lib/diagnostics.d.ts +7 -0
  226. package/build/lib/diagnostics.d.ts.map +1 -1
  227. package/build/lib/diagnostics.js +54 -34
  228. package/build/lib/diagnostics.js.map +1 -1
  229. package/build/lib/diff-command.d.ts +40 -0
  230. package/build/lib/diff-command.d.ts.map +1 -0
  231. package/build/lib/diff-command.js +145 -0
  232. package/build/lib/diff-command.js.map +1 -0
  233. package/build/lib/diff.d.ts +7 -0
  234. package/build/lib/diff.d.ts.map +1 -1
  235. package/build/lib/diff.js +15 -10
  236. package/build/lib/diff.js.map +1 -1
  237. package/build/lib/format.d.ts +6 -0
  238. package/build/lib/format.d.ts.map +1 -0
  239. package/build/lib/format.js +18 -0
  240. package/build/lib/format.js.map +1 -0
  241. package/build/lib/github.d.ts +8 -0
  242. package/build/lib/github.d.ts.map +1 -1
  243. package/build/lib/github.js +9 -0
  244. package/build/lib/github.js.map +1 -1
  245. package/build/lib/gitignore.d.ts +17 -0
  246. package/build/lib/gitignore.d.ts.map +1 -1
  247. package/build/lib/gitignore.js +17 -1
  248. package/build/lib/gitignore.js.map +1 -1
  249. package/build/lib/installer.d.ts +1 -0
  250. package/build/lib/installer.d.ts.map +1 -1
  251. package/build/lib/installer.js +7 -7
  252. package/build/lib/installer.js.map +1 -1
  253. package/build/lib/lockfile.d.ts +19 -17
  254. package/build/lib/lockfile.d.ts.map +1 -1
  255. package/build/lib/lockfile.js +43 -67
  256. package/build/lib/lockfile.js.map +1 -1
  257. package/build/lib/publisher.d.ts +35 -0
  258. package/build/lib/publisher.d.ts.map +1 -1
  259. package/build/lib/publisher.js +210 -16
  260. package/build/lib/publisher.js.map +1 -1
  261. package/build/lib/registry.d.ts +20 -5
  262. package/build/lib/registry.d.ts.map +1 -1
  263. package/build/lib/registry.js +41 -30
  264. package/build/lib/registry.js.map +1 -1
  265. package/build/lib/schemas/config.d.ts +31 -3
  266. package/build/lib/schemas/config.d.ts.map +1 -1
  267. package/build/lib/schemas/config.js +21 -2
  268. package/build/lib/schemas/config.js.map +1 -1
  269. package/build/lib/schemas/index.d.ts +1 -1
  270. package/build/lib/schemas/index.d.ts.map +1 -1
  271. package/build/lib/schemas/index.js +1 -1
  272. package/build/lib/schemas/index.js.map +1 -1
  273. package/build/lib/schemas/lockfile.d.ts +18 -2
  274. package/build/lib/schemas/lockfile.d.ts.map +1 -1
  275. package/build/lib/schemas/lockfile.js +10 -1
  276. package/build/lib/schemas/lockfile.js.map +1 -1
  277. package/build/lib/search.d.ts +15 -1
  278. package/build/lib/search.d.ts.map +1 -1
  279. package/build/lib/search.js +65 -65
  280. package/build/lib/search.js.map +1 -1
  281. package/build/lib/setup.d.ts +28 -0
  282. package/build/lib/setup.d.ts.map +1 -0
  283. package/build/lib/setup.js +98 -0
  284. package/build/lib/setup.js.map +1 -0
  285. package/build/lib/sync.d.ts +109 -0
  286. package/build/lib/sync.d.ts.map +1 -0
  287. package/build/lib/sync.js +221 -0
  288. package/build/lib/sync.js.map +1 -0
  289. package/build/lib/tool-resolver.d.ts +29 -6
  290. package/build/lib/tool-resolver.d.ts.map +1 -1
  291. package/build/lib/tool-resolver.js +54 -15
  292. package/build/lib/tool-resolver.js.map +1 -1
  293. package/build/lib/updater.d.ts +7 -4
  294. package/build/lib/updater.d.ts.map +1 -1
  295. package/build/lib/updater.js +12 -7
  296. package/build/lib/updater.js.map +1 -1
  297. package/build/lib/version.js +1 -1
  298. package/build/lib/version.js.map +1 -1
  299. package/package.json +79 -65
  300. package/tool-adapters/claude-code.json +1 -1
  301. package/tool-adapters/copilot-cli.json +1 -1
@@ -1,12 +1,43 @@
1
1
  import { createHash } from 'node:crypto';
2
2
  import { readdir, readFile } from 'node:fs/promises';
3
3
  import { join } from 'node:path';
4
+ /** Recursively collect all files in a directory. */
5
+ export async function collectFilesRecursive(dirPath, baseDir) {
6
+ const results = [];
7
+ const entries = await readdir(dirPath, { withFileTypes: true });
8
+ for (const entry of entries) {
9
+ const fullPath = join(dirPath, entry.name);
10
+ if (entry.isDirectory()) {
11
+ const subFiles = await collectFilesRecursive(fullPath, baseDir);
12
+ results.push(...subFiles);
13
+ }
14
+ else if (entry.isFile()) {
15
+ const relativePath = fullPath.slice(baseDir.length + 1).replace(/\\/g, '/');
16
+ results.push({ absolutePath: fullPath, relativePath });
17
+ }
18
+ }
19
+ return results;
20
+ }
21
+ /**
22
+ * Compute a deterministic SHA-256 checksum for a config entry value.
23
+ *
24
+ * Strips the `_managedBy` metadata key (added by ATK at write time),
25
+ * serializes the remaining keys in sorted order, and returns the hex digest.
26
+ * Both the installer (write path) and the verifier (read path) use this
27
+ * helper so the checksum logic stays in one place.
28
+ */
29
+ export function computeConfigEntryChecksum(entry) {
30
+ const cleaned = { ...entry };
31
+ delete cleaned['_managedBy'];
32
+ const serialized = JSON.stringify(cleaned, Object.keys(cleaned).sort());
33
+ return hashString(serialized);
34
+ }
4
35
  /**
5
36
  * Compute a combined SHA-256 hash for all files in a directory (recursively).
6
37
  * Files are sorted by relative path to ensure deterministic output.
7
38
  */
8
39
  export async function hashDirectory(dirPath) {
9
- const files = await collectFiles(dirPath, dirPath);
40
+ const files = await collectFilesRecursive(dirPath, dirPath);
10
41
  files.sort((a, b) => a.relativePath.localeCompare(b.relativePath));
11
42
  const hash = createHash('sha256');
12
43
  for (const file of files) {
@@ -58,21 +89,78 @@ export async function verifyChecksums(files) {
58
89
  }
59
90
  return failures;
60
91
  }
61
- /** Recursively collect all files in a directory. */
62
- async function collectFiles(dirPath, baseDir) {
63
- const results = [];
64
- const entries = await readdir(dirPath, { withFileTypes: true });
92
+ /**
93
+ * Verify config-file entries against their expected checksums.
94
+ *
95
+ * For each entry the function:
96
+ * 1. Reads and parses the config file as JSON → `CONFIG_FILE_NOT_FOUND` on failure.
97
+ * 2. Splits the dot-path key into section/child and looks up the value →
98
+ * `CONFIG_KEY_NOT_FOUND` if missing.
99
+ * 3. Computes a checksum via `computeConfigEntryChecksum()` and compares →
100
+ * `CONFIG_CHECKSUM_MISMATCH` on divergence.
101
+ *
102
+ * Returns only the entries that failed (empty array = all OK).
103
+ */
104
+ export async function verifyConfigEntries(entries, projectDir) {
105
+ const failures = [];
65
106
  for (const entry of entries) {
66
- const fullPath = join(dirPath, entry.name);
67
- if (entry.isDirectory()) {
68
- const subFiles = await collectFiles(fullPath, baseDir);
69
- results.push(...subFiles);
107
+ const absolutePath = join(projectDir, entry.file);
108
+ // 1. Read and parse the config file
109
+ let config;
110
+ try {
111
+ const raw = await readFile(absolutePath, 'utf-8');
112
+ config = JSON.parse(raw);
70
113
  }
71
- else if (entry.isFile()) {
72
- const relativePath = fullPath.slice(baseDir.length + 1).replace(/\\/g, '/');
73
- results.push({ absolutePath: fullPath, relativePath });
114
+ catch {
115
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_FILE_NOT_FOUND' });
116
+ continue;
117
+ }
118
+ // 2. Look up the value via dot-path (sectionKey.childKey)
119
+ const dotIndex = entry.key.indexOf('.');
120
+ const sectionKey = dotIndex === -1 ? entry.key : entry.key.slice(0, dotIndex);
121
+ const childKey = dotIndex === -1 ? undefined : entry.key.slice(dotIndex + 1);
122
+ const section = config[sectionKey];
123
+ if (childKey === undefined ||
124
+ section === null ||
125
+ section === undefined ||
126
+ typeof section !== 'object') {
127
+ // No child key means the key format is unexpected, or section missing
128
+ if (childKey === undefined) {
129
+ // Single-segment key — look up directly
130
+ if (!(sectionKey in config)) {
131
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
132
+ continue;
133
+ }
134
+ const value = config[sectionKey];
135
+ if (value === null || value === undefined || typeof value !== 'object') {
136
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
137
+ continue;
138
+ }
139
+ const actual = computeConfigEntryChecksum(value);
140
+ if (actual !== entry.checksum) {
141
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_CHECKSUM_MISMATCH' });
142
+ }
143
+ continue;
144
+ }
145
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
146
+ continue;
147
+ }
148
+ const sectionObj = section;
149
+ if (!(childKey in sectionObj)) {
150
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
151
+ continue;
152
+ }
153
+ const value = sectionObj[childKey];
154
+ if (value === null || value === undefined || typeof value !== 'object') {
155
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_KEY_NOT_FOUND' });
156
+ continue;
157
+ }
158
+ // 3. Compute checksum and compare
159
+ const actual = computeConfigEntryChecksum(value);
160
+ if (actual !== entry.checksum) {
161
+ failures.push({ file: entry.file, key: entry.key, reason: 'CONFIG_CHECKSUM_MISMATCH' });
74
162
  }
75
163
  }
76
- return results;
164
+ return failures;
77
165
  }
78
166
  //# sourceMappingURL=checksum.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,aAAa,CAAC;AACzC,OAAO,EAAE,OAAO,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AACrD,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,OAAe;IACjD,MAAM,KAAK,GAAG,MAAM,YAAY,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;IACnD,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,aAAa,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC;IAEnE,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,CAAC;IAElC,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,gEAAgE;QAChE,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAC/B,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;IACvB,CAAC;IAED,OAAO,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5B,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,QAAQ,CAAC,QAAgB;IAC7C,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACzC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC5D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,UAAU,CAAC,OAAe;IACxC,OAAO,UAAU,CAAC,QAAQ,CAAC,CAAC,MAAM,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACrE,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,cAAc,CAAC,QAAgB,EAAE,gBAAwB;IAC7E,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,QAAQ,CAAC,CAAC;IACxC,OAAO,MAAM,KAAK,gBAAgB,CAAC;AACrC,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe,CACnC,KAAgD;IAEhD,MAAM,QAAQ,GAA8D,EAAE,CAAC;IAE/E,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;QACzB,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,MAAM,KAAK,IAAI,CAAC,QAAQ,EAAE,CAAC;gBAC7B,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,MAAM,MAAM,GAAG,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;YACtE,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,EAAE,mBAAmB,MAAM,EAAE,EAAE,QAAQ,EAAE,IAAI,CAAC,QAAQ,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;QACnG,CAAC;IACH,CAAC;IAED,OAAO,QAAQ,CAAC;AAClB,CAAC;AAED,oDAAoD;AACpD,KAAK,UAAU,YAAY,CACzB,OAAe,EACf,OAAe;IAEf,MAAM,OAAO,GAA0D,EAAE,CAAC;IAC1E,MAAM,OAAO,GAAG,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;IAEhE,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;QAC5B,MAAM,QAAQ,GAAG,IAAI,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;YACxB,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACvD,OAAO,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,CAAC;QAC5B,CAAC;aAAM,IAAI,KAAK,CAAC,MAAM,EAAE,EAAE,CAAC;YAC1B,MAAM,YAAY,GAAG,QAAQ,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;YAC5E,OAAO,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,QAAQ,EAAE,YAAY,EAAE,CAAC,CAAC;QACzD,CAAC;IACH,CAAC;IAED,OAAO,OAAO,CAAC;AACjB,CAAC"}
1
+ {"version":3,"file":"checksum.js","sourceRoot":"","sources":["../../src/lib/checksum.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,10 @@
1
+ import type { AssetType } from './schemas/manifest.js';
1
2
  import { type Config, type ProjectConfig } from './schemas/config.js';
3
+ /**
4
+ * Freeze an asset by adding it to the project config's `frozenAssets` array.
5
+ * No-op if the asset is already frozen with the same name, type, and org.
6
+ */
7
+ export declare function freezeAssetInConfig(projectDir: string, name: string, type: AssetType, org?: string): Promise<void>;
2
8
  /**
3
9
  * Get the path to the ATK cache directory (~/.atk/cache/).
4
10
  */
@@ -11,6 +17,26 @@ export declare function getConfigPath(): string;
11
17
  * Get a single config value by key.
12
18
  */
13
19
  export declare function getConfigValue(config: Config, key: string): unknown;
20
+ /**
21
+ * Get the path to the project-level config file (.atkrc.json in project root).
22
+ */
23
+ export declare function getProjectConfigPath(projectDir: string): string;
24
+ /**
25
+ * Check whether a local project config (.atkrc.json) exists in the given directory.
26
+ * The config stores the developer's selected tools (`tools: string[]`).
27
+ */
28
+ export declare function hasLocalConfig(projectDir: string): boolean;
29
+ /**
30
+ * Check whether an asset is frozen in the project config.
31
+ * Loads the project config from disk each time — for batch checks use `isFrozenInConfig` instead.
32
+ */
33
+ export declare function isAssetFrozen(projectDir: string, name: string, type?: AssetType, org?: string): Promise<boolean>;
34
+ /**
35
+ * Synchronous check whether an asset is frozen in a pre-loaded project config.
36
+ * Useful for batch operations (sync, update, outdated) where loading config once
37
+ * and checking many assets is more efficient.
38
+ */
39
+ export declare function isFrozenInConfig(config: null | ProjectConfig, name: string, type?: AssetType, org?: string): boolean;
14
40
  /**
15
41
  * List all known config keys with their current values and defaults.
16
42
  */
@@ -25,6 +51,12 @@ export declare function listConfigEntries(config: Config): Array<{
25
51
  * Creates no file if none exists — defaults are used.
26
52
  */
27
53
  export declare function loadConfig(): Promise<Config>;
54
+ /**
55
+ * Load the project-level config from .atkrc.json in the project directory.
56
+ * Returns null if no project config exists.
57
+ * Legacy `{ tool: string }` files are automatically migrated to `{ tools: string[] }` on read via schema preprocess.
58
+ */
59
+ export declare function loadProjectConfig(projectDir: string): Promise<null | ProjectConfig>;
28
60
  /**
29
61
  * Reset a config key back to its default value.
30
62
  * Returns the updated config.
@@ -34,26 +66,9 @@ export declare function resetConfigValue(config: Config, key: string): Config;
34
66
  * Save the full config object to ~/.atkrc.json.
35
67
  */
36
68
  export declare function saveConfig(config: Config): Promise<void>;
37
- /**
38
- * Get the path to the project-level config file (.atkrc.json in project root).
39
- */
40
- export declare function getProjectConfigPath(projectDir: string): string;
41
- /**
42
- * Check whether a local project config (.atkrc.json) exists in the given directory.
43
- */
44
- export declare function hasLocalConfig(projectDir: string): boolean;
45
- /**
46
- * Load merged config: user-level config only.
47
- * Project config now only stores `{ tool }` and does not contribute to Config fields.
48
- */
49
- export declare function loadMergedConfig(projectDir: string): Promise<Config>;
50
- /**
51
- * Load the project-level config from .atkrc.json in the project directory.
52
- * Returns null if no project config exists.
53
- */
54
- export declare function loadProjectConfig(projectDir: string): Promise<null | ProjectConfig>;
55
69
  /**
56
70
  * Save the project-level config to .atkrc.json in the project directory.
71
+ * Always writes the new `{ tools: string[] }` format, never the legacy `{ tool }` format.
57
72
  */
58
73
  export declare function saveProjectConfig(projectDir: string, config: ProjectConfig): Promise<void>;
59
74
  /**
@@ -61,4 +76,9 @@ export declare function saveProjectConfig(projectDir: string, config: ProjectCon
61
76
  * Returns the updated config. Validates the result against the schema.
62
77
  */
63
78
  export declare function setConfigValue(config: Config, key: string, value: string): Config;
79
+ /**
80
+ * Thaw an asset by removing it from the project config's `frozenAssets` array.
81
+ * Removes all entries matching the given name, and optionally type and org.
82
+ */
83
+ export declare function thawAssetInConfig(projectDir: string, name: string, type?: AssetType, org?: string): Promise<void>;
64
84
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAI7B;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAe5G;AAED;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAUlD;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9D;AAID;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAsB,gBAAgB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,CAK1E;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CASzF;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAiBhG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CAuBjF"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"AAMA,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,uBAAuB,CAAC;AAGvD,OAAO,EACL,KAAK,MAAM,EAGX,KAAK,aAAa,EAEnB,MAAM,qBAAqB,CAAC;AAI7B;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,EAAE,SAAS,EACf,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAuBf;AAED;;GAEG;AACH,wBAAgB,WAAW,CAAC,MAAM,CAAC,EAAE,MAAM,GAAG,MAAM,CAEnD;AAED;;GAEG;AACH,wBAAgB,aAAa,IAAI,MAAM,CAEtC;AAED;;GAEG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,OAAO,CAKnE;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,UAAU,EAAE,MAAM,GAAG,MAAM,CAE/D;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAE1D;AAED;;;GAGG;AACH,wBAAsB,aAAa,CACjC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,OAAO,CAAC,CAGlB;AAED;;;;GAIG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,IAAI,GAAG,aAAa,EAC5B,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAWT;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAAC,MAAM,EAAE,MAAM,GAAG,KAAK,CAAC;IAAE,SAAS,EAAE,OAAO,CAAC;IAAC,GAAG,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,OAAO,CAAA;CAAE,CAAC,CAQ5G;AAED;;;;GAIG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,CAAC,CAUlD;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,GAAG,aAAa,CAAC,CASzF;AAED;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,MAAM,CAgBpE;AAED;;GAEG;AACH,wBAAsB,UAAU,CAAC,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAkB9D;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,aAAa,GAAG,OAAO,CAAC,IAAI,CAAC,CAmBhG;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,GAAG,MAAM,CA2BjF;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CACrC,UAAU,EAAE,MAAM,EAClB,IAAI,EAAE,MAAM,EACZ,IAAI,CAAC,EAAE,SAAS,EAChB,GAAG,CAAC,EAAE,MAAM,GACX,OAAO,CAAC,IAAI,CAAC,CAsBf"}
@@ -2,9 +2,33 @@ import { existsSync } from 'node:fs';
2
2
  import { mkdir, readFile, writeFile } from 'node:fs/promises';
3
3
  import { homedir } from 'node:os';
4
4
  import { dirname, join } from 'node:path';
5
+ import { z } from 'zod';
5
6
  import { parseAndValidate } from './parse-json.js';
6
7
  import { ConfigSchema, DEFAULT_CONFIG, ProjectConfigSchema, } from './schemas/config.js';
7
- const CONFIG_FILENAME = '.atkrc.json';
8
+ const ATKRC_FILENAME = '.atkrc.json';
9
+ /**
10
+ * Freeze an asset by adding it to the project config's `frozenAssets` array.
11
+ * No-op if the asset is already frozen with the same name, type, and org.
12
+ */
13
+ export async function freezeAssetInConfig(projectDir, name, type, org) {
14
+ const config = await loadProjectConfig(projectDir);
15
+ if (!config) {
16
+ throw new Error(`No project config found in ${projectDir}. Run \`atk setup\` first.`);
17
+ }
18
+ const frozenAssets = config.frozenAssets ?? [];
19
+ // Already frozen — nothing to do
20
+ if (frozenAssets.some((entry) => entry.name === name && entry.type === type && entry.org === org)) {
21
+ return;
22
+ }
23
+ const entry = { name, type };
24
+ if (org !== undefined) {
25
+ entry.org = org;
26
+ }
27
+ await saveProjectConfig(projectDir, {
28
+ ...config,
29
+ frozenAssets: [...frozenAssets, entry],
30
+ });
31
+ }
8
32
  /**
9
33
  * Get the path to the ATK cache directory (~/.atk/cache/).
10
34
  */
@@ -15,29 +39,56 @@ export function getCacheDir(config) {
15
39
  * Get the path to the user's config file (~/.atkrc.json).
16
40
  */
17
41
  export function getConfigPath() {
18
- return join(homedir(), CONFIG_FILENAME);
42
+ return join(homedir(), ATKRC_FILENAME);
19
43
  }
20
44
  /**
21
45
  * Get a single config value by key.
22
46
  */
23
47
  export function getConfigValue(config, key) {
24
- if (!(key in config)) {
25
- return undefined;
48
+ if (!(key in ConfigSchema.shape)) {
49
+ throw new Error(`Unknown config key: ${key}`);
26
50
  }
27
51
  return config[key];
28
52
  }
53
+ /**
54
+ * Get the path to the project-level config file (.atkrc.json in project root).
55
+ */
56
+ export function getProjectConfigPath(projectDir) {
57
+ return join(projectDir, ATKRC_FILENAME);
58
+ }
59
+ /**
60
+ * Check whether a local project config (.atkrc.json) exists in the given directory.
61
+ * The config stores the developer's selected tools (`tools: string[]`).
62
+ */
63
+ export function hasLocalConfig(projectDir) {
64
+ return existsSync(getProjectConfigPath(projectDir));
65
+ }
66
+ /**
67
+ * Check whether an asset is frozen in the project config.
68
+ * Loads the project config from disk each time — for batch checks use `isFrozenInConfig` instead.
69
+ */
70
+ export async function isAssetFrozen(projectDir, name, type, org) {
71
+ const config = await loadProjectConfig(projectDir);
72
+ return isFrozenInConfig(config, name, type, org);
73
+ }
74
+ /**
75
+ * Synchronous check whether an asset is frozen in a pre-loaded project config.
76
+ * Useful for batch operations (sync, update, outdated) where loading config once
77
+ * and checking many assets is more efficient.
78
+ */
79
+ export function isFrozenInConfig(config, name, type, org) {
80
+ if (!config?.frozenAssets) {
81
+ return false;
82
+ }
83
+ return config.frozenAssets.some((entry) => entry.name === name &&
84
+ (type === undefined || entry.type === type) &&
85
+ (org === undefined || entry.org === org));
86
+ }
29
87
  /**
30
88
  * List all known config keys with their current values and defaults.
31
89
  */
32
90
  export function listConfigEntries(config) {
33
- const allKeys = [
34
- 'registryUrl',
35
- 'registryBranch',
36
- 'cacheDir',
37
- 'cacheTtlMinutes',
38
- 'githubToken',
39
- 'org',
40
- ];
91
+ const allKeys = Object.keys(ConfigSchema.shape);
41
92
  return allKeys.map((key) => ({
42
93
  isDefault: config[key] === undefined || config[key] === DEFAULT_CONFIG[key],
43
94
  key,
@@ -58,6 +109,19 @@ export async function loadConfig() {
58
109
  const parsed = parseAndValidate(raw, ConfigSchema, `Invalid config at ${configPath}`);
59
110
  return { ...DEFAULT_CONFIG, ...parsed };
60
111
  }
112
+ /**
113
+ * Load the project-level config from .atkrc.json in the project directory.
114
+ * Returns null if no project config exists.
115
+ * Legacy `{ tool: string }` files are automatically migrated to `{ tools: string[] }` on read via schema preprocess.
116
+ */
117
+ export async function loadProjectConfig(projectDir) {
118
+ const configPath = getProjectConfigPath(projectDir);
119
+ if (!existsSync(configPath)) {
120
+ return null;
121
+ }
122
+ const raw = await readFile(configPath, 'utf-8');
123
+ return parseAndValidate(raw, ProjectConfigSchema, `Invalid project config at ${configPath}`);
124
+ }
61
125
  /**
62
126
  * Reset a config key back to its default value.
63
127
  * Returns the updated config.
@@ -96,43 +160,9 @@ export async function saveConfig(config) {
96
160
  }
97
161
  await writeFile(configPath, JSON.stringify(toSave, null, '\t') + '\n', 'utf-8');
98
162
  }
99
- const PROJECT_CONFIG_FILENAME = '.atkrc.json';
100
- /**
101
- * Get the path to the project-level config file (.atkrc.json in project root).
102
- */
103
- export function getProjectConfigPath(projectDir) {
104
- return join(projectDir, PROJECT_CONFIG_FILENAME);
105
- }
106
- /**
107
- * Check whether a local project config (.atkrc.json) exists in the given directory.
108
- */
109
- export function hasLocalConfig(projectDir) {
110
- return existsSync(getProjectConfigPath(projectDir));
111
- }
112
- /**
113
- * Load merged config: user-level config only.
114
- * Project config now only stores `{ tool }` and does not contribute to Config fields.
115
- */
116
- export async function loadMergedConfig(projectDir) {
117
- // projectDir is accepted for API compatibility but project config
118
- // no longer overrides any Config fields (it only stores the tool choice).
119
- void projectDir;
120
- return loadConfig();
121
- }
122
- /**
123
- * Load the project-level config from .atkrc.json in the project directory.
124
- * Returns null if no project config exists.
125
- */
126
- export async function loadProjectConfig(projectDir) {
127
- const configPath = getProjectConfigPath(projectDir);
128
- if (!existsSync(configPath)) {
129
- return null;
130
- }
131
- const raw = await readFile(configPath, 'utf-8');
132
- return parseAndValidate(raw, ProjectConfigSchema, `Invalid project config at ${configPath}`);
133
- }
134
163
  /**
135
164
  * Save the project-level config to .atkrc.json in the project directory.
165
+ * Always writes the new `{ tools: string[] }` format, never the legacy `{ tool }` format.
136
166
  */
137
167
  export async function saveProjectConfig(projectDir, config) {
138
168
  const configPath = getProjectConfigPath(projectDir);
@@ -140,12 +170,13 @@ export async function saveProjectConfig(projectDir, config) {
140
170
  if (!existsSync(dir)) {
141
171
  await mkdir(dir, { recursive: true });
142
172
  }
143
- // Strip undefined values to keep the file minimal
144
- const toSave = {};
145
- for (const [key, value] of Object.entries(config)) {
146
- if (value !== undefined) {
147
- toSave[key] = value;
148
- }
173
+ // Explicitly write `tools` array format — never the legacy `tool` field
174
+ const toSave = {
175
+ tools: config.tools,
176
+ };
177
+ // Include frozenAssets only when non-empty to keep the file minimal
178
+ if (config.frozenAssets && config.frozenAssets.length > 0) {
179
+ toSave.frozenAssets = config.frozenAssets;
149
180
  }
150
181
  await writeFile(configPath, JSON.stringify(toSave, null, '\t') + '\n', 'utf-8');
151
182
  }
@@ -157,9 +188,12 @@ export function setConfigValue(config, key, value) {
157
188
  if (!(key in ConfigSchema.shape)) {
158
189
  throw new Error(`Unknown config key: ${key}`);
159
190
  }
160
- // Coerce value types based on the key
191
+ // Schema-driven type coercion: detect number fields from the Zod schema
192
+ // and coerce string CLI input to numbers automatically.
161
193
  let coerced = value;
162
- if (key === 'cacheTtlMinutes') {
194
+ const fieldSchema = ConfigSchema.shape[key];
195
+ const jsonSchema = z.toJSONSchema(fieldSchema);
196
+ if ('type' in jsonSchema && jsonSchema.type === 'number') {
163
197
  const num = Number(value);
164
198
  if (Number.isNaN(num)) {
165
199
  throw new Error(`Invalid value for ${key}: expected a number`);
@@ -173,4 +207,22 @@ export function setConfigValue(config, key, value) {
173
207
  }
174
208
  return result.data;
175
209
  }
210
+ /**
211
+ * Thaw an asset by removing it from the project config's `frozenAssets` array.
212
+ * Removes all entries matching the given name, and optionally type and org.
213
+ */
214
+ export async function thawAssetInConfig(projectDir, name, type, org) {
215
+ const config = await loadProjectConfig(projectDir);
216
+ if (!config) {
217
+ throw new Error(`No project config found in ${projectDir}. Run \`atk setup\` first.`);
218
+ }
219
+ const frozenAssets = config.frozenAssets ?? [];
220
+ const filtered = frozenAssets.filter((entry) => !(entry.name === name &&
221
+ (type === undefined || entry.type === type) &&
222
+ (org === undefined || entry.org === org)));
223
+ await saveProjectConfig(projectDir, {
224
+ ...config,
225
+ frozenAssets: filtered,
226
+ });
227
+ }
176
228
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/lib/config.ts"],"names":[],"mappings":"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"}
@@ -1,14 +1,5 @@
1
- export interface AdapterDiagnostics {
2
- adaptersDir: string;
3
- adaptersLoaded: number;
4
- directoryExists: boolean;
5
- failures: AdapterLoadFailure[];
6
- filesFound: number;
7
- }
8
- export interface AdapterLoadFailure {
9
- filename: string;
10
- reason: string;
11
- }
1
+ import { type AdapterDiagnostics } from './adapter.js';
2
+ export type { AdapterDiagnostics, AdapterLoadFailure } from './adapter.js';
12
3
  export interface DetectionResult {
13
4
  confidence: 'high' | 'low' | 'medium';
14
5
  displayName: string;
@@ -1 +1 @@
1
- {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAcA,MAAM,WAAW,kBAAkB;IACjC,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,eAAe,EAAE,OAAO,CAAC;IACzB,QAAQ,EAAE,kBAAkB,EAAE,CAAC;IAC/B,UAAU,EAAE,MAAM,CAAC;CACpB;AAED,MAAM,WAAW,kBAAkB;IACjC,QAAQ,EAAE,MAAM,CAAC;IACjB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAOD;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAG3F;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAyChF;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAGzE"}
1
+ {"version":3,"file":"detector.d.ts","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAGA,OAAO,EACL,KAAK,kBAAkB,EAGxB,MAAM,cAAc,CAAC;AAEtB,YAAY,EAAE,kBAAkB,EAAE,kBAAkB,EAAE,MAAM,cAAc,CAAC;AAE3E,MAAM,WAAW,eAAe;IAC9B,UAAU,EAAE,MAAM,GAAG,KAAK,GAAG,QAAQ,CAAC;IACtC,WAAW,EAAE,MAAM,CAAC;IACpB,iBAAiB,EAAE,MAAM,EAAE,CAAC;IAC5B,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,iBAAiB,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,GAAG,IAAI,CAAC,CAG3F;AAED;;;;GAIG;AACH,wBAAsB,WAAW,CAAC,UAAU,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC,CAyChF;AAED;;;;GAIG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,kBAAkB,CAAC,CAGzE"}
@@ -1,13 +1,6 @@
1
1
  import { existsSync } from 'node:fs';
2
- import { readdir } from 'node:fs/promises';
3
- import { readFile } from 'node:fs/promises';
4
- import { dirname, join } from 'node:path';
5
- import { fileURLToPath } from 'node:url';
6
- import { safeParseJson } from './parse-json.js';
7
- import { AdapterSchema } from './schemas/adapter.js';
8
- const __dirname = dirname(fileURLToPath(import.meta.url));
9
- /** Resolve tool-adapters directory relative to the package root (works both in dev and when installed via npm). */
10
- const ADAPTERS_DIR = join(__dirname, '..', '..', 'tool-adapters');
2
+ import { join } from 'node:path';
3
+ import { loadAllAdapters, loadAllAdaptersWithDiagnostics, } from './adapter.js';
11
4
  /**
12
5
  * Detect the primary tool in use. Returns the highest-confidence match,
13
6
  * or null if no tool is detected.
@@ -67,59 +60,4 @@ export async function getAdapterDiagnostics() {
67
60
  const { diagnostics } = await loadAllAdaptersWithDiagnostics();
68
61
  return diagnostics;
69
62
  }
70
- /**
71
- * Load all adapter JSON files from the tool-adapters directory.
72
- */
73
- async function loadAllAdapters() {
74
- const { adapters } = await loadAllAdaptersWithDiagnostics();
75
- return adapters;
76
- }
77
- /**
78
- * Load all adapter JSON files from the tool-adapters directory,
79
- * tracking diagnostic information about the loading process.
80
- */
81
- async function loadAllAdaptersWithDiagnostics() {
82
- const diagnostics = {
83
- adaptersDir: ADAPTERS_DIR,
84
- adaptersLoaded: 0,
85
- directoryExists: false,
86
- failures: [],
87
- filesFound: 0,
88
- };
89
- if (!existsSync(ADAPTERS_DIR)) {
90
- return { adapters: [], diagnostics };
91
- }
92
- diagnostics.directoryExists = true;
93
- const entries = await readdir(ADAPTERS_DIR);
94
- const adapters = [];
95
- for (const entry of entries) {
96
- // Skip schema files and non-JSON files
97
- if (entry.startsWith('_') || !entry.endsWith('.json')) {
98
- continue;
99
- }
100
- diagnostics.filesFound++;
101
- const filePath = join(ADAPTERS_DIR, entry);
102
- try {
103
- const raw = await readFile(filePath, 'utf-8');
104
- const result = safeParseJson(raw, AdapterSchema, `Schema validation failed`);
105
- if (result.success) {
106
- adapters.push(result.data);
107
- diagnostics.adaptersLoaded++;
108
- }
109
- else {
110
- diagnostics.failures.push({
111
- filename: entry,
112
- reason: result.error,
113
- });
114
- }
115
- }
116
- catch (err) {
117
- diagnostics.failures.push({
118
- filename: entry,
119
- reason: err instanceof Error ? err.message : 'Unknown parse error',
120
- });
121
- }
122
- }
123
- return { adapters, diagnostics };
124
- }
125
63
  //# sourceMappingURL=detector.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"detector.js","sourceRoot":"","sources":["../../src/lib/detector.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AACrC,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAEjC,OAAO,EAEL,eAAe,EACf,8BAA8B,GAC/B,MAAM,cAAc,CAAC;AAWtB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB,CAAC,UAAkB;IACxD,MAAM,OAAO,GAAG,MAAM,WAAW,CAAC,UAAU,CAAC,CAAC;IAC9C,OAAO,OAAO,CAAC,CAAC,CAAC,IAAI,IAAI,CAAC;AAC5B,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,UAAkB;IAClD,MAAM,QAAQ,GAAG,MAAM,eAAe,EAAE,CAAC;IACzC,MAAM,OAAO,GAAsB,EAAE,CAAC;IAEtC,KAAK,MAAM,OAAO,IAAI,QAAQ,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAa,EAAE,CAAC;QAE7B,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC,eAAe,EAAE,CAAC;YAChD,MAAM,QAAQ,GAAG,IAAI,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC;YAC7C,IAAI,UAAU,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACzB,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;YAC1B,CAAC;QACH,CAAC;QAED,IAAI,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACvB,MAAM,KAAK,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC;YAC7C,MAAM,KAAK,GAAG,OAAO,CAAC,MAAM,GAAG,KAAK,CAAC;YAErC,IAAI,UAAqC,CAAC;YAC1C,IAAI,KAAK,IAAI,IAAI,EAAE,CAAC;gBAClB,UAAU,GAAG,MAAM,CAAC;YACtB,CAAC;iBAAM,IAAI,KAAK,IAAI,GAAG,EAAE,CAAC;gBACxB,UAAU,GAAG,QAAQ,CAAC;YACxB,CAAC;iBAAM,CAAC;gBACN,UAAU,GAAG,KAAK,CAAC;YACrB,CAAC;YAED,OAAO,CAAC,IAAI,CAAC;gBACX,UAAU;gBACV,WAAW,EAAE,OAAO,CAAC,WAAW;gBAChC,iBAAiB,EAAE,OAAO;gBAC1B,IAAI,EAAE,OAAO,CAAC,IAAI;aACnB,CAAC,CAAC;QACL,CAAC;IACH,CAAC;IAED,0CAA0C;IAC1C,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;IAC7C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC;IAElE,OAAO,OAAO,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,EAAE,WAAW,EAAE,GAAG,MAAM,8BAA8B,EAAE,CAAC;IAC/D,OAAO,WAAW,CAAC;AACrB,CAAC"}
@@ -1,4 +1,11 @@
1
1
  import type { DiagnosticCheck } from '../components/index.js';
2
+ /**
3
+ * Check whether the given Node.js version string meets the project requirements.
4
+ *
5
+ * @param version - a Node.js-style version string such as `process.version` (e.g. "v24.5.0")
6
+ * @returns a `DiagnosticCheck` with status pass / warn / fail
7
+ */
8
+ export declare function checkNodeVersion(version: string): DiagnosticCheck;
2
9
  /**
3
10
  * Run all environment diagnostic checks and return the results.
4
11
  * Extracted from the `doctor` command so it can be tested independently.
@@ -1 +1 @@
1
- {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC,CAsM5B"}
1
+ {"version":3,"file":"diagnostics.d.ts","sourceRoot":"","sources":["../../src/lib/diagnostics.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,eAAe,EAAE,MAAM,wBAAwB,CAAC;AAS9D;;;;;GAKG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,MAAM,GAAG,eAAe,CAqBjE;AAED;;;;;;GAMG;AACH,wBAAsB,cAAc,CAClC,QAAQ,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,EACnC,mBAAmB,CAAC,EAAE,MAAM,GAC3B,OAAO,CAAC,eAAe,EAAE,CAAC,CA8L5B"}