@detergent-software/atk 8.9.0-dev.9 → 8.9.1-dev.1

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 (260) hide show
  1. package/CHANGELOG.md +262 -0
  2. package/README.md +22 -12
  3. package/build/cli.js +18 -6
  4. package/build/cli.js.map +1 -1
  5. package/build/command-manifest.json +1507 -0
  6. package/build/commands/_app.d.ts.map +1 -1
  7. package/build/commands/_app.js +8 -4
  8. package/build/commands/_app.js.map +1 -1
  9. package/build/commands/audit.d.ts.map +1 -1
  10. package/build/commands/audit.js +1 -1
  11. package/build/commands/audit.js.map +1 -1
  12. package/build/commands/browse.js +2 -2
  13. package/build/commands/browse.js.map +1 -1
  14. package/build/commands/cache.d.ts +1 -1
  15. package/build/commands/cache.d.ts.map +1 -1
  16. package/build/commands/cache.js +1 -16
  17. package/build/commands/cache.js.map +1 -1
  18. package/build/commands/config.d.ts.map +1 -1
  19. package/build/commands/config.js +1 -1
  20. package/build/commands/config.js.map +1 -1
  21. package/build/commands/diff.d.ts.map +1 -1
  22. package/build/commands/diff.js +4 -0
  23. package/build/commands/diff.js.map +1 -1
  24. package/build/commands/drift.d.ts.map +1 -1
  25. package/build/commands/drift.js +4 -0
  26. package/build/commands/drift.js.map +1 -1
  27. package/build/commands/index.d.ts.map +1 -1
  28. package/build/commands/index.js +5 -40
  29. package/build/commands/index.js.map +1 -1
  30. package/build/commands/info.d.ts.map +1 -1
  31. package/build/commands/info.js +50 -33
  32. package/build/commands/info.js.map +1 -1
  33. package/build/commands/init.d.ts.map +1 -1
  34. package/build/commands/init.js +4 -2
  35. package/build/commands/init.js.map +1 -1
  36. package/build/commands/install.d.ts.map +1 -1
  37. package/build/commands/install.js +28 -7
  38. package/build/commands/install.js.map +1 -1
  39. package/build/commands/list.js +2 -2
  40. package/build/commands/list.js.map +1 -1
  41. package/build/commands/login.d.ts.map +1 -1
  42. package/build/commands/login.js +12 -2
  43. package/build/commands/login.js.map +1 -1
  44. package/build/commands/logout.d.ts.map +1 -1
  45. package/build/commands/logout.js +9 -1
  46. package/build/commands/logout.js.map +1 -1
  47. package/build/commands/outdated.js +1 -1
  48. package/build/commands/outdated.js.map +1 -1
  49. package/build/commands/prune.d.ts.map +1 -1
  50. package/build/commands/prune.js +4 -2
  51. package/build/commands/prune.js.map +1 -1
  52. package/build/commands/publish.d.ts +1 -1
  53. package/build/commands/publish.d.ts.map +1 -1
  54. package/build/commands/publish.js +14 -14
  55. package/build/commands/publish.js.map +1 -1
  56. package/build/commands/release-notes.d.ts.map +1 -1
  57. package/build/commands/release-notes.js +4 -0
  58. package/build/commands/release-notes.js.map +1 -1
  59. package/build/commands/schema.d.ts +3 -3
  60. package/build/commands/search.js +1 -1
  61. package/build/commands/search.js.map +1 -1
  62. package/build/commands/sync.d.ts +1 -1
  63. package/build/commands/sync.d.ts.map +1 -1
  64. package/build/commands/sync.js +27 -12
  65. package/build/commands/sync.js.map +1 -1
  66. package/build/commands/update.d.ts.map +1 -1
  67. package/build/commands/update.js +58 -9
  68. package/build/commands/update.js.map +1 -1
  69. package/build/commands/whoami.d.ts.map +1 -1
  70. package/build/commands/whoami.js +16 -4
  71. package/build/commands/whoami.js.map +1 -1
  72. package/build/commands/why.js +3 -4
  73. package/build/commands/why.js.map +1 -1
  74. package/build/components/Header.d.ts +2 -3
  75. package/build/components/Header.d.ts.map +1 -1
  76. package/build/components/Header.js +2 -9
  77. package/build/components/Header.js.map +1 -1
  78. package/build/components/LocalEditsHint.d.ts +16 -0
  79. package/build/components/LocalEditsHint.d.ts.map +1 -0
  80. package/build/components/LocalEditsHint.js +18 -0
  81. package/build/components/LocalEditsHint.js.map +1 -0
  82. package/build/components/SyncAllInSync.d.ts +5 -1
  83. package/build/components/SyncAllInSync.d.ts.map +1 -1
  84. package/build/components/SyncAllInSync.js +2 -2
  85. package/build/components/SyncAllInSync.js.map +1 -1
  86. package/build/components/header-art.d.ts +7 -0
  87. package/build/components/header-art.d.ts.map +1 -0
  88. package/build/components/header-art.js +14 -0
  89. package/build/components/header-art.js.map +1 -0
  90. package/build/components/index.d.ts +1 -0
  91. package/build/components/index.d.ts.map +1 -1
  92. package/build/components/index.js +1 -0
  93. package/build/components/index.js.map +1 -1
  94. package/build/hooks/useListActions.d.ts.map +1 -1
  95. package/build/hooks/useListActions.js +4 -0
  96. package/build/hooks/useListActions.js.map +1 -1
  97. package/build/hooks/usePruneState.d.ts +1 -7
  98. package/build/hooks/usePruneState.d.ts.map +1 -1
  99. package/build/hooks/usePruneState.js +18 -62
  100. package/build/hooks/usePruneState.js.map +1 -1
  101. package/build/lib/adapter.d.ts +10 -1
  102. package/build/lib/adapter.d.ts.map +1 -1
  103. package/build/lib/adapter.js +23 -0
  104. package/build/lib/adapter.js.map +1 -1
  105. package/build/lib/api-client.d.ts +9 -5
  106. package/build/lib/api-client.d.ts.map +1 -1
  107. package/build/lib/api-client.js +35 -8
  108. package/build/lib/api-client.js.map +1 -1
  109. package/build/lib/auth.d.ts +12 -2
  110. package/build/lib/auth.d.ts.map +1 -1
  111. package/build/lib/auth.js +38 -3
  112. package/build/lib/auth.js.map +1 -1
  113. package/build/lib/checksum.d.ts +10 -0
  114. package/build/lib/checksum.d.ts.map +1 -1
  115. package/build/lib/checksum.js +17 -0
  116. package/build/lib/checksum.js.map +1 -1
  117. package/build/lib/config.d.ts +4 -4
  118. package/build/lib/config.d.ts.map +1 -1
  119. package/build/lib/config.js +31 -8
  120. package/build/lib/config.js.map +1 -1
  121. package/build/lib/diagnostics.d.ts.map +1 -1
  122. package/build/lib/diagnostics.js +10 -7
  123. package/build/lib/diagnostics.js.map +1 -1
  124. package/build/lib/diff-command.js +1 -1
  125. package/build/lib/diff-command.js.map +1 -1
  126. package/build/lib/errors.d.ts +4 -1
  127. package/build/lib/errors.d.ts.map +1 -1
  128. package/build/lib/errors.js.map +1 -1
  129. package/build/lib/format-age.d.ts +3 -0
  130. package/build/lib/format-age.d.ts.map +1 -0
  131. package/build/lib/format-age.js +18 -0
  132. package/build/lib/format-age.js.map +1 -0
  133. package/build/lib/installer.d.ts +6 -4
  134. package/build/lib/installer.d.ts.map +1 -1
  135. package/build/lib/installer.js +53 -23
  136. package/build/lib/installer.js.map +1 -1
  137. package/build/lib/local-edits.d.ts +72 -0
  138. package/build/lib/local-edits.d.ts.map +1 -0
  139. package/build/lib/local-edits.js +145 -0
  140. package/build/lib/local-edits.js.map +1 -0
  141. package/build/lib/lockfile.d.ts +2 -2
  142. package/build/lib/lockfile.d.ts.map +1 -1
  143. package/build/lib/lockfile.js +28 -19
  144. package/build/lib/lockfile.js.map +1 -1
  145. package/build/lib/mover.d.ts.map +1 -1
  146. package/build/lib/mover.js +11 -12
  147. package/build/lib/mover.js.map +1 -1
  148. package/build/lib/multi-tool-install.d.ts +4 -2
  149. package/build/lib/multi-tool-install.d.ts.map +1 -1
  150. package/build/lib/multi-tool-install.js +12 -2
  151. package/build/lib/multi-tool-install.js.map +1 -1
  152. package/build/lib/offline.d.ts +19 -0
  153. package/build/lib/offline.d.ts.map +1 -0
  154. package/build/lib/offline.js +26 -0
  155. package/build/lib/offline.js.map +1 -0
  156. package/build/lib/owned-paths.d.ts +3 -2
  157. package/build/lib/owned-paths.d.ts.map +1 -1
  158. package/build/lib/owned-paths.js +4 -2
  159. package/build/lib/owned-paths.js.map +1 -1
  160. package/build/lib/parse-json.d.ts +12 -0
  161. package/build/lib/parse-json.d.ts.map +1 -1
  162. package/build/lib/parse-json.js +15 -2
  163. package/build/lib/parse-json.js.map +1 -1
  164. package/build/lib/pastel/commander-specs.d.ts +7 -0
  165. package/build/lib/pastel/commander-specs.d.ts.map +1 -0
  166. package/build/lib/pastel/commander-specs.js +50 -0
  167. package/build/lib/pastel/commander-specs.js.map +1 -0
  168. package/build/lib/pastel/generate-arguments.d.ts +3 -3
  169. package/build/lib/pastel/generate-arguments.d.ts.map +1 -1
  170. package/build/lib/pastel/generate-arguments.js +25 -22
  171. package/build/lib/pastel/generate-arguments.js.map +1 -1
  172. package/build/lib/pastel/generate-command.d.ts +7 -5
  173. package/build/lib/pastel/generate-command.d.ts.map +1 -1
  174. package/build/lib/pastel/generate-command.js +32 -67
  175. package/build/lib/pastel/generate-command.js.map +1 -1
  176. package/build/lib/pastel/generate-commands.d.ts +3 -5
  177. package/build/lib/pastel/generate-commands.d.ts.map +1 -1
  178. package/build/lib/pastel/generate-commands.js +6 -10
  179. package/build/lib/pastel/generate-commands.js.map +1 -1
  180. package/build/lib/pastel/generate-options.d.ts +3 -3
  181. package/build/lib/pastel/generate-options.d.ts.map +1 -1
  182. package/build/lib/pastel/generate-options.js +16 -13
  183. package/build/lib/pastel/generate-options.js.map +1 -1
  184. package/build/lib/pastel/index.d.ts +26 -4
  185. package/build/lib/pastel/index.d.ts.map +1 -1
  186. package/build/lib/pastel/index.js +104 -18
  187. package/build/lib/pastel/index.js.map +1 -1
  188. package/build/lib/pastel/internal-types.d.ts +39 -8
  189. package/build/lib/pastel/internal-types.d.ts.map +1 -1
  190. package/build/lib/pastel/manifest.d.ts +8 -0
  191. package/build/lib/pastel/manifest.d.ts.map +1 -0
  192. package/build/lib/pastel/manifest.js +7 -0
  193. package/build/lib/pastel/manifest.js.map +1 -0
  194. package/build/lib/pastel/read-commands.d.ts +7 -2
  195. package/build/lib/pastel/read-commands.d.ts.map +1 -1
  196. package/build/lib/pastel/read-commands.js +51 -30
  197. package/build/lib/pastel/read-commands.js.map +1 -1
  198. package/build/lib/pastel/render-command.d.ts +13 -0
  199. package/build/lib/pastel/render-command.d.ts.map +1 -0
  200. package/build/lib/pastel/render-command.js +56 -0
  201. package/build/lib/pastel/render-command.js.map +1 -0
  202. package/build/lib/process-alive.d.ts +11 -0
  203. package/build/lib/process-alive.d.ts.map +1 -0
  204. package/build/lib/process-alive.js +22 -0
  205. package/build/lib/process-alive.js.map +1 -0
  206. package/build/lib/pruner.d.ts +26 -0
  207. package/build/lib/pruner.d.ts.map +1 -0
  208. package/build/lib/pruner.js +42 -0
  209. package/build/lib/pruner.js.map +1 -0
  210. package/build/lib/publish-flow.d.ts +3 -6
  211. package/build/lib/publish-flow.d.ts.map +1 -1
  212. package/build/lib/publish-flow.js +199 -246
  213. package/build/lib/publish-flow.js.map +1 -1
  214. package/build/lib/publish-run.d.ts +2 -2
  215. package/build/lib/publish-run.js +11 -6
  216. package/build/lib/publish-run.js.map +1 -1
  217. package/build/lib/publisher.d.ts +23 -16
  218. package/build/lib/publisher.d.ts.map +1 -1
  219. package/build/lib/publisher.js +34 -35
  220. package/build/lib/publisher.js.map +1 -1
  221. package/build/lib/registrar.d.ts.map +1 -1
  222. package/build/lib/registrar.js +2 -2
  223. package/build/lib/registrar.js.map +1 -1
  224. package/build/lib/registry.d.ts +18 -7
  225. package/build/lib/registry.d.ts.map +1 -1
  226. package/build/lib/registry.js +113 -32
  227. package/build/lib/registry.js.map +1 -1
  228. package/build/lib/schemas/config.d.ts +3 -1
  229. package/build/lib/schemas/config.d.ts.map +1 -1
  230. package/build/lib/schemas/config.js +1 -1
  231. package/build/lib/schemas/config.js.map +1 -1
  232. package/build/lib/setup.d.ts.map +1 -1
  233. package/build/lib/setup.js +53 -48
  234. package/build/lib/setup.js.map +1 -1
  235. package/build/lib/sync.d.ts +22 -6
  236. package/build/lib/sync.d.ts.map +1 -1
  237. package/build/lib/sync.js +31 -7
  238. package/build/lib/sync.js.map +1 -1
  239. package/build/lib/uninstaller.d.ts.map +1 -1
  240. package/build/lib/uninstaller.js +6 -3
  241. package/build/lib/uninstaller.js.map +1 -1
  242. package/build/lib/update-check.d.ts +4 -0
  243. package/build/lib/update-check.d.ts.map +1 -1
  244. package/build/lib/update-check.js +55 -56
  245. package/build/lib/update-check.js.map +1 -1
  246. package/build/lib/updater.d.ts +31 -1
  247. package/build/lib/updater.d.ts.map +1 -1
  248. package/build/lib/updater.js +143 -4
  249. package/build/lib/updater.js.map +1 -1
  250. package/build/lib/usage-error.d.ts +20 -0
  251. package/build/lib/usage-error.d.ts.map +1 -0
  252. package/build/lib/usage-error.js +41 -0
  253. package/build/lib/usage-error.js.map +1 -0
  254. package/build/lib/user-setup.d.ts.map +1 -1
  255. package/build/lib/user-setup.js +62 -59
  256. package/build/lib/user-setup.js.map +1 -1
  257. package/build/lib/write-file.d.ts.map +1 -1
  258. package/build/lib/write-file.js +63 -11
  259. package/build/lib/write-file.js.map +1 -1
  260. package/package.json +3 -3
