@detergent-software/atk 8.9.0 → 8.9.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 (291) hide show
  1. package/CHANGELOG.md +390 -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 +33 -37
  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/hooks/usePublishState.d.ts +38 -207
  102. package/build/hooks/usePublishState.d.ts.map +1 -1
  103. package/build/hooks/usePublishState.js +83 -1501
  104. package/build/hooks/usePublishState.js.map +1 -1
  105. package/build/lib/adapter.d.ts +10 -1
  106. package/build/lib/adapter.d.ts.map +1 -1
  107. package/build/lib/adapter.js +46 -3
  108. package/build/lib/adapter.js.map +1 -1
  109. package/build/lib/api-client.d.ts +9 -5
  110. package/build/lib/api-client.d.ts.map +1 -1
  111. package/build/lib/api-client.js +35 -8
  112. package/build/lib/api-client.js.map +1 -1
  113. package/build/lib/atk-api/errors.d.ts +5 -2
  114. package/build/lib/atk-api/errors.d.ts.map +1 -1
  115. package/build/lib/atk-api/errors.js +1 -0
  116. package/build/lib/atk-api/errors.js.map +1 -1
  117. package/build/lib/atk-api/generated/types.gen.d.ts +12 -12
  118. package/build/lib/atk-api/index.d.ts +2 -2
  119. package/build/lib/atk-api/index.d.ts.map +1 -1
  120. package/build/lib/atk-api/index.js +1 -1
  121. package/build/lib/atk-api/index.js.map +1 -1
  122. package/build/lib/atk-api/web-routes.d.ts +25 -6
  123. package/build/lib/atk-api/web-routes.d.ts.map +1 -1
  124. package/build/lib/atk-api/web-routes.js +27 -8
  125. package/build/lib/atk-api/web-routes.js.map +1 -1
  126. package/build/lib/auth.d.ts +12 -2
  127. package/build/lib/auth.d.ts.map +1 -1
  128. package/build/lib/auth.js +38 -3
  129. package/build/lib/auth.js.map +1 -1
  130. package/build/lib/checksum.d.ts +40 -14
  131. package/build/lib/checksum.d.ts.map +1 -1
  132. package/build/lib/checksum.js +110 -57
  133. package/build/lib/checksum.js.map +1 -1
  134. package/build/lib/config.d.ts +4 -4
  135. package/build/lib/config.d.ts.map +1 -1
  136. package/build/lib/config.js +31 -8
  137. package/build/lib/config.js.map +1 -1
  138. package/build/lib/diagnostics.d.ts.map +1 -1
  139. package/build/lib/diagnostics.js +10 -7
  140. package/build/lib/diagnostics.js.map +1 -1
  141. package/build/lib/diff-command.js +1 -1
  142. package/build/lib/diff-command.js.map +1 -1
  143. package/build/lib/errors.d.ts +4 -1
  144. package/build/lib/errors.d.ts.map +1 -1
  145. package/build/lib/errors.js.map +1 -1
  146. package/build/lib/format-age.d.ts +3 -0
  147. package/build/lib/format-age.d.ts.map +1 -0
  148. package/build/lib/format-age.js +18 -0
  149. package/build/lib/format-age.js.map +1 -0
  150. package/build/lib/installer.d.ts +8 -11
  151. package/build/lib/installer.d.ts.map +1 -1
  152. package/build/lib/installer.js +83 -28
  153. package/build/lib/installer.js.map +1 -1
  154. package/build/lib/local-edits.d.ts +72 -0
  155. package/build/lib/local-edits.d.ts.map +1 -0
  156. package/build/lib/local-edits.js +145 -0
  157. package/build/lib/local-edits.js.map +1 -0
  158. package/build/lib/lockfile.d.ts +12 -8
  159. package/build/lib/lockfile.d.ts.map +1 -1
  160. package/build/lib/lockfile.js +209 -59
  161. package/build/lib/lockfile.js.map +1 -1
  162. package/build/lib/mover.d.ts.map +1 -1
  163. package/build/lib/mover.js +11 -12
  164. package/build/lib/mover.js.map +1 -1
  165. package/build/lib/multi-tool-install.d.ts +4 -2
  166. package/build/lib/multi-tool-install.d.ts.map +1 -1
  167. package/build/lib/multi-tool-install.js +12 -2
  168. package/build/lib/multi-tool-install.js.map +1 -1
  169. package/build/lib/offline.d.ts +19 -0
  170. package/build/lib/offline.d.ts.map +1 -0
  171. package/build/lib/offline.js +26 -0
  172. package/build/lib/offline.js.map +1 -0
  173. package/build/lib/owned-paths.d.ts +7 -4
  174. package/build/lib/owned-paths.d.ts.map +1 -1
  175. package/build/lib/owned-paths.js +23 -8
  176. package/build/lib/owned-paths.js.map +1 -1
  177. package/build/lib/parse-json.d.ts +12 -0
  178. package/build/lib/parse-json.d.ts.map +1 -1
  179. package/build/lib/parse-json.js +15 -2
  180. package/build/lib/parse-json.js.map +1 -1
  181. package/build/lib/pastel/commander-specs.d.ts +7 -0
  182. package/build/lib/pastel/commander-specs.d.ts.map +1 -0
  183. package/build/lib/pastel/commander-specs.js +50 -0
  184. package/build/lib/pastel/commander-specs.js.map +1 -0
  185. package/build/lib/pastel/generate-arguments.d.ts +3 -3
  186. package/build/lib/pastel/generate-arguments.d.ts.map +1 -1
  187. package/build/lib/pastel/generate-arguments.js +25 -22
  188. package/build/lib/pastel/generate-arguments.js.map +1 -1
  189. package/build/lib/pastel/generate-command.d.ts +7 -5
  190. package/build/lib/pastel/generate-command.d.ts.map +1 -1
  191. package/build/lib/pastel/generate-command.js +32 -67
  192. package/build/lib/pastel/generate-command.js.map +1 -1
  193. package/build/lib/pastel/generate-commands.d.ts +3 -5
  194. package/build/lib/pastel/generate-commands.d.ts.map +1 -1
  195. package/build/lib/pastel/generate-commands.js +6 -10
  196. package/build/lib/pastel/generate-commands.js.map +1 -1
  197. package/build/lib/pastel/generate-options.d.ts +3 -3
  198. package/build/lib/pastel/generate-options.d.ts.map +1 -1
  199. package/build/lib/pastel/generate-options.js +16 -13
  200. package/build/lib/pastel/generate-options.js.map +1 -1
  201. package/build/lib/pastel/index.d.ts +26 -4
  202. package/build/lib/pastel/index.d.ts.map +1 -1
  203. package/build/lib/pastel/index.js +104 -18
  204. package/build/lib/pastel/index.js.map +1 -1
  205. package/build/lib/pastel/internal-types.d.ts +39 -8
  206. package/build/lib/pastel/internal-types.d.ts.map +1 -1
  207. package/build/lib/pastel/manifest.d.ts +8 -0
  208. package/build/lib/pastel/manifest.d.ts.map +1 -0
  209. package/build/lib/pastel/manifest.js +7 -0
  210. package/build/lib/pastel/manifest.js.map +1 -0
  211. package/build/lib/pastel/read-commands.d.ts +7 -2
  212. package/build/lib/pastel/read-commands.d.ts.map +1 -1
  213. package/build/lib/pastel/read-commands.js +51 -30
  214. package/build/lib/pastel/read-commands.js.map +1 -1
  215. package/build/lib/pastel/render-command.d.ts +13 -0
  216. package/build/lib/pastel/render-command.d.ts.map +1 -0
  217. package/build/lib/pastel/render-command.js +56 -0
  218. package/build/lib/pastel/render-command.js.map +1 -0
  219. package/build/lib/process-alive.d.ts +11 -0
  220. package/build/lib/process-alive.d.ts.map +1 -0
  221. package/build/lib/process-alive.js +22 -0
  222. package/build/lib/process-alive.js.map +1 -0
  223. package/build/lib/pruner.d.ts +26 -0
  224. package/build/lib/pruner.d.ts.map +1 -0
  225. package/build/lib/pruner.js +42 -0
  226. package/build/lib/pruner.js.map +1 -0
  227. package/build/lib/publish-flow.d.ts +224 -0
  228. package/build/lib/publish-flow.d.ts.map +1 -0
  229. package/build/lib/publish-flow.js +1258 -0
  230. package/build/lib/publish-flow.js.map +1 -0
  231. package/build/lib/publish-run.d.ts +55 -0
  232. package/build/lib/publish-run.d.ts.map +1 -0
  233. package/build/lib/publish-run.js +169 -0
  234. package/build/lib/publish-run.js.map +1 -0
  235. package/build/lib/publisher.d.ts +25 -17
  236. package/build/lib/publisher.d.ts.map +1 -1
  237. package/build/lib/publisher.js +54 -53
  238. package/build/lib/publisher.js.map +1 -1
  239. package/build/lib/registrar.d.ts.map +1 -1
  240. package/build/lib/registrar.js +2 -2
  241. package/build/lib/registrar.js.map +1 -1
  242. package/build/lib/registry.d.ts +18 -7
  243. package/build/lib/registry.d.ts.map +1 -1
  244. package/build/lib/registry.js +113 -32
  245. package/build/lib/registry.js.map +1 -1
  246. package/build/lib/root-path.d.ts +11 -0
  247. package/build/lib/root-path.d.ts.map +1 -1
  248. package/build/lib/root-path.js +15 -1
  249. package/build/lib/root-path.js.map +1 -1
  250. package/build/lib/schemas/config.d.ts +3 -1
  251. package/build/lib/schemas/config.d.ts.map +1 -1
  252. package/build/lib/schemas/config.js +1 -1
  253. package/build/lib/schemas/config.js.map +1 -1
  254. package/build/lib/schemas/lockfile.d.ts +156 -23
  255. package/build/lib/schemas/lockfile.d.ts.map +1 -1
  256. package/build/lib/schemas/lockfile.js +100 -79
  257. package/build/lib/schemas/lockfile.js.map +1 -1
  258. package/build/lib/setup.d.ts.map +1 -1
  259. package/build/lib/setup.js +53 -48
  260. package/build/lib/setup.js.map +1 -1
  261. package/build/lib/staging.d.ts +15 -0
  262. package/build/lib/staging.d.ts.map +1 -0
  263. package/build/lib/staging.js +33 -0
  264. package/build/lib/staging.js.map +1 -0
  265. package/build/lib/sync.d.ts +22 -6
  266. package/build/lib/sync.d.ts.map +1 -1
  267. package/build/lib/sync.js +59 -7
  268. package/build/lib/sync.js.map +1 -1
  269. package/build/lib/uninstaller.d.ts.map +1 -1
  270. package/build/lib/uninstaller.js +8 -5
  271. package/build/lib/uninstaller.js.map +1 -1
  272. package/build/lib/update-check.d.ts +4 -0
  273. package/build/lib/update-check.d.ts.map +1 -1
  274. package/build/lib/update-check.js +55 -56
  275. package/build/lib/update-check.js.map +1 -1
  276. package/build/lib/updater.d.ts +31 -1
  277. package/build/lib/updater.d.ts.map +1 -1
  278. package/build/lib/updater.js +143 -4
  279. package/build/lib/updater.js.map +1 -1
  280. package/build/lib/usage-error.d.ts +20 -0
  281. package/build/lib/usage-error.d.ts.map +1 -0
  282. package/build/lib/usage-error.js +41 -0
  283. package/build/lib/usage-error.js.map +1 -0
  284. package/build/lib/user-setup.d.ts.map +1 -1
  285. package/build/lib/user-setup.js +62 -59
  286. package/build/lib/user-setup.js.map +1 -1
  287. package/build/lib/write-file.d.ts +5 -0
  288. package/build/lib/write-file.d.ts.map +1 -1
  289. package/build/lib/write-file.js +68 -13
  290. package/build/lib/write-file.js.map +1 -1
  291. package/package.json +81 -81
