@detergent-software/atk 3.0.0-dev.3 → 3.0.0-dev.4

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 (36) hide show
  1. package/build/commands/browse.d.ts.map +1 -1
  2. package/build/commands/browse.js +3 -80
  3. package/build/commands/browse.js.map +1 -1
  4. package/build/commands/prune.d.ts.map +1 -1
  5. package/build/commands/prune.js +14 -32
  6. package/build/commands/prune.js.map +1 -1
  7. package/build/commands/publish.d.ts.map +1 -1
  8. package/build/commands/publish.js +46 -583
  9. package/build/commands/publish.js.map +1 -1
  10. package/build/commands/setup.d.ts.map +1 -1
  11. package/build/commands/setup.js +37 -238
  12. package/build/commands/setup.js.map +1 -1
  13. package/build/commands/uninstall.d.ts.map +1 -1
  14. package/build/commands/uninstall.js +93 -211
  15. package/build/commands/uninstall.js.map +1 -1
  16. package/build/hooks/useBrowseState.d.ts +23 -0
  17. package/build/hooks/useBrowseState.d.ts.map +1 -1
  18. package/build/hooks/useBrowseState.js +77 -1
  19. package/build/hooks/useBrowseState.js.map +1 -1
  20. package/build/hooks/useConfirmation.d.ts +18 -0
  21. package/build/hooks/useConfirmation.d.ts.map +1 -0
  22. package/build/hooks/useConfirmation.js +56 -0
  23. package/build/hooks/useConfirmation.js.map +1 -0
  24. package/build/hooks/usePublishState.d.ts +115 -0
  25. package/build/hooks/usePublishState.d.ts.map +1 -0
  26. package/build/hooks/usePublishState.js +667 -0
  27. package/build/hooks/usePublishState.js.map +1 -0
  28. package/build/hooks/useSetupState.d.ts +57 -0
  29. package/build/hooks/useSetupState.d.ts.map +1 -0
  30. package/build/hooks/useSetupState.js +283 -0
  31. package/build/hooks/useSetupState.js.map +1 -0
  32. package/build/hooks/useUninstallState.d.ts +91 -0
  33. package/build/hooks/useUninstallState.d.ts.map +1 -0
  34. package/build/hooks/useUninstallState.js +322 -0
  35. package/build/hooks/useUninstallState.js.map +1 -0
  36. package/package.json +1 -1