@@ -4,7 +4,7 @@ import { homedir } from 'node:os';
4
4
  import { join, resolve } from 'node:path';
5
5
  import { getConfigPath, hasUserScopeSection, loadUserScopeConfig, writeUserScopeSection } from './config.js';
6
6
  import { hasAtkGitignoreBlock } from './gitignore.js';
7
- import { getLockfilePath, readLockfile, writeLockfile } from './lockfile.js';
7
+ import { getLockfilePath, readLockfile, withLockfileErrorHandling, writeLockfile } from './lockfile.js';
8
8
  import { formatOrgName } from './org.js';
9
9
  import { isSamePath } from './same-path.js';
10
10
  import { resolveSetupOrg } from './setup.js';
@@ -25,68 +25,71 @@ export async function performUserSetup(options) {
25
25
  const actions = [];
26
26
  const warnings = [];
27
27
  const org = resolveSetupOrg(orgValue, orgLocked);
28
- const lockfilePath = getLockfilePath(userRoot);
29
- const configPath = getConfigPath();
30
- const before = await Promise.all([readIfExists(lockfilePath), readIfExists(configPath)]);
31
- const lockfileExisted = before[0] !== undefined;
32
- const adopting = lockfileExisted && !(await hasUserScopeSection());
33
- // Read both files before writing either, so a config that doesn't load fails before any change.
34
- const lockfile = await readLockfile(userRoot);
35
- const assets = lockfile.assets ?? [];
36
- const previous = await loadUserScopeConfig(userRoot);
37
- const previousTools = previous?.tools ?? [];
38
- // 1. The user lockfile. An existing one keeps its assets, and its org once set.
39
- if (!lockfileExisted) {
40
- await writeLockfile(userRoot, { assets: [], lockVersion: 1, ...(org !== undefined ? { org } : {}) });
41
- actions.push({ detail: org ? `org: ${org}` : 'no org', label: 'Created .atk-lock.json' });
42
- }
43
- else if (org && !lockfile.org) {
44
- await writeLockfile(userRoot, { ...lockfile, org });
45
- actions.push({ detail: `org: ${org}`, label: 'Set the org in .atk-lock.json' });
46
- }
47
- // 2. The `user` section. Frozen assets aren't setup's to change, so they carry over, from the
48
- // legacy top-level keys when the home directory still holds them.
49
- const { droppedLegacy } = await writeUserScopeSection({ ...(previous?.frozenAssets?.length ? { frozenAssets: previous.frozenAssets } : {}), tools: selectedTools }, { dropLegacy: isSamePath(resolve(userRoot), resolve(homedir())) });
50
- if ((await readIfExists(configPath)) !== before[1]) {
51
- const replaced = previousTools.length > 0 && previousTools.join(',') !== selectedTools.join(',');
28
+ // The lockfile is read and written under its lock, so a concurrent user-scope install's write isn't lost.
29
+ return withLockfileErrorHandling(userRoot, async () => {
30
+ const lockfilePath = getLockfilePath(userRoot);
31
+ const configPath = getConfigPath();
32
+ const before = await Promise.all([readIfExists(lockfilePath), readIfExists(configPath)]);
33
+ const lockfileExisted = before[0] !== undefined;
34
+ const adopting = lockfileExisted && !(await hasUserScopeSection());
35
+ // Read both files before writing either, so a config that doesn't load fails before any change.
36
+ const lockfile = await readLockfile(userRoot);
37
+ const assets = lockfile.assets ?? [];
38
+ const previous = await loadUserScopeConfig(userRoot);
39
+ const previousTools = previous?.tools ?? [];
40
+ // 1. The user lockfile. An existing one keeps its assets, and its org once set.
41
+ if (!lockfileExisted) {
42
+ await writeLockfile(userRoot, { assets: [], lockVersion: 1, ...(org !== undefined ? { org } : {}) });
43
+ actions.push({ detail: org ? `org: ${org}` : 'no org', label: 'Created .atk-lock.json' });
44
+ }
45
+ else if (org && !lockfile.org) {
46
+ await writeLockfile(userRoot, { ...lockfile, org });
47
+ actions.push({ detail: `org: ${org}`, label: 'Set the org in .atk-lock.json' });
48
+ }
49
+ // 2. The `user` section. Frozen assets aren't setup's to change, so they carry over, from the
50
+ // legacy top-level keys when the home directory still holds them.
51
+ const { droppedLegacy } = await writeUserScopeSection({ ...(previous?.frozenAssets?.length ? { frozenAssets: previous.frozenAssets } : {}), tools: selectedTools }, { dropLegacy: isSamePath(resolve(userRoot), resolve(homedir())) });
52
+ if ((await readIfExists(configPath)) !== before[1]) {
53
+ const replaced = previousTools.length > 0 && previousTools.join(',') !== selectedTools.join(',');
54
+ actions.push({
55
+ detail: `tools: ${selectedTools.join(', ')}${replaced ? ` — replaced: ${previousTools.join(', ')}` : ''}`,
56
+ label: `Wrote the user section of ${configPath}`,
57
+ });
58
+ }
59
+ const removedTools = previousTools.filter((tool) => !selectedTools.includes(tool));
60
+ if (removedTools.length > 0) {
61
+ actions.push({
62
+ detail: `${removedTools.join(', ')} — installed files and config directories were left in place`,
63
+ label: 'Removed from tools list',
64
+ });
65
+ }
66
+ if (droppedLegacy) {
67
+ actions.push({
68
+ detail: 'tools and frozen assets of the home directory setup',
69
+ label: `Moved the top-level keys of ${configPath} into its user section`,
70
+ });
71
+ }
72
+ if (!adopting) {
73
+ return { actions, changed: await changedSince(before, [lockfilePath, configPath]), warnings };
74
+ }
52
75
  actions.push({
53
- detail: `tools: ${selectedTools.join(', ')}${replaced ? ` — replaced: ${previousTools.join(', ')}` : ''}`,
54
- label: `Wrote the user section of ${configPath}`,
76
+ detail: `${assets.length} existing asset(s) kept${lockfile.org ? `, org: ${lockfile.org}` : ''}`,
77
+ label: 'Adopted .atk-lock.json',
55
78
  });
56
- }
57
- const removedTools = previousTools.filter((tool) => !selectedTools.includes(tool));
58
- if (removedTools.length > 0) {
59
- actions.push({
60
- detail: `${removedTools.join(', ')} — installed files and config directories were left in place`,
61
- label: 'Removed from tools list',
62
- });
63
- }
64
- if (droppedLegacy) {
65
- actions.push({
66
- detail: 'tools and frozen assets of the home directory setup',
67
- label: `Moved the top-level keys of ${configPath} into its user section`,
68
- });
69
- }
70
- if (!adopting) {
79
+ // 3. Reports. Nothing here is changed: the assets need a sync, and the .gitignore may be a dotfiles repo's.
80
+ const placedDifferently = assets.filter((asset) => PLACED_DIFFERENTLY_TYPES.has(asset.type));
81
+ if (placedDifferently.length > 0) {
82
+ const names = placedDifferently.map((asset) => `${formatOrgName(asset.org, asset.name)} (${asset.type})`);
83
+ const [verb, pronoun] = placedDifferently.length === 1 ? ['was', 'it'] : ['were', 'them'];
84
+ warnings.push(`${names.join(', ')} ${verb} placed with project-scope rules, which user scope places differently. ` +
85
+ `Run \`atk sync --user\` to place ${pronoun} for the user scope.`);
86
+ }
87
+ if (await hasAtkGitignoreBlock(userRoot)) {
88
+ warnings.push(`${join(userRoot, '.gitignore')} still has the "# ATK managed assets" block from a project setup there. ` +
89
+ 'User scope does not use it, and ATK leaves it in place in case a dotfiles repo needs it.');
90
+ }
71
91
  return { actions, changed: await changedSince(before, [lockfilePath, configPath]), warnings };
72
- }
73
- actions.push({
74
- detail: `${assets.length} existing asset(s) kept${lockfile.org ? `, org: ${lockfile.org}` : ''}`,
75
- label: 'Adopted .atk-lock.json',
76
92
  });
77
- // 3. Reports. Nothing here is changed: the assets need a sync, and the .gitignore may be a dotfiles repo's.
78
- const placedDifferently = assets.filter((asset) => PLACED_DIFFERENTLY_TYPES.has(asset.type));
79
- if (placedDifferently.length > 0) {
80
- const names = placedDifferently.map((asset) => `${formatOrgName(asset.org, asset.name)} (${asset.type})`);
81
- const [verb, pronoun] = placedDifferently.length === 1 ? ['was', 'it'] : ['were', 'them'];
82
- warnings.push(`${names.join(', ')} ${verb} placed with project-scope rules, which user scope places differently. ` +
83
- `Run \`atk sync --user\` to place ${pronoun} for the user scope.`);
84
- }
85
- if (await hasAtkGitignoreBlock(userRoot)) {
86
- warnings.push(`${join(userRoot, '.gitignore')} still has the "# ATK managed assets" block from a project setup there. ` +
87
- 'User scope does not use it, and ATK leaves it in place in case a dotfiles repo needs it.');
88
- }
89
- return { actions, changed: await changedSince(before, [lockfilePath, configPath]), warnings };
90
93
  }
91
94
  /** Whether any of `paths` differs from its content in `before` (undefined: it didn't exist). */
92
95
  async function changedSince(before, paths) {
@@ -1 +1 @@
1
- {"version":3,"file":"user-setup.js","sourceRoot":"","sources":["../../src/lib/user-setup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"user-setup.js","sourceRoot":"","sources":["../../src/lib/user-setup.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/lib/write-file.ts"],"names":[],"mappings":"AAOA,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AASD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9G;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAUf"}
1
+ {"version":3,"file":"write-file.d.ts","sourceRoot":"","sources":["../../src/lib/write-file.ts"],"names":[],"mappings":"AAoBA,6BAA6B;AAC7B,MAAM,WAAW,YAAY;IAC3B;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB;;;OAGG;IACH,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AASD;;;;;;;;GAQG;AACH,wBAAsB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAYtF;AAED;;;;;;;;;;;;;;;;;;;GAmBG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAY9G;AAED;;;;;;;;;GASG;AACH,wBAAsB,aAAa,CAAC,QAAQ,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,YAAiB,GAAG,OAAO,CAAC,IAAI,CAAC,CAGhH;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAsB,aAAa,CACjC,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,GAAE,YAAiB,GACzB,OAAO,CAAC,IAAI,CAAC,CAUf"}
@@ -1,9 +1,10 @@
1
1
  import { randomBytes } from 'node:crypto';
2
2
  import { existsSync } from 'node:fs';
3
- import { chmod, mkdir, readFile, realpath, rename, stat, unlink, writeFile } from 'node:fs/promises';
4
- import { dirname } from 'node:path';
3
+ import { mkdir, open, readdir, readFile, realpath, rename, stat, unlink, writeFile, } from 'node:fs/promises';
4
+ import { basename, dirname, join } from 'node:path';
5
5
  import { setTimeout as sleep } from 'node:timers/promises';
6
6
  import { stringify as stringifyToml } from 'smol-toml';
7
+ import { isProcessAlive } from './process-alive.js';
7
8
  /**
8
9
  * Default indentation for brand-new JSON files that ATK creates (no existing
9
10
  * file to match). Two spaces matches the JSON ecosystem norm (npm lockfiles,
@@ -123,24 +124,71 @@ async function readIfExists(filePath) {
123
124
  return undefined;
124
125
  return readFile(filePath, 'utf-8');
125
126
  }
127
+ /** A temp file this old is no write in progress, whoever now has its pid (a reboot reuses them). */
128
+ const STALE_TEMP_MS = 60 * 60 * 1000;
126
129
  /**
127
- * Write `content` to a temp file next to `filePath` and rename it over the file. A symlink is
128
- * written through to its target, and the file keeps its mode (a `.claude.json` kept at 0600
130
+ * Remove the temp files {@link writeFileAtomic} left next to `target` when a writer was killed
131
+ * between its write and its rename: `<name>.tmp.<pid>.<hex>` whose process has exited, or that is
132
+ * older than {@link STALE_TEMP_MS}. A live writer's are left alone. Nothing here fails the write.
133
+ */
134
+ async function removeStaleTempFiles(target) {
135
+ try {
136
+ const dir = dirname(target);
137
+ const prefix = `${basename(target)}.tmp.`;
138
+ for (const entry of await readdir(dir)) {
139
+ if (!entry.startsWith(prefix))
140
+ continue;
141
+ const match = /^(\d+)\.[0-9a-f]{8}$/.exec(entry.slice(prefix.length));
142
+ if (!match)
143
+ continue;
144
+ const pid = Number(match[1]);
145
+ const tempPath = join(dir, entry);
146
+ const exited = pid !== process.pid && !isProcessAlive(pid);
147
+ if (!exited && Date.now() - (await stat(tempPath)).mtimeMs <= STALE_TEMP_MS)
148
+ continue;
149
+ await unlink(tempPath).catch(() => undefined);
150
+ }
151
+ }
152
+ catch {
153
+ // An unreadable or missing directory has nothing to sweep.
154
+ }
155
+ }
156
+ /** Sync a file's data to disk, skipping a filesystem that can't (some network and FUSE mounts). */
157
+ async function syncUnlessUnsupported(handle) {
158
+ try {
159
+ await handle.sync();
160
+ }
161
+ catch (error) {
162
+ const code = error.code;
163
+ if (code !== 'EINVAL' && code !== 'ENOTSUP')
164
+ throw error;
165
+ }
166
+ }
167
+ /**
168
+ * Write `content` to a temp file next to `target` (a symlink already resolved, so it is written
169
+ * through) and rename it over the file. The file keeps its mode (a `.claude.json` kept at 0600
129
170
  * because it holds MCP secrets stays 0600); a new file gets 0600, or the default mode when it is
130
- * `shared`. Windows refuses a rename while another process (an
171
+ * `shared`. The temp file is synced before the rename, so a power loss can't persist the rename
172
+ * ahead of the data and leave an empty file. Windows refuses a rename while another process (an
131
173
  * antivirus scan, the tool reading it) has the file open, so a refused rename is retried briefly.
132
174
  * The temp file is removed when the write fails.
133
175
  */
134
- async function writeFileAtomic(filePath, content, shared) {
135
- const target = existsSync(filePath) ? await realpath(filePath) : filePath;
176
+ async function writeFileAtomic(target, content, shared) {
136
177
  // A new file is private to its owner unless it is shared: what a tool rewrites while it runs can
137
178
  // hold secrets.
138
179
  const mode = existsSync(target) ? (await stat(target)).mode & 0o777 : shared ? undefined : 0o600;
139
180
  const tempPath = `${target}.tmp.${process.pid}.${randomBytes(4).toString('hex')}`;
140
181
  try {
141
- await writeFile(tempPath, content, { encoding: 'utf-8', mode });
142
- if (mode !== undefined)
143
- await chmod(tempPath, mode);
182
+ const handle = await open(tempPath, 'w', mode);
183
+ try {
184
+ await handle.writeFile(content, 'utf-8');
185
+ if (mode !== undefined)
186
+ await handle.chmod(mode);
187
+ await syncUnlessUnsupported(handle);
188
+ }
189
+ finally {
190
+ await handle.close();
191
+ }
144
192
  await renameWithRetry(tempPath, target);
145
193
  }
146
194
  catch (error) {
@@ -153,6 +201,10 @@ async function writeFileAtomic(filePath, content, shared) {
153
201
  * the parent directory as needed. A no-op when the content already matches.
154
202
  */
155
203
  async function writeFileIfChanged(filePath, content, existing, { atomic = false, shared = false } = {}) {
204
+ const target = atomic && existsSync(filePath) ? await realpath(filePath) : filePath;
205
+ // Swept on an unchanged write too: the next run after a killed one often changes nothing.
206
+ if (atomic)
207
+ await removeStaleTempFiles(target);
156
208
  if (existing === content)
157
209
  return;
158
210
  const dir = dirname(filePath);
@@ -163,7 +215,7 @@ async function writeFileIfChanged(filePath, content, existing, { atomic = false,
163
215
  await writeFile(filePath, content, 'utf-8');
164
216
  return;
165
217
  }
166
- await writeFileAtomic(filePath, content, shared);
218
+ await writeFileAtomic(target, content, shared);
167
219
  }
168
220
  /** How often, and how far apart, a rename Windows refused is tried again. */
169
221
  const RENAME_RETRIES = 10;
@@ -1 +1 @@
1
- {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/lib/write-file.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"write-file.js","sourceRoot":"","sources":["../../src/lib/write-file.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@detergent-software/atk",
3
- "version": "8.9.0-dev.9",
3
+ "version": "8.9.1-dev.1",
4
4
  "description": "Agentic Tool Kit — CLI for managing AI coding tool assets.",
5
5
  "type": "module",
6
6
  "bin": {
@@ -27,7 +27,6 @@
27
27
  },
28
28
  "dependencies": {
29
29
  "@azure/msal-node": "^6.0.0",
30
- "@inkjs/ui": "^2.0.0",
31
30
  "chalk": "^5.4.0",
32
31
  "commander": "^14.0.1",
33
32
  "decamelize": "^6.0.1",
@@ -67,7 +66,7 @@
67
66
  "@atk/tsconfig": "0.0.0"
68
67
  },
69
68
  "scripts": {
70
- "build": "tsc",
69
+ "build": "pnpm manifest && tsc",
71
70
  "check:packed": "node scripts/check-packed-help.mjs",
72
71
  "dev": "tsc --watch",
73
72
  "export-schemas": "tsx scripts/export-schemas.ts",
@@ -75,6 +74,7 @@
75
74
  "format:check": "prettier --check \"src/**/*.{ts,tsx}\"",
76
75
  "lint": "eslint src/",
77
76
  "lint:fix": "eslint src/ --fix --cache",
77
+ "manifest": "tsx scripts/write-command-manifest.ts",
78
78
  "test": "vitest run",
79
79
  "test:watch": "vitest",
80
80
  "typecheck": "tsc --noEmit"