@@ -1,31 +1,157 @@
1
1
  import { z } from 'zod';
2
- export declare const InstalledFile: z.ZodObject<{
3
- checksum: z.ZodString;
4
- installedPath: z.ZodOptional<z.ZodString>;
5
- sourcePath: z.ZodString;
6
- }, z.core.$strip>;
7
- export type InstalledFile = z.infer<typeof InstalledFile>;
2
+ /** The schemas built with `z.object`, for the exported types: a misspelt key in an `InstalledAsset` literal fails to compile. */
3
+ type Known = ReturnType<typeof lockfileSchemas<z.core.$strip>>;
4
+ /** `z.object` (drops keys it doesn't know) or `z.looseObject` (keeps them), for {@link lockfileSchemas}. */
5
+ type ObjectOf<Config extends z.core.$ZodObjectConfig> = <Shape extends z.core.$ZodLooseShape>(shape: Shape) => z.ZodObject<Shape, Config>;
6
+ declare function lockfileSchemas<Config extends z.core.$ZodObjectConfig>(object: ObjectOf<Config>): {
7
+ ConfigEntry: z.ZodObject<{
8
+ checksum: z.ZodString;
9
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
10
+ command: z.ZodOptional<z.ZodString>;
11
+ file: z.ZodString;
12
+ key: z.ZodString;
13
+ tool: z.ZodOptional<z.ZodString>;
14
+ }, Config>;
15
+ InstalledAsset: z.ZodObject<{
16
+ bundleOrigin: z.ZodOptional<z.ZodObject<{
17
+ name: z.ZodString;
18
+ org: z.ZodOptional<z.ZodString>;
19
+ version: z.ZodString;
20
+ }, Config>>;
21
+ configEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
22
+ checksum: z.ZodString;
23
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
24
+ command: z.ZodOptional<z.ZodString>;
25
+ file: z.ZodString;
26
+ key: z.ZodString;
27
+ tool: z.ZodOptional<z.ZodString>;
28
+ }, Config>>>;
29
+ dependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
30
+ name: z.ZodString;
31
+ org: z.ZodOptional<z.ZodString>;
32
+ type: z.ZodEnum<{
33
+ skill: "skill";
34
+ agent: "agent";
35
+ rule: "rule";
36
+ hook: "hook";
37
+ "memory-template": "memory-template";
38
+ "mcp-config": "mcp-config";
39
+ }>;
40
+ version: z.ZodOptional<z.ZodString>;
41
+ }, Config>>>;
42
+ description: z.ZodOptional<z.ZodString>;
43
+ entrypoint: z.ZodOptional<z.ZodString>;
44
+ excludedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
45
+ files: z.ZodArray<z.ZodObject<{
46
+ checksum: z.ZodString;
47
+ installedPath: z.ZodOptional<z.ZodString>;
48
+ sourcePath: z.ZodString;
49
+ }, Config>>;
50
+ installReason: z.ZodOptional<z.ZodEnum<{
51
+ direct: "direct";
52
+ dependency: "dependency";
53
+ }>>;
54
+ name: z.ZodString;
55
+ org: z.ZodOptional<z.ZodString>;
56
+ pinnedVersion: z.ZodOptional<z.ZodString>;
57
+ type: z.ZodEnum<{
58
+ skill: "skill";
59
+ agent: "agent";
60
+ rule: "rule";
61
+ hook: "hook";
62
+ "memory-template": "memory-template";
63
+ "mcp-config": "mcp-config";
64
+ }>;
65
+ undeclaredTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
66
+ userConfigDirs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
67
+ version: z.ZodString;
68
+ }, Config>;
69
+ InstalledFile: z.ZodObject<{
70
+ checksum: z.ZodString;
71
+ installedPath: z.ZodOptional<z.ZodString>;
72
+ sourcePath: z.ZodString;
73
+ }, Config>;
74
+ LockfileSchema: z.ZodObject<{
75
+ assets: z.ZodOptional<z.ZodArray<z.ZodObject<{
76
+ bundleOrigin: z.ZodOptional<z.ZodObject<{
77
+ name: z.ZodString;
78
+ org: z.ZodOptional<z.ZodString>;
79
+ version: z.ZodString;
80
+ }, Config>>;
81
+ configEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
82
+ checksum: z.ZodString;
83
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
84
+ command: z.ZodOptional<z.ZodString>;
85
+ file: z.ZodString;
86
+ key: z.ZodString;
87
+ tool: z.ZodOptional<z.ZodString>;
88
+ }, Config>>>;
89
+ dependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
90
+ name: z.ZodString;
91
+ org: z.ZodOptional<z.ZodString>;
92
+ type: z.ZodEnum<{
93
+ skill: "skill";
94
+ agent: "agent";
95
+ rule: "rule";
96
+ hook: "hook";
97
+ "memory-template": "memory-template";
98
+ "mcp-config": "mcp-config";
99
+ }>;
100
+ version: z.ZodOptional<z.ZodString>;
101
+ }, Config>>>;
102
+ description: z.ZodOptional<z.ZodString>;
103
+ entrypoint: z.ZodOptional<z.ZodString>;
104
+ excludedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
105
+ files: z.ZodArray<z.ZodObject<{
106
+ checksum: z.ZodString;
107
+ installedPath: z.ZodOptional<z.ZodString>;
108
+ sourcePath: z.ZodString;
109
+ }, Config>>;
110
+ installReason: z.ZodOptional<z.ZodEnum<{
111
+ direct: "direct";
112
+ dependency: "dependency";
113
+ }>>;
114
+ name: z.ZodString;
115
+ org: z.ZodOptional<z.ZodString>;
116
+ pinnedVersion: z.ZodOptional<z.ZodString>;
117
+ type: z.ZodEnum<{
118
+ skill: "skill";
119
+ agent: "agent";
120
+ rule: "rule";
121
+ hook: "hook";
122
+ "memory-template": "memory-template";
123
+ "mcp-config": "mcp-config";
124
+ }>;
125
+ undeclaredTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
126
+ userConfigDirs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
127
+ version: z.ZodString;
128
+ }, Config>>>;
129
+ lockVersion: z.ZodLiteral<1>;
130
+ org: z.ZodOptional<z.ZodString>;
131
+ orgReviewers: z.ZodOptional<z.ZodArray<z.ZodString>>;
132
+ }, Config>;
133
+ };
8
134
  export declare const ConfigEntry: z.ZodObject<{
9
135
  checksum: z.ZodString;
136
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
10
137
  command: z.ZodOptional<z.ZodString>;
11
138
  file: z.ZodString;
12
139
  key: z.ZodString;
13
140
  tool: z.ZodOptional<z.ZodString>;
14
- }, z.core.$strip>;
15
- export type ConfigEntry = z.infer<typeof ConfigEntry>;
16
- export declare const InstalledAsset: z.ZodObject<{
141
+ }, z.core.$loose>, InstalledAsset: z.ZodObject<{
17
142
  bundleOrigin: z.ZodOptional<z.ZodObject<{
18
143
  name: z.ZodString;
19
144
  org: z.ZodOptional<z.ZodString>;
20
145
  version: z.ZodString;
21
- }, z.core.$strip>>;
146
+ }, z.core.$loose>>;
22
147
  configEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