@@ -0,0 +1,322 @@
1
+ import { useEffect, useReducer, useRef } from 'react';
2
+ import { findInstalledAsset, LockfileLockedError, readLockfile, withLockfileLock } from '../lib/lockfile.js';
3
+ import { findProjectRoot } from '../lib/paths.js';
4
+ import { fetchRegistry, findBundle } from '../lib/registry.js';
5
+ import { resolveTool } from '../lib/tool-resolver.js';
6
+ import { executeBundleUninstall, planBundleUninstall, planUninstall, uninstallAsset, } from '../lib/uninstaller.js';
7
+ // ---------------------------------------------------------------------------
8
+ // Initial state factory
9
+ // ---------------------------------------------------------------------------
10
+ export function createInitialState(flags) {
11
+ return {
12
+ bundleError: null,
13
+ bundleResult: null,
14
+ errorMessage: '',
15
+ flags,
16
+ outcome: null,
17
+ phase: 'loading',
18
+ progress: 'Initializing...',
19
+ singleError: null,
20
+ singleResult: null,
21
+ };
22
+ }
23
+ // ---------------------------------------------------------------------------
24
+ // Pure reducer
25
+ // ---------------------------------------------------------------------------
26
+ export function uninstallReducer(state, action) {
27
+ switch (action.type) {
28
+ case 'CANCEL': {
29
+ // Cancellation from the confirming phase leads to done
30
+ if (state.phase !== 'confirming')
31
+ return state;
32
+ return { ...state, phase: 'done' };
33
+ }
34
+ case 'CONFIRM': {
35
+ // Confirmation from the confirming phase transitions to executing
36
+ if (state.phase !== 'confirming')
37
+ return state;
38
+ return { ...state, phase: 'executing', progress: 'Executing...' };
39
+ }
40
+ case 'ERROR':
41
+ return { ...state, errorMessage: action.message, phase: 'error' };
42
+ case 'EXECUTE_DONE': {
43
+ return {
44
+ ...state,
45
+ bundleError: action.bundleError ?? state.bundleError,
46
+ bundleResult: action.bundleResult ?? state.bundleResult,
47
+ phase: 'done',
48
+ singleError: action.singleError ?? state.singleError,
49
+ singleResult: action.singleResult ?? state.singleResult,
50
+ };
51
+ }
52
+ case 'EXECUTE_ERROR': {
53
+ return { ...state, errorMessage: action.message, phase: 'error' };
54
+ }
55
+ case 'EXECUTE_PROGRESS': {
56
+ if (state.phase !== 'executing')
57
+ return state;
58
+ return { ...state, progress: action.message };
59
+ }
60
+ case 'LOAD_DONE': {
61
+ const { outcome } = action;
62
+ // Determine the next phase based on the outcome variant
63
+ switch (outcome.outcome) {
64
+ // Confirmation needed
65
+ case 'bundle-confirming':
66
+ case 'confirming':
67
+ return { ...state, outcome, phase: 'confirming' };
68
+ // Terminal outcomes — go straight to done
69
+ case 'bundle-not-installed':
70
+ case 'bundle-success':
71
+ case 'dry-run-bundle':
72
+ // falls through
73
+ case 'dry-run-single':
74
+ case 'not-installed':
75
+ case 'success':
76
+ return { ...state, outcome, phase: 'done' };
77
+ default:
78
+ return { ...state, outcome, phase: 'done' };
79
+ }
80
+ }
81
+ case 'LOAD_PROGRESS': {
82
+ if (state.phase !== 'loading')
83
+ return state;
84
+ return { ...state, progress: action.message };
85
+ }
86
+ default:
87
+ return state;
88
+ }
89
+ }
90
+ // ---------------------------------------------------------------------------
91
+ // Hook
92
+ // ---------------------------------------------------------------------------
93
+ export function useUninstallState(flags) {
94
+ const [state, dispatch] = useReducer(uninstallReducer, undefined, () => createInitialState(flags));
95
+ // Guard against React development-mode double-firing of effects.
96
+ const hasLoadedRef = useRef(false);
97
+ // --- Loading phase-gated effect ---
98
+ useEffect(() => {
99
+ if (state.phase !== 'loading')
100
+ return;
101
+ if (hasLoadedRef.current)
102
+ return;
103
+ hasLoadedRef.current = true;
104
+ let cancelled = false;
105
+ const load = async () => {
106
+ const { cascade, dryRun, name, projectRoot, refresh, tool, yes } = state.flags;
107
+ const projectDir = findProjectRoot(projectRoot);
108
+ const { adapter, tool: resolvedTool } = await resolveTool(tool);
109
+ // Step 1: Try bundle detection first
110
+ dispatch({ message: 'Fetching registry...', type: 'LOAD_PROGRESS' });
111
+ const registry = await fetchRegistry({ force: refresh });
112
+ if (cancelled)
113
+ return;
114
+ const bundle = findBundle(registry, name);
115
+ if (bundle) {
116
+ // Bundle uninstall path
117
+ dispatch({ message: 'Planning bundle removal...', type: 'LOAD_PROGRESS' });
118
+ const lockfile = await readLockfile(projectDir);
119
+ if (cancelled)
120
+ return;
121
+ const plan = planBundleUninstall(lockfile, bundle.name, bundle.version);
122
+ // If nothing to remove, return not-installed outcome
123
+ if (plan.assetsToRemove.length === 0 && plan.orphansToRemove.length === 0) {
124
+ dispatch({ outcome: { bundleName: bundle.name, outcome: 'bundle-not-installed' }, type: 'LOAD_DONE' });
125
+ return;
126
+ }
127
+ // Dry-run: return plan without executing
128
+ if (dryRun) {
129
+ dispatch({ outcome: { outcome: 'dry-run-bundle', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
130
+ return;
131
+ }
132
+ // If --yes flag, execute immediately
133
+ if (yes) {
134
+ dispatch({ message: 'Removing bundle assets...', type: 'LOAD_PROGRESS' });
135
+ const result = await executeBundleUninstall(plan, {
136
+ adapter,
137
+ cascade,
138
+ onProgress: (message) => {
139
+ if (!cancelled)
140
+ dispatch({ message, type: 'LOAD_PROGRESS' });
141
+ },
142
+ projectDir,
143
+ });
144
+ if (cancelled)
145
+ return;
146
+ dispatch({ outcome: { outcome: 'bundle-success', plan, result, tool: resolvedTool }, type: 'LOAD_DONE' });
147
+ return;
148
+ }
149
+ // Otherwise, return the plan for confirmation prompt
150
+ if (!process.stdin.isTTY) {
151
+ dispatch({
152
+ message: 'Confirmation required but stdin is not interactive. Use --yes (-y) to skip the prompt.',
153
+ type: 'ERROR',
154
+ });
155
+ return;
156
+ }
157
+ dispatch({ outcome: { adapter, outcome: 'bundle-confirming', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
158
+ return;
159
+ }
160
+ // Dry-run for single asset: read lockfile directly (skip lock), compute plan, return
161
+ if (dryRun) {
162
+ dispatch({ message: 'Reading lockfile...', type: 'LOAD_PROGRESS' });
163
+ const lockfile = await readLockfile(projectDir);
164
+ if (cancelled)
165
+ return;
166
+ const installed = findInstalledAsset(lockfile, name);
167
+ if (!installed) {
168
+ dispatch({ outcome: { name, outcome: 'not-installed' }, type: 'LOAD_DONE' });
169
+ return;
170
+ }
171
+ const plan = planUninstall(lockfile, name);
172
+ dispatch({ outcome: { adapter, outcome: 'dry-run-single', plan, tool: resolvedTool }, type: 'LOAD_DONE' });
173
+ return;
174
+ }
175
+ // Fall through to existing single-asset uninstall logic
176
+ try {
177
+ const result = await withLockfileLock(projectDir, async () => {
178
+ dispatch({ message: 'Reading lockfile...', type: 'LOAD_PROGRESS' });
179
+ const lockfile = await readLockfile(projectDir);
180
+ if (cancelled)
181
+ return null;
182
+ const installed = findInstalledAsset(lockfile, name);
183
+ if (!installed) {
184
+ return { name, outcome: 'not-installed' };
185
+ }
186
+ // Compute the plan for display
187
+ const plan = planUninstall(lockfile, name);
188
+ // If dependents exist and no --yes flag, ask for confirmation
189
+ if (plan.dependents.length > 0 && !yes) {
190
+ if (!process.stdin.isTTY) {
191
+ throw new Error('Confirmation required but stdin is not interactive. Use --yes (-y) to skip the prompt.');
192
+ }
193
+ return { adapter, lockfile, outcome: 'confirming', plan, tool: resolvedTool };
194
+ }
195
+ dispatch({ message: `Uninstalling ${name}...`, type: 'LOAD_PROGRESS' });
196
+ const results = await uninstallAsset(name, {
197
+ adapter,
198
+ cascade,
199
+ lockfile,
200
+ onProgress: (message) => {
201
+ if (!cancelled)
202
+ dispatch({ message, type: 'LOAD_PROGRESS' });
203
+ },
204
+ plan,
205
+ projectDir,
206
+ });
207
+ return { outcome: 'success', plan, results, tool: resolvedTool };
208
+ });
209
+ if (cancelled)
210
+ return;
211
+ if (result === null)
212
+ return;
213
+ dispatch({ outcome: result, type: 'LOAD_DONE' });
214
+ }
215
+ catch (error) {
216
+ if (cancelled)
217
+ return;
218
+ if (error instanceof LockfileLockedError) {
219
+ dispatch({
220
+ message: 'Another ATK process is currently modifying this project. Please wait and try again.',
221
+ type: 'ERROR',
222
+ });
223
+ return;
224
+ }
225
+ throw error;
226
+ }
227
+ };
228
+ load().catch((err) => {
229
+ if (!cancelled) {
230
+ dispatch({ message: err instanceof Error ? err.message : String(err), type: 'ERROR' });
231
+ }
232
+ });
233
+ return () => {
234
+ cancelled = true;
235
+ };
236
+ // Phase-gated effect: only runs when entering 'loading'
237
+ // eslint-disable-next-line react-hooks/exhaustive-deps
238
+ }, [state.phase]);
239
+ // --- Executing phase-gated effect ---
240
+ useEffect(() => {
241
+ if (state.phase !== 'executing')
242
+ return;
243
+ let cancelled = false;
244
+ const execute = async () => {
245
+ const { outcome } = state;
246
+ if (!outcome) {
247
+ dispatch({ message: 'Internal error: no outcome available for execution.', type: 'EXECUTE_ERROR' });
248
+ return;
249
+ }
250
+ const { cascade, name, projectRoot } = state.flags;
251
+ const projectDir = findProjectRoot(projectRoot);
252
+ // Handle bundle confirmation execution
253
+ if (outcome.outcome === 'bundle-confirming') {
254
+ const { adapter, plan } = outcome;
255
+ try {
256
+ const result = await executeBundleUninstall(plan, {
257
+ adapter,
258
+ cascade,
259
+ onProgress: (message) => {
260
+ if (!cancelled)
261
+ dispatch({ message, type: 'EXECUTE_PROGRESS' });
262
+ },
263
+ projectDir,
264
+ });
265
+ if (cancelled)
266
+ return;
267
+ dispatch({ bundleResult: result, type: 'EXECUTE_DONE' });
268
+ }
269
+ catch (err) {
270
+ if (cancelled)
271
+ return;
272
+ dispatch({
273
+ bundleError: err instanceof Error ? err.message : String(err),
274
+ type: 'EXECUTE_DONE',
275
+ });
276
+ }
277
+ return;
278
+ }
279
+ // Handle single-asset confirmation execution
280
+ if (outcome.outcome === 'confirming') {
281
+ const { adapter, lockfile, plan } = outcome;
282
+ try {
283
+ const results = await uninstallAsset(name, {
284
+ adapter,
285
+ cascade,
286
+ lockfile,
287
+ onProgress: (message) => {
288
+ if (!cancelled)
289
+ dispatch({ message, type: 'EXECUTE_PROGRESS' });
290
+ },
291
+ plan,
292
+ projectDir,
293
+ });
294
+ if (cancelled)
295
+ return;
296
+ dispatch({ singleResult: results, type: 'EXECUTE_DONE' });
297
+ }
298
+ catch (err) {
299
+ if (cancelled)
300
+ return;
301
+ dispatch({
302
+ singleError: err instanceof Error ? err.message : String(err),
303
+ type: 'EXECUTE_DONE',
304
+ });
305
+ }
306
+ return;
307
+ }
308
+ };
309
+ execute().catch((err) => {
310
+ if (!cancelled) {
311
+ dispatch({ message: err instanceof Error ? err.message : String(err), type: 'EXECUTE_ERROR' });
312
+ }
313
+ });
314
+ return () => {
315
+ cancelled = true;
316
+ };
317
+ // Phase-gated effect: only runs when entering 'executing'
318
+ // eslint-disable-next-line react-hooks/exhaustive-deps
319
+ }, [state.phase]);
320
+ return [state, dispatch];
321
+ }
322
+ //# sourceMappingURL=useUninstallState.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"useUninstallState.js","sourceRoot":"","sources":["../../src/hooks/useUninstallState.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": "3.0.0-dev.3",
3
+ "version": "3.0.0-dev.4",
4
4
  "description": "Agentic Tool Kit — CLI for managing AI coding tool assets.",
5
5
  "type": "module",
6
6
  "bin": {