23
148
  checksum: z.ZodString;
149
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
24
150
  command: z.ZodOptional<z.ZodString>;
25
151
  file: z.ZodString;
26
152
  key: z.ZodString;
27
153
  tool: z.ZodOptional<z.ZodString>;
28
- }, z.core.$strip>>>;
154
+ }, z.core.$loose>>>;
29
155
  dependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
30
156
  name: z.ZodString;
31
157
  org: z.ZodOptional<z.ZodString>;
@@ -38,7 +164,7 @@ export declare const InstalledAsset: z.ZodObject<{
38
164
  "mcp-config": "mcp-config";
39
165
  }>;
40
166
  version: z.ZodOptional<z.ZodString>;
41
- }, z.core.$strip>>>;
167
+ }, z.core.$loose>>>;
42
168
  description: z.ZodOptional<z.ZodString>;
43
169
  entrypoint: z.ZodOptional<z.ZodString>;
44
170
  excludedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -46,7 +172,7 @@ export declare const InstalledAsset: z.ZodObject<{
46
172
  checksum: z.ZodString;
47
173
  installedPath: z.ZodOptional<z.ZodString>;
48
174
  sourcePath: z.ZodString;
49
- }, z.core.$strip>>;
175
+ }, z.core.$loose>>;
50
176
  installReason: z.ZodOptional<z.ZodEnum<{
51
177
  direct: "direct";
52
178
  dependency: "dependency";
@@ -65,22 +191,25 @@ export declare const InstalledAsset: z.ZodObject<{
65
191
  undeclaredTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
66
192
  userConfigDirs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
67
193
  version: z.ZodString;
68
- }, z.core.$strip>;
69
- export type InstalledAsset = z.infer<typeof InstalledAsset>;
70
- export declare const LockfileSchema: z.ZodObject<{
194
+ }, z.core.$loose>, InstalledFile: z.ZodObject<{
195
+ checksum: z.ZodString;
196
+ installedPath: z.ZodOptional<z.ZodString>;
197
+ sourcePath: z.ZodString;
198
+ }, z.core.$loose>, LockfileSchema: z.ZodObject<{
71
199
  assets: z.ZodOptional<z.ZodArray<z.ZodObject<{
72
200
  bundleOrigin: z.ZodOptional<z.ZodObject<{
73
201
  name: z.ZodString;
74
202
  org: z.ZodOptional<z.ZodString>;
75
203
  version: z.ZodString;
76
- }, z.core.$strip>>;
204
+ }, z.core.$loose>>;
77
205
  configEntries: z.ZodOptional<z.ZodArray<z.ZodObject<{
78
206
  checksum: z.ZodString;
207
+ checksumVersion: z.ZodOptional<z.ZodLiteral<2>>;
79
208
  command: z.ZodOptional<z.ZodString>;
80
209
  file: z.ZodString;
81
210
  key: z.ZodString;
82
211
  tool: z.ZodOptional<z.ZodString>;
83
- }, z.core.$strip>>>;
212
+ }, z.core.$loose>>>;
84
213
  dependencies: z.ZodOptional<z.ZodArray<z.ZodObject<{
85
214
  name: z.ZodString;
86
215
  org: z.ZodOptional<z.ZodString>;
@@ -93,7 +222,7 @@ export declare const LockfileSchema: z.ZodObject<{
93
222
  "mcp-config": "mcp-config";
94
223
  }>;
95
224
  version: z.ZodOptional<z.ZodString>;
96
- }, z.core.$strip>>>;
225
+ }, z.core.$loose>>>;
97
226
  description: z.ZodOptional<z.ZodString>;
98
227
  entrypoint: z.ZodOptional<z.ZodString>;
99
228
  excludedTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
@@ -101,7 +230,7 @@ export declare const LockfileSchema: z.ZodObject<{
101
230
  checksum: z.ZodString;
102
231
  installedPath: z.ZodOptional<z.ZodString>;
103
232
  sourcePath: z.ZodString;
104
- }, z.core.$strip>>;
233
+ }, z.core.$loose>>;
105
234
  installReason: z.ZodOptional<z.ZodEnum<{
106
235
  direct: "direct";
107
236
  dependency: "dependency";
@@ -120,10 +249,14 @@ export declare const LockfileSchema: z.ZodObject<{
120
249
  undeclaredTools: z.ZodOptional<z.ZodArray<z.ZodString>>;
121
250
  userConfigDirs: z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodString>>;
122
251
  version: z.ZodString;
123
- }, z.core.$strip>>>;
252
+ }, z.core.$loose>>>;
124
253
  lockVersion: z.ZodLiteral<1>;
125
254
  org: z.ZodOptional<z.ZodString>;
126
255
  orgReviewers: z.ZodOptional<z.ZodArray<z.ZodString>>;
127
- }, z.core.$strip>;
128
- export type Lockfile = z.infer<typeof LockfileSchema>;
256
+ }, z.core.$loose>;
257
+ export type ConfigEntry = z.infer<Known['ConfigEntry']>;
258
+ export type InstalledAsset = z.infer<Known['InstalledAsset']>;
259
+ export type InstalledFile = z.infer<Known['InstalledFile']>;
260
+ export type Lockfile = z.infer<Known['LockfileSchema']>;
261
+ export {};
129
262
  //# sourceMappingURL=lockfile.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,aAAa;;;;iBASxB,CAAC;AACH,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,aAAa,CAAC,CAAC;AAE1D,eAAO,MAAM,WAAW;;;;;;iBAoBtB,CAAC;AACH,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,WAAW,CAAC,CAAC;AAEtD,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAwDzB,CAAC;AACH,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC;AAE5D,eAAO,MAAM,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAQzB,CAAC;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,cAAc,CAAC,CAAC"}
1
+ {"version":3,"file":"lockfile.d.ts","sourceRoot":"","sources":["../../../src/lib/schemas/lockfile.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAKxB,iIAAiI;AACjI,KAAK,KAAK,GAAG,UAAU,CAAC,OAAO,eAAe,CAAC,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAE/D,4GAA4G;AAC5G,KAAK,QAAQ,CAAC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,IAAI,CAAC,KAAK,SAAS,CAAC,CAAC,IAAI,CAAC,cAAc,EAC1F,KAAK,EAAE,KAAK,KACT,CAAC,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAEhC,iBAAS,eAAe,CAAC,MAAM,SAAS,CAAC,CAAC,IAAI,CAAC,gBAAgB,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAyHxF;AAID,eAAO,MAAQ,WAAW;;;;;;;mBAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;mBAAE,aAAa;;;;mBAAE,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAExE,CAAC;AACF,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC,CAAC;AACxD,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,eAAe,CAAC,CAAC,CAAC;AAC5D,MAAM,MAAM,QAAQ,GAAG,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC,CAAC"}
@@ -1,82 +1,103 @@
1
1
  import { z } from 'zod';
2
2
  import { AssetTypeSchema as AssetType } from '../atk-schemas/index.js';
3
- export const InstalledFile = z.object({
4
- checksum: z.string().describe('SHA-256 checksum of the file contents'),
5
- installedPath: z
6
- .string()
7
- .optional()
8
- .describe('Project-relative POSIX path to where the file was installed (computed via adapter for legacy entries); absolute at the user scope when the tool’s config directory is on another drive than the user root'),
9
- sourcePath: z.string().describe('Original path within the asset directory'),
10
- });
11
- export const ConfigEntry = z.object({
12
- checksum: z.string().describe('SHA-256 hex digest of the config entry value'),
13
- command: z
14
- .string()
15
- .optional()
16
- .describe('For array-valued config sections (e.g. hooks.<Event>): identifies the array element this asset owns by its nested hooks[].command value'),
17
- file: z
18
- .string()
19
- .describe('Project-relative POSIX path to the config file; absolute at the user scope when the tool’s config directory is on another drive than the user root'),
20
- key: z.string().describe('Dot-path key within the config file (e.g. hooks.Stop)'),
21
- tool: z
22
- .string()
23
- .optional()
24
- .describe('Tool adapter id (e.g. claude-code) that registered this entry. Absent on entries written by older CLI versions; ownership is then inferred from the config file path'),
25
- });
26
- export const InstalledAsset = z.object({
27
- bundleOrigin: z
28
- .object({
29
- name: z.string().describe('Bundle name that sourced this asset'),
30
- org: z.string().optional().describe('Organization scope of the bundle (absent for global bundles)'),
31
- version: z.string().describe('Bundle version at install time'),
32
- })
33
- .optional()
34
- .describe('Bundle that triggered this asset installation'),
35
- configEntries: z.array(ConfigEntry).optional().describe('Config file entries registered by this asset'),
36
- dependencies: z
37
- .array(z.object({
38
- name: z.string().describe('Dependency asset name'),
39
- org: z.string().optional().describe('Organization scope of the dependency'),
40
- type: AssetType.describe('Dependency asset type'),
41
- version: z.string().optional().describe('Dependency version constraint at install time'),
42
- }))
43
- .optional()
44
- .describe('Assets this asset depends on'),
45
- description: z.string().optional().describe('Short description of the asset'),
46
- entrypoint: z
47
- .string()
48
- .optional()
49
- .describe('Primary file for this asset (relative to the asset directory), from the manifest — used to resolve adapter placement paths'),
50
- excludedTools: z
51
- .array(z.string())
52
- .optional()
53
- .describe('Tool adapter ids (e.g. codex-cli) this asset was explicitly uninstalled for, or that a hook was skipped for because its manifest does not declare them (those are also in undeclaredTools). Sync, audit and update skip the asset for these tools; installing it for a tool removes that tool again. Absent means the asset is wanted for every tool'),
54
- files: z.array(InstalledFile).describe('Files placed by this asset'),
55
- installReason: z
56
- .enum(['direct', 'dependency'])
57
- .optional()
58
- .describe('Whether the user explicitly installed this or it was pulled in as a dependency'),
59
- name: z.string().describe('Asset name'),
60
- org: z.string().optional().describe('Organization scope for this asset'),
61
- pinnedVersion: z.string().optional().describe('Pinned version constraint, if the asset is version-pinned'),
62
- type: AssetType.describe('Asset type'),
63
- undeclaredTools: z
64
- .array(z.string())
65
- .optional()
66
- .describe('The tools in excludedTools that a hook was skipped for because its manifest does not declare them, not uninstalled for. Sync and update place the hook for such a tool once its version declares it'),
67
- userConfigDirs: z
68
- .record(z.string(), z.string())
69
- .optional()
70
- .describe('User scope only: per tool adapter id, the directory its `userConfigDir.env` (e.g. CLAUDE_CONFIG_DIR) had moved the tool’s user config to when ATK placed this asset, relative to the user root (e.g. { "claude-code": "../cc" }), or absolute when it is on another drive (e.g. "D:/cc"). A tool missing here placed it in its default directory. Uninstall, sync and audit find the tool’s copy there'),
71
- version: z.string().describe('Installed version'),
72
- });
73
- export const LockfileSchema = z.object({
74
- assets: z.array(InstalledAsset).optional().describe('Currently installed assets'),
75
- lockVersion: z.literal(1).describe('Lock file format version'),
76
- org: z.string().optional().describe('Organization scope for this lockfile'),
77
- orgReviewers: z
78
- .array(z.string())
79
- .optional()
80
- .describe('GitHub usernames auto-requested as PR reviewers for org-scoped asset publishes'),
81
- });
3
+ import { ASSET_FILE_PATH, PATH_SEGMENT } from '../root-path.js';
4
+ function lockfileSchemas(object) {
5
+ const InstalledFile = object({
6
+ checksum: z.string().describe('SHA-256 checksum of the file contents'),
7
+ installedPath: z
8
+ .string()
9
+ .optional()
10
+ .describe('Project-relative POSIX path to where the file was installed (computed via adapter for legacy entries); absolute at the user scope when the tool’s config directory is on another drive than the user root'),
11
+ sourcePath: z
12
+ .string()
13
+ .regex(ASSET_FILE_PATH, 'must be a relative path inside the asset directory, with no ".." segment')
14
+ .describe('Original path within the asset directory'),
15
+ });
16
+ const ConfigEntry = object({
17
+ checksum: z.string().describe('SHA-256 hex digest of the config entry value'),
18
+ checksumVersion: z
19
+ .literal(2)
20
+ .optional()
21
+ .describe('How the checksum was computed: 2 hashes the value with keys sorted at every depth. Absent on entries written by older CLI versions, whose digest ignores nested keys; the next sync records them again as 2. Hook groups (entries with a command) always hash every depth and ignore it'),
22
+ command: z
23
+ .string()
24
+ .optional()
25
+ .describe('For array-valued config sections (e.g. hooks.<Event>): identifies the array element this asset owns by its nested hooks[].command value'),
26
+ file: z
27
+ .string()
28
+ .describe('Project-relative POSIX path to the config file; absolute at the user scope when the tool’s config directory is on another drive than the user root'),
29
+ key: z.string().describe('Dot-path key within the config file (e.g. hooks.Stop)'),
30
+ tool: z
31
+ .string()
32
+ .optional()
33
+ .describe('Tool adapter id (e.g. claude-code) that registered this entry. Absent on entries written by older CLI versions; ownership is then inferred from the config file path'),
34
+ });
35
+ const InstalledAsset = object({
36
+ bundleOrigin: object({
37
+ name: z.string().describe('Bundle name that sourced this asset'),
38
+ org: z.string().optional().describe('Organization scope of the bundle (absent for global bundles)'),
39
+ version: z.string().describe('Bundle version at install time'),
40
+ })
41
+ .optional()
42
+ .describe('Bundle that triggered this asset installation'),
43
+ configEntries: z.array(ConfigEntry).optional().describe('Config file entries registered by this asset'),
44
+ dependencies: z
45
+ .array(object({
46
+ name: z.string().describe('Dependency asset name'),
47
+ org: z.string().optional().describe('Organization scope of the dependency'),
48
+ type: AssetType.describe('Dependency asset type'),
49
+ version: z.string().optional().describe('Dependency version constraint at install time'),
50
+ }))
51
+ .optional()
52
+ .describe('Assets this asset depends on'),
53
+ description: z.string().optional().describe('Short description of the asset'),
54
+ entrypoint: z
55
+ .string()
56
+ .optional()
57
+ .describe('Primary file for this asset (relative to the asset directory), from the manifest — used to resolve adapter placement paths'),
58
+ excludedTools: z
59
+ .array(z.string())
60
+ .optional()
61
+ .describe('Tool adapter ids (e.g. codex-cli) this asset was explicitly uninstalled for, or that a hook was skipped for because its manifest does not declare them (those are also in undeclaredTools). Sync, audit and update skip the asset for these tools; installing it for a tool removes that tool again. Absent means the asset is wanted for every tool'),
62
+ files: z.array(InstalledFile).describe('Files placed by this asset'),
63
+ installReason: z
64
+ .enum(['direct', 'dependency'])
65
+ .optional()
66
+ .describe('Whether the user explicitly installed this or it was pulled in as a dependency'),
67
+ name: z
68
+ .string()
69
+ .regex(PATH_SEGMENT, 'must be one path segment: no "/" or "\\", and not "." or ".."')
70
+ .describe('Asset name'),
71
+ org: z.string().optional().describe('Organization scope for this asset'),
72
+ pinnedVersion: z.string().optional().describe('Pinned version constraint, if the asset is version-pinned'),
73
+ type: AssetType.describe('Asset type'),
74
+ undeclaredTools: z
75
+ .array(z.string())
76
+ .optional()
77
+ .describe('The tools in excludedTools that a hook was skipped for because its manifest does not declare them, not uninstalled for. Sync and update place the hook for such a tool once its version declares it'),
78
+ userConfigDirs: z
79
+ .record(z.string(), z.string())
80
+ .optional()
81
+ .describe('User scope only: per tool adapter id, the directory its `userConfigDir.env` (e.g. CLAUDE_CONFIG_DIR) had moved the tool’s user config to when ATK placed this asset, relative to the user root (e.g. { "claude-code": "../cc" }), or absolute when it is on another drive (e.g. "D:/cc"). A tool missing here placed it in its default directory. Uninstall, sync and audit find the tool’s copy there'),
82
+ version: z.string().describe('Installed version'),
83
+ });
84
+ const LockfileSchema = object({
85
+ assets: z.array(InstalledAsset).optional().describe('Currently installed assets'),
86
+ // A new field doesn't bump this: since ATK-587 a CLI keeps the keys it doesn't know, so an older
87
+ // one writing the lockfile leaves a newer one's fields alone. Bump it only for a change an older
88
+ // CLI can't read safely: every released CLI refuses anything but 1 (readLockfile names the upgrade).
89
+ lockVersion: z
90
+ .literal(1)
91
+ .describe('Lock file format version. Added fields keep it at 1: a CLI keeps the keys it does not know when it writes the lockfile'),
92
+ org: z.string().optional().describe('Organization scope for this lockfile'),
93
+ orgReviewers: z
94
+ .array(z.string())
95
+ .optional()
96
+ .describe('GitHub usernames auto-requested as PR reviewers for org-scoped asset publishes'),
97
+ });
98
+ return { ConfigEntry, InstalledAsset, InstalledFile, LockfileSchema };
99
+ }
100
+ // The schemas keep keys this CLI doesn't know, so a teammate on an older CLI doesn't erase a newer
101
+ // one's fields when they write the lockfile (ATK-587). The types come from `Known`, without them.
102
+ export const { ConfigEntry, InstalledAsset, InstalledFile, LockfileSchema } = lockfileSchemas(z.looseObject);
82
103
  //# sourceMappingURL=lockfile.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../src/lib/schemas/lockfile.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"lockfile.js","sourceRoot":"","sources":["../../../src/lib/schemas/lockfile.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,KAAK,aAAa,EAAgB,MAAM,YAAY,CAAC;AAM1E;;;GAGG;AACH,eAAO,MAAM,WAAW,QAA4B,CAAC;AAMrD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa1D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CA6GtG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,IAAY,GACb,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAOzB"}
1
+ {"version":3,"file":"setup.d.ts","sourceRoot":"","sources":["../../src/lib/setup.ts"],"names":[],"mappings":"AAaA,OAAO,EAAc,KAAK,aAAa,EAAgB,MAAM,YAAY,CAAC;AAM1E;;;GAGG;AACH,eAAO,MAAM,WAAW,QAA4B,CAAC;AAMrD,MAAM,WAAW,oBAAoB;IACnC,SAAS,EAAE,OAAO,CAAC;IACnB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,aAAa,EAAE,MAAM,EAAE,CAAC;CACzB;AAED,MAAM,WAAW,mBAAmB;IAClC,OAAO,EAAE,aAAa,EAAE,CAAC;IACzB,QAAQ,EAAE,MAAM,EAAE,CAAC;CACpB;AAED,MAAM,WAAW,aAAa;IAC5B,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,EAAE,MAAM,CAAC;CACf;AAMD;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,EAAE,GAAG,MAAM,EAAE,CAa1D;AAED;;;;;;GAMG;AACH,wBAAsB,oBAAoB,CAAC,OAAO,EAAE,oBAAoB,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAkHtG;AAED;;;GAGG;AACH,wBAAgB,eAAe,CAAC,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,OAAO,GAAG,MAAM,GAAG,SAAS,CAWxF;AAED;;;;GAIG;AACH,wBAAsB,iBAAiB,CAAC,EACtC,WAAW,EACX,IAAY,GACb,EAAE;IACD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,IAAI,CAAC,EAAE,OAAO,CAAC;CAChB,GAAG,OAAO,CAAC,aAAa,CAAC,CAOzB"}
@@ -5,7 +5,7 @@ import { loadAdapter } from './adapter.js';
5
5
  import { loadProjectConfig, saveProjectConfig } from './config.js';
6
6
  import { errorMessage } from './errors.js';
7
7
  import { ensureGitignoreEntries, ensureGitignorePatterns } from './gitignore.js';
8
- import { getLockfilePath, readLockfile, writeLockfile } from './lockfile.js';
8
+ import { getLockfilePath, readLockfile, withLockfileErrorHandling, writeLockfile } from './lockfile.js';
9
9
  import { resolveSetupRoot } from './paths.js';
10
10
  import { isUserRoot, resolveScope } from './scope.js';
11
11
  // ---------------------------------------------------------------------------
@@ -48,56 +48,61 @@ export async function performSetupCreation(options) {
48
48
  const actions = [];
49
49
  const warnings = [];
50
50
  const resolvedOrg = resolveSetupOrg(orgValue, orgLocked);
51
- // 1. Write .atkrc.json with { tools: [...] }. Setup replaces the tools list, so say which
52
- // list it replaced and which tools dropped out of it.
53
- // Frozen assets are not setup's to change, so they carry over.
54
- const previousConfig = await loadPreviousConfig(projectDir);
55
- const previousTools = previousConfig?.tools ?? [];
56
- await saveProjectConfig(projectDir, {
57
- ...(previousConfig?.frozenAssets?.length ? { frozenAssets: previousConfig.frozenAssets } : {}),
58
- tools: selectedTools,
59
- });
60
- const listChanged = previousTools.length > 0 &&
61
- (previousTools.length !== selectedTools.length || previousTools.some((t, i) => t !== selectedTools[i]));
62
- actions.push({
63
- detail: `tools: ${selectedTools.join(', ')}${listChanged ? ` — replaced: ${previousTools.join(', ')}` : ''}`,
64
- label: 'Wrote .atkrc.json',
65
- });
66
- const removedTools = previousTools.filter((t) => !selectedTools.includes(t));
67
- if (removedTools.length > 0) {
68
- actions.push({
69
- detail: `${removedTools.join(', ')} — installed files and config directories were left in place`,
70
- label: 'Removed from tools list',
51
+ // Steps 1 and 2 run under the lockfile lock, so a concurrent install's or move's write isn't
52
+ // lost, and a lock that stays held fails setup before it changes anything.
53
+ await withLockfileErrorHandling(projectDir, async () => {
54
+ // 1. Write .atkrc.json with { tools: [...] }. Setup replaces the tools list, so say which
55
+ // list it replaced and which tools dropped out of it.
56
+ // Frozen assets are not setup's to change, so they carry over.
57
+ const previousConfig = await loadPreviousConfig(projectDir);
58
+ const previousTools = previousConfig?.tools ?? [];
59
+ await saveProjectConfig(projectDir, {
60
+ ...(previousConfig?.frozenAssets?.length ? { frozenAssets: previousConfig.frozenAssets } : {}),
61
+ tools: selectedTools,
71
62
  });
72
- }
73
- // 2. Write/update .atk-lock.json
74
- const lockfilePath = getLockfilePath(projectDir);
75
- if (existsSync(lockfilePath)) {
76
- // Preserve existing assets and org
77
- const existing = await readLockfile(projectDir);
78
- // Only update org if it's not already set and we have a new one
79
- const updatedLockfile = {
80
- ...existing,
81
- lockVersion: 1,
82
- ...(resolvedOrg !== undefined && !existing.org ? { org: resolvedOrg } : {}),
83
- };
84
- await writeLockfile(projectDir, updatedLockfile);
63
+ const listChanged = previousTools.length > 0 &&
64
+ (previousTools.length !== selectedTools.length || previousTools.some((t, i) => t !== selectedTools[i]));
85
65
  actions.push({
86
- detail: `${(existing.assets ?? []).length} existing asset(s) preserved`,
87
- label: 'Updated .atk-lock.json',
66
+ detail: `tools: ${selectedTools.join(', ')}${listChanged ? ` — replaced: ${previousTools.join(', ')}` : ''}`,
67
+ label: 'Wrote .atkrc.json',
88
68
  });
89
- }
90
- else {
91
- await writeLockfile(projectDir, {
92
- assets: [],
93
- lockVersion: 1,
94
- ...(resolvedOrg !== undefined ? { org: resolvedOrg } : {}),
95
- });
96
- actions.push({
97
- detail: resolvedOrg ? `org: ${resolvedOrg}` : 'no org',
98
- label: 'Created .atk-lock.json',
99
- });
100
- }
69
+ const removedTools = previousTools.filter((t) => !selectedTools.includes(t));
70
+ if (removedTools.length > 0) {
71
+ actions.push({
72
+ detail: `${removedTools.join(', ')} — installed files and config directories were left in place`,
73
+ label: 'Removed from tools list',
74
+ });
75
+ }
76
+ // 2. Write/update .atk-lock.json. The existence check is under the lock too: an install
77
+ // may create the lockfile meanwhile.
78
+ const lockfilePath = getLockfilePath(projectDir);
79
+ if (existsSync(lockfilePath)) {
80
+ // Preserve existing assets and org
81
+ const existing = await readLockfile(projectDir);
82
+ // Only update org if it's not already set and we have a new one
83
+ const updatedLockfile = {
84
+ ...existing,
85
+ lockVersion: 1,
86
+ ...(resolvedOrg !== undefined && !existing.org ? { org: resolvedOrg } : {}),
87
+ };
88
+ await writeLockfile(projectDir, updatedLockfile);
89
+ actions.push({
90
+ detail: `${(existing.assets ?? []).length} existing asset(s) preserved`,
91
+ label: 'Updated .atk-lock.json',
92
+ });
93
+ }
94
+ else {
95
+ await writeLockfile(projectDir, {
96
+ assets: [],
97
+ lockVersion: 1,
98
+ ...(resolvedOrg !== undefined ? { org: resolvedOrg } : {}),
99
+ });
100
+ actions.push({
101
+ detail: resolvedOrg ? `org: ${resolvedOrg}` : 'no org',
102
+ label: 'Created .atk-lock.json',
103
+ });
104
+ }
105
+ });
101
106
  // 3. Ensure each selected tool's marker directory exists and .atkrc.json is
102
107
  // in .gitignore via the adapters' gitignore entries
103
108
  const allAdded = [];