@detergent-software/atk 3.0.0-dev.13 → 3.0.0-dev.15
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.
- package/build/commands/diff.d.ts.map +1 -1
- package/build/commands/diff.js +4 -116
- package/build/commands/diff.js.map +1 -1
- package/build/commands/freeze.d.ts +1 -2
- package/build/commands/freeze.d.ts.map +1 -1
- package/build/commands/freeze.js +18 -37
- package/build/commands/freeze.js.map +1 -1
- package/build/commands/pin.d.ts.map +1 -1
- package/build/commands/pin.js +24 -32
- package/build/commands/pin.js.map +1 -1
- package/build/commands/thaw.d.ts +1 -2
- package/build/commands/thaw.d.ts.map +1 -1
- package/build/commands/thaw.js +23 -37
- package/build/commands/thaw.js.map +1 -1
- package/build/commands/unpin.d.ts.map +1 -1
- package/build/commands/unpin.js +19 -27
- package/build/commands/unpin.js.map +1 -1
- package/build/components/DiffView.d.ts +0 -2
- package/build/components/DiffView.d.ts.map +1 -1
- package/build/components/DiffView.js +11 -5
- package/build/components/DiffView.js.map +1 -1
- package/build/lib/diagnostics.d.ts +7 -0
- package/build/lib/diagnostics.d.ts.map +1 -1
- package/build/lib/diagnostics.js +54 -34
- package/build/lib/diagnostics.js.map +1 -1
- package/build/lib/diff-command.d.ts +40 -0
- package/build/lib/diff-command.d.ts.map +1 -0
- package/build/lib/diff-command.js +145 -0
- package/build/lib/diff-command.js.map +1 -0
- package/build/lib/diff.d.ts +7 -0
- package/build/lib/diff.d.ts.map +1 -1
- package/build/lib/diff.js +15 -10
- package/build/lib/diff.js.map +1 -1
- package/build/lib/lockfile.d.ts +13 -1
- package/build/lib/lockfile.d.ts.map +1 -1
- package/build/lib/lockfile.js +28 -1
- package/build/lib/lockfile.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.tsx"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"diff.d.ts","sourceRoot":"","sources":["../../src/commands/diff.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AASxB,eAAO,MAAM,WAAW,sDAAsD,CAAC;AAE/E,eAAO,MAAM,OAAO;;;;;;iBA8ClB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAA+C,CAAC;AAEjE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,IAAI,EAAE,CAAC,OAAO,CAAC,EACf,OAAO,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,GAC9D,EAAE,KAAK,2CA6CP"}
|
package/build/commands/diff.js
CHANGED
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
|
|
2
2
|
import { Text } from 'ink';
|
|
3
|
-
import { existsSync } from 'node:fs';
|
|
4
|
-
import { readFile } from 'node:fs/promises';
|
|
5
|
-
import { join } from 'node:path';
|
|
6
3
|
import { option } from 'pastel';
|
|
7
4
|
import { z } from 'zod';
|
|
8
5
|
import { DiffView, Spinner } from '../components/index.js';
|
|
9
6
|
import { useCommand } from '../hooks/useCommand.js';
|
|
10
|
-
import {
|
|
11
|
-
import {
|
|
12
|
-
import { loadConfig } from '../lib/config.js';
|
|
13
|
-
import { computeAddedFileDiff, computeRemovedFileDiff, computeUnifiedDiff } from '../lib/diff.js';
|
|
14
|
-
import { fetchFileContent, getEffectiveBranch, listAssetDirectoryFiles } from '../lib/github.js';
|
|
15
|
-
import { findInstalledAsset, readLockfile } from '../lib/lockfile.js';
|
|
16
|
-
import { parseOrgFromName, resolveActiveOrg } from '../lib/org.js';
|
|
17
|
-
import { findProjectRoot } from '../lib/paths.js';
|
|
18
|
-
import { fetchRegistry, findAsset } from '../lib/registry.js';
|
|
19
|
-
import { resolveTool } from '../lib/tool-resolver.js';
|
|
7
|
+
import { computeDiffOutcome } from '../lib/diff-command.js';
|
|
8
|
+
import { parseOrgFromName } from '../lib/org.js';
|
|
20
9
|
export const description = 'Show changes between installed and latest version';
|
|
21
10
|
export const options = z.object({
|
|
22
11
|
context: z
|
|
@@ -59,108 +48,7 @@ export const args = z.tuple([z.string().describe('Asset name')]);
|
|
|
59
48
|
export default function Diff({ args: [rawName], options: { context, org: cliOrg, projectRoot, refresh, tool }, }) {
|
|
60
49
|
const { name: nameFromOrg, org: inlineOrg } = parseOrgFromName(rawName);
|
|
61
50
|
const name = inlineOrg ? nameFromOrg : rawName;
|
|
62
|
-
const state = useCommand(async (progress) =>
|
|
63
|
-
const projectDir = findProjectRoot(projectRoot);
|
|
64
|
-
progress('Loading configuration...');
|
|
65
|
-
const config = await loadConfig();
|
|
66
|
-
const { adapter } = await resolveTool(tool);
|
|
67
|
-
progress('Reading lockfile...');
|
|
68
|
-
const lockfile = await readLockfile(projectDir);
|
|
69
|
-
const org = resolveActiveOrg(inlineOrg ?? cliOrg, lockfile.org, config.org);
|
|
70
|
-
const installed = findInstalledAsset(lockfile, name);
|
|
71
|
-
if (!installed) {
|
|
72
|
-
return { name, outcome: 'not-installed' };
|
|
73
|
-
}
|
|
74
|
-
progress('Fetching registry...');
|
|
75
|
-
const registry = await fetchRegistry({ force: refresh });
|
|
76
|
-
const foundAsset = findAsset(registry, name, installed.type, undefined, org);
|
|
77
|
-
if (!foundAsset) {
|
|
78
|
-
return { name, outcome: 'not-in-registry' };
|
|
79
|
-
}
|
|
80
|
-
const { asset: registryAsset, version: latestVersion } = foundAsset;
|
|
81
|
-
progress('Fetching latest version...');
|
|
82
|
-
const token = await getGitHubToken();
|
|
83
|
-
const effectiveBranch = getEffectiveBranch(config.registryBranch);
|
|
84
|
-
const remoteFiles = await listAssetDirectoryFiles(token, registryAsset, latestVersion, effectiveBranch);
|
|
85
|
-
// Resolve installed paths via the adapter
|
|
86
|
-
const resolved = resolveInstalledPaths(installed, adapter, projectDir);
|
|
87
|
-
const installedPathMap = new Map(resolved.files.map((f) => [f.sourcePath, f.installedPath]));
|
|
88
|
-
// Identify which installed files have a remote counterpart and exist locally
|
|
89
|
-
const filesToFetch = [];
|
|
90
|
-
const diffs = [];
|
|
91
|
-
for (const file of installed.files) {
|
|
92
|
-
const installedPath = installedPathMap.get(file.sourcePath);
|
|
93
|
-
const remoteFile = remoteFiles.find((f) => f.name === file.sourcePath);
|
|
94
|
-
if (!remoteFile) {
|
|
95
|
-
const absoluteInstalledPath = installedPath ? join(projectDir, installedPath) : undefined;
|
|
96
|
-
if (absoluteInstalledPath && existsSync(absoluteInstalledPath)) {
|
|
97
|
-
const localContent = await readFile(absoluteInstalledPath, 'utf-8');
|
|
98
|
-
diffs.push({
|
|
99
|
-
diffLines: computeRemovedFileDiff(localContent),
|
|
100
|
-
fileName: file.sourcePath,
|
|
101
|
-
status: 'removed',
|
|
102
|
-
});
|
|
103
|
-
}
|
|
104
|
-
else {
|
|
105
|
-
diffs.push({ fileName: file.sourcePath, status: 'removed' });
|
|
106
|
-
}
|
|
107
|
-
continue;
|
|
108
|
-
}
|
|
109
|
-
if (!installedPath) {
|
|
110
|
-
diffs.push({ fileName: file.sourcePath, status: 'missing-local' });
|
|
111
|
-
continue;
|
|
112
|
-
}
|
|
113
|
-
const absoluteInstalledPath = join(projectDir, installedPath);
|
|
114
|
-
if (!existsSync(absoluteInstalledPath)) {
|
|
115
|
-
diffs.push({ fileName: file.sourcePath, status: 'missing-local' });
|
|
116
|
-
continue;
|
|
117
|
-
}
|
|
118
|
-
filesToFetch.push({ file, installedPath, remotePath: remoteFile.path });
|
|
119
|
-
}
|
|
120
|
-
// Fetch all remote file contents in parallel
|
|
121
|
-
const remoteContents = await Promise.all(filesToFetch.map(async ({ remotePath }) => fetchFileContent(token, remotePath, effectiveBranch)));
|
|
122
|
-
// Build diffs from fetched content
|
|
123
|
-
for (let i = 0; i < filesToFetch.length; i++) {
|
|
124
|
-
const { file, installedPath } = filesToFetch[i];
|
|
125
|
-
const remoteContent = remoteContents[i];
|
|
126
|
-
const absoluteInstalledPath = join(projectDir, installedPath);
|
|
127
|
-
const localContent = await readFile(absoluteInstalledPath, 'utf-8');
|
|
128
|
-
if (localContent === remoteContent) {
|
|
129
|
-
diffs.push({
|
|
130
|
-
fileName: file.sourcePath,
|
|
131
|
-
localLines: localContent.split('\n').length,
|
|
132
|
-
remoteLines: remoteContent.split('\n').length,
|
|
133
|
-
status: 'unchanged',
|
|
134
|
-
});
|
|
135
|
-
}
|
|
136
|
-
else {
|
|
137
|
-
diffs.push({
|
|
138
|
-
diffLines: computeUnifiedDiff(remoteContent, localContent, context),
|
|
139
|
-
fileName: file.sourcePath,
|
|
140
|
-
localLines: localContent.split('\n').length,
|
|
141
|
-
remoteLines: remoteContent.split('\n').length,
|
|
142
|
-
status: 'modified',
|
|
143
|
-
});
|
|
144
|
-
}
|
|
145
|
-
}
|
|
146
|
-
for (const remoteFile of remoteFiles) {
|
|
147
|
-
if (!installed.files.find((f) => f.sourcePath === remoteFile.name)) {
|
|
148
|
-
const remoteContent = await fetchFileContent(token, remoteFile.path, effectiveBranch);
|
|
149
|
-
diffs.push({ diffLines: computeAddedFileDiff(remoteContent), fileName: remoteFile.name, status: 'added' });
|
|
150
|
-
}
|
|
151
|
-
}
|
|
152
|
-
const sameVersion = installed.version === latestVersion;
|
|
153
|
-
return {
|
|
154
|
-
contextLines: context,
|
|
155
|
-
diffs,
|
|
156
|
-
installed,
|
|
157
|
-
latestVersion,
|
|
158
|
-
name,
|
|
159
|
-
outcome: 'results',
|
|
160
|
-
registryAsset,
|
|
161
|
-
sameVersion,
|
|
162
|
-
};
|
|
163
|
-
}, [cliOrg, inlineOrg, name, refresh, tool]);
|
|
51
|
+
const state = useCommand(async (progress) => computeDiffOutcome(name, undefined, tool, context, refresh, projectRoot, cliOrg, inlineOrg, progress), [cliOrg, context, inlineOrg, name, projectRoot, refresh, tool]);
|
|
164
52
|
if (state.status === 'loading') {
|
|
165
53
|
return _jsx(Spinner, { message: state.message });
|
|
166
54
|
}
|
|
@@ -174,6 +62,6 @@ export default function Diff({ args: [rawName], options: { context, org: cliOrg,
|
|
|
174
62
|
if (data.outcome === 'not-in-registry') {
|
|
175
63
|
return (_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: data.name }), " was not found in the registry."] }));
|
|
176
64
|
}
|
|
177
|
-
return (_jsx(DiffView, {
|
|
65
|
+
return (_jsx(DiffView, { diffs: data.diffs, installedVersion: data.installed.version, latestVersion: data.latestVersion, name: data.name, sameVersion: data.sameVersion }));
|
|
178
66
|
}
|
|
179
67
|
//# sourceMappingURL=diff.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,
|
|
1
|
+
{"version":3,"file":"diff.js","sourceRoot":"","sources":["../../src/commands/diff.tsx"],"names":[],"mappings":"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"}
|
|
@@ -2,7 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const description = "Freeze an installed asset to prevent sync and update from overwriting it";
|
|
3
3
|
export declare const options: z.ZodObject<{
|
|
4
4
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
5
|
-
tool: z.ZodOptional<z.ZodString>;
|
|
6
5
|
type: z.ZodOptional<z.ZodEnum<{
|
|
7
6
|
skill: "skill";
|
|
8
7
|
agent: "agent";
|
|
@@ -17,6 +16,6 @@ type Props = {
|
|
|
17
16
|
args: z.infer<typeof args>;
|
|
18
17
|
options: z.infer<typeof options>;
|
|
19
18
|
};
|
|
20
|
-
export default function Freeze({ args: [name], options: { projectRoot,
|
|
19
|
+
export default function Freeze({ args: [name], options: { projectRoot, type } }: Props): import("react/jsx-runtime").JSX.Element;
|
|
21
20
|
export {};
|
|
22
21
|
//# sourceMappingURL=freeze.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,WAAW,6EAA6E,CAAC;AAEtG,eAAO,MAAM,OAAO;;;;;;;;;;iBAgBlB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAAyD,CAAC;AAI3E,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CAqDrF"}
|
package/build/commands/freeze.js
CHANGED
|
@@ -4,10 +4,9 @@ import { option } from 'pastel';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Spinner } from '../components/index.js';
|
|
6
6
|
import { useCommand } from '../hooks/useCommand.js';
|
|
7
|
-
import {
|
|
7
|
+
import { freezeAsset, isFrozen, readLockfile, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
|
|
8
8
|
import { findProjectRoot } from '../lib/paths.js';
|
|
9
9
|
import { AssetType } from '../lib/schemas/manifest.js';
|
|
10
|
-
import { resolveTool } from '../lib/tool-resolver.js';
|
|
11
10
|
export const description = 'Freeze an installed asset to prevent sync and update from overwriting it';
|
|
12
11
|
export const options = z.object({
|
|
13
12
|
projectRoot: z
|
|
@@ -17,50 +16,32 @@ export const options = z.object({
|
|
|
17
16
|
alias: 'P',
|
|
18
17
|
description: 'Override project root directory',
|
|
19
18
|
})),
|
|
20
|
-
tool: z
|
|
21
|
-
.string()
|
|
22
|
-
.optional()
|
|
23
|
-
.describe(option({
|
|
24
|
-
alias: 'T',
|
|
25
|
-
description: 'Target tool (e.g., claude-code)',
|
|
26
|
-
})),
|
|
27
19
|
type: AssetType.optional().describe(option({
|
|
28
20
|
alias: 't',
|
|
29
21
|
description: 'Filter by asset type (skill, agent, rule, hook, memory-template, mcp-config)',
|
|
30
22
|
})),
|
|
31
23
|
});
|
|
32
24
|
export const args = z.tuple([z.string().describe('Asset name to freeze')]);
|
|
33
|
-
export default function Freeze({ args: [name], options: { projectRoot,
|
|
25
|
+
export default function Freeze({ args: [name], options: { projectRoot, type } }) {
|
|
34
26
|
const state = useCommand(async (progress) => {
|
|
35
27
|
const projectDir = findProjectRoot(projectRoot);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
// Check if already frozen
|
|
47
|
-
if (isFrozen(lockfile, name, type)) {
|
|
48
|
-
return { name, outcome: 'already-frozen' };
|
|
49
|
-
}
|
|
50
|
-
progress('Freezing asset...');
|
|
51
|
-
const updatedLockfile = freezeAsset(lockfile, name, type);
|
|
52
|
-
progress('Writing lockfile...');
|
|
53
|
-
await writeLockfile(projectDir, updatedLockfile);
|
|
54
|
-
return { name, outcome: 'frozen' };
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
if (error instanceof LockfileLockedError) {
|
|
59
|
-
throw new Error('Another ATK process is currently modifying this project. Please wait and try again.');
|
|
28
|
+
// Note: resolveTool is intentionally omitted here. Unlike pin/unpin which
|
|
29
|
+
// accept a --tool option and may need tool context, freeze only toggles the
|
|
30
|
+
// `frozen` flag in lockfile metadata and does not place or modify any files.
|
|
31
|
+
return await withLockfileErrorHandling(projectDir, async () => {
|
|
32
|
+
progress('Reading lockfile...');
|
|
33
|
+
const lockfile = await readLockfile(projectDir);
|
|
34
|
+
// Check if already frozen
|
|
35
|
+
if (isFrozen(lockfile, name, type)) {
|
|
36
|
+
return { name, outcome: 'already-frozen' };
|
|
60
37
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
38
|
+
progress('Freezing asset...');
|
|
39
|
+
const updatedLockfile = freezeAsset(lockfile, name, type);
|
|
40
|
+
progress('Writing lockfile...');
|
|
41
|
+
await writeLockfile(projectDir, updatedLockfile);
|
|
42
|
+
return { name, outcome: 'frozen' };
|
|
43
|
+
});
|
|
44
|
+
}, [name, projectRoot, type]);
|
|
64
45
|
if (state.status === 'loading') {
|
|
65
46
|
return _jsx(Spinner, { message: state.message });
|
|
66
47
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,
|
|
1
|
+
{"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,OAAO;;;;;;;;;;;iBAyBlB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAEf,CAAC;AAOH,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CAiF3F"}
|
package/build/commands/pin.js
CHANGED
|
@@ -4,7 +4,7 @@ import { option } from 'pastel';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Spinner } from '../components/index.js';
|
|
6
6
|
import { useCommand } from '../hooks/useCommand.js';
|
|
7
|
-
import { findInstalledAsset, isPinned, LockfileError,
|
|
7
|
+
import { findInstalledAsset, isPinned, LockfileError, pinAssetVersion, readLockfile, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
|
|
8
8
|
import { findProjectRoot } from '../lib/paths.js';
|
|
9
9
|
import { AssetType } from '../lib/schemas/manifest.js';
|
|
10
10
|
import { resolveTool } from '../lib/tool-resolver.js';
|
|
@@ -41,38 +41,30 @@ export default function Pin({ args: [nameArg], options: { projectRoot, tool, typ
|
|
|
41
41
|
const explicitVersion = hasVersion ? nameArg.slice(atIndex + 1) : undefined;
|
|
42
42
|
const projectDir = findProjectRoot(projectRoot);
|
|
43
43
|
await resolveTool(tool);
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
52
|
-
}
|
|
53
|
-
const pinVersion = explicitVersion ?? installed.version;
|
|
54
|
-
// Check if already pinned to the same version
|
|
55
|
-
if (isPinned(lockfile, name, type) && installed.pinnedVersion === pinVersion) {
|
|
56
|
-
return { name, outcome: 'already-pinned', version: pinVersion };
|
|
57
|
-
}
|
|
58
|
-
// Track previous pin for informational message
|
|
59
|
-
const previousPin = installed.pinnedVersion;
|
|
60
|
-
progress('Pinning asset version...');
|
|
61
|
-
const updatedLockfile = pinAssetVersion(lockfile, name, pinVersion, type);
|
|
62
|
-
progress('Writing lockfile...');
|
|
63
|
-
await writeLockfile(projectDir, updatedLockfile);
|
|
64
|
-
if (previousPin) {
|
|
65
|
-
return { name, outcome: 'updated-pin', previousVersion: previousPin, version: pinVersion };
|
|
66
|
-
}
|
|
67
|
-
return { name, outcome: 'pinned', version: pinVersion };
|
|
68
|
-
});
|
|
69
|
-
}
|
|
70
|
-
catch (error) {
|
|
71
|
-
if (error instanceof LockfileLockedError) {
|
|
72
|
-
throw new Error('Another ATK process is currently modifying this project. Please wait and try again.');
|
|
44
|
+
return await withLockfileErrorHandling(projectDir, async () => {
|
|
45
|
+
progress('Reading lockfile...');
|
|
46
|
+
const lockfile = await readLockfile(projectDir);
|
|
47
|
+
// Look up the installed asset to determine current version
|
|
48
|
+
const installed = findInstalledAsset(lockfile, name, type);
|
|
49
|
+
if (!installed) {
|
|
50
|
+
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
73
51
|
}
|
|
74
|
-
|
|
75
|
-
|
|
52
|
+
const pinVersion = explicitVersion ?? installed.version;
|
|
53
|
+
// Check if already pinned to the same version
|
|
54
|
+
if (isPinned(lockfile, name, type) && installed.pinnedVersion === pinVersion) {
|
|
55
|
+
return { name, outcome: 'already-pinned', version: pinVersion };
|
|
56
|
+
}
|
|
57
|
+
// Track previous pin for informational message
|
|
58
|
+
const previousPin = installed.pinnedVersion;
|
|
59
|
+
progress('Pinning asset version...');
|
|
60
|
+
const updatedLockfile = pinAssetVersion(lockfile, name, pinVersion, type);
|
|
61
|
+
progress('Writing lockfile...');
|
|
62
|
+
await writeLockfile(projectDir, updatedLockfile);
|
|
63
|
+
if (previousPin) {
|
|
64
|
+
return { name, outcome: 'updated-pin', previousVersion: previousPin, version: pinVersion };
|
|
65
|
+
}
|
|
66
|
+
return { name, outcome: 'pinned', version: pinVersion };
|
|
67
|
+
});
|
|
76
68
|
}, [nameArg, projectRoot, tool, type]);
|
|
77
69
|
if (state.status === 'loading') {
|
|
78
70
|
return _jsx(Spinner, { message: state.message });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pin.js","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"pin.js","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"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"}
|
package/build/commands/thaw.d.ts
CHANGED
|
@@ -2,7 +2,6 @@ import { z } from 'zod';
|
|
|
2
2
|
export declare const description = "Thaw a frozen asset to allow sync and update to overwrite it again";
|
|
3
3
|
export declare const options: z.ZodObject<{
|
|
4
4
|
projectRoot: z.ZodOptional<z.ZodString>;
|
|
5
|
-
tool: z.ZodOptional<z.ZodString>;
|
|
6
5
|
type: z.ZodOptional<z.ZodEnum<{
|
|
7
6
|
skill: "skill";
|
|
8
7
|
agent: "agent";
|
|
@@ -17,6 +16,6 @@ type Props = {
|
|
|
17
16
|
args: z.infer<typeof args>;
|
|
18
17
|
options: z.infer<typeof options>;
|
|
19
18
|
};
|
|
20
|
-
export default function Thaw({ args: [name], options: { projectRoot,
|
|
19
|
+
export default function Thaw({ args: [name], options: { projectRoot, type } }: Props): import("react/jsx-runtime").JSX.Element;
|
|
21
20
|
export {};
|
|
22
21
|
//# sourceMappingURL=thaw.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thaw.d.ts","sourceRoot":"","sources":["../../src/commands/thaw.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"thaw.d.ts","sourceRoot":"","sources":["../../src/commands/thaw.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAexB,eAAO,MAAM,WAAW,uEAAuE,CAAC;AAEhG,eAAO,MAAM,OAAO;;;;;;;;;;iBAgBlB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAAuD,CAAC;AAEzE,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAIF,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CA2DnF"}
|
package/build/commands/thaw.js
CHANGED
|
@@ -4,10 +4,9 @@ import { option } from 'pastel';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Spinner } from '../components/index.js';
|
|
6
6
|
import { useCommand } from '../hooks/useCommand.js';
|
|
7
|
-
import { findInstalledAsset, isFrozen, LockfileError,
|
|
7
|
+
import { findInstalledAsset, isFrozen, LockfileError, readLockfile, thawAsset, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
|
|
8
8
|
import { findProjectRoot } from '../lib/paths.js';
|
|
9
9
|
import { AssetType } from '../lib/schemas/manifest.js';
|
|
10
|
-
import { resolveTool } from '../lib/tool-resolver.js';
|
|
11
10
|
export const description = 'Thaw a frozen asset to allow sync and update to overwrite it again';
|
|
12
11
|
export const options = z.object({
|
|
13
12
|
projectRoot: z
|
|
@@ -17,50 +16,37 @@ export const options = z.object({
|
|
|
17
16
|
alias: 'P',
|
|
18
17
|
description: 'Override project root directory',
|
|
19
18
|
})),
|
|
20
|
-
tool: z
|
|
21
|
-
.string()
|
|
22
|
-
.optional()
|
|
23
|
-
.describe(option({
|
|
24
|
-
alias: 'T',
|
|
25
|
-
description: 'Target tool (e.g., claude-code)',
|
|
26
|
-
})),
|
|
27
19
|
type: AssetType.optional().describe(option({
|
|
28
20
|
alias: 't',
|
|
29
21
|
description: 'Filter by asset type (skill, agent, rule, hook, memory-template, mcp-config)',
|
|
30
22
|
})),
|
|
31
23
|
});
|
|
32
24
|
export const args = z.tuple([z.string().describe('Asset name to thaw')]);
|
|
33
|
-
export default function Thaw({ args: [name], options: { projectRoot,
|
|
25
|
+
export default function Thaw({ args: [name], options: { projectRoot, type } }) {
|
|
34
26
|
const state = useCommand(async (progress) => {
|
|
35
27
|
const projectDir = findProjectRoot(projectRoot);
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
}
|
|
50
|
-
progress('Thawing asset...');
|
|
51
|
-
const updatedLockfile = thawAsset(lockfile, name, type);
|
|
52
|
-
progress('Writing lockfile...');
|
|
53
|
-
await writeLockfile(projectDir, updatedLockfile);
|
|
54
|
-
return { name, outcome: 'thawed' };
|
|
55
|
-
});
|
|
56
|
-
}
|
|
57
|
-
catch (error) {
|
|
58
|
-
if (error instanceof LockfileLockedError) {
|
|
59
|
-
throw new Error('Another ATK process is currently modifying this project. Please wait and try again.');
|
|
28
|
+
// Note: resolveTool is intentionally omitted here. Unlike pin/unpin which
|
|
29
|
+
// accept a --tool option and may need tool context, thaw only toggles the
|
|
30
|
+
// `frozen` flag in lockfile metadata and does not place or modify any files.
|
|
31
|
+
return await withLockfileErrorHandling(projectDir, async () => {
|
|
32
|
+
progress('Reading lockfile...');
|
|
33
|
+
const lockfile = await readLockfile(projectDir);
|
|
34
|
+
// Verify the asset is installed
|
|
35
|
+
const installed = findInstalledAsset(lockfile, name, type);
|
|
36
|
+
if (!installed) {
|
|
37
|
+
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
38
|
+
}
|
|
39
|
+
// Check if the asset is actually frozen
|
|
40
|
+
if (!isFrozen(lockfile, name, type)) {
|
|
41
|
+
return { name, outcome: 'not-frozen' };
|
|
60
42
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
43
|
+
progress('Thawing asset...');
|
|
44
|
+
const updatedLockfile = thawAsset(lockfile, name, type);
|
|
45
|
+
progress('Writing lockfile...');
|
|
46
|
+
await writeLockfile(projectDir, updatedLockfile);
|
|
47
|
+
return { name, outcome: 'thawed' };
|
|
48
|
+
});
|
|
49
|
+
}, [name, projectRoot, type]);
|
|
64
50
|
if (state.status === 'loading') {
|
|
65
51
|
return _jsx(Spinner, { message: state.message });
|
|
66
52
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"thaw.js","sourceRoot":"","sources":["../../src/commands/thaw.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"thaw.js","sourceRoot":"","sources":["../../src/commands/thaw.tsx"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpin.d.ts","sourceRoot":"","sources":["../../src/commands/unpin.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;
|
|
1
|
+
{"version":3,"file":"unpin.d.ts","sourceRoot":"","sources":["../../src/commands/unpin.tsx"],"names":[],"mappings":"AAEA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAiBxB,eAAO,MAAM,WAAW,iDAAiD,CAAC;AAE1E,eAAO,MAAM,OAAO;;;;;;;;;;;iBAyBlB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAAwD,CAAC;AAE1E,KAAK,KAAK,GAAG;IACX,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC3B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAIF,MAAM,CAAC,OAAO,UAAU,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,2CA4D1F"}
|
package/build/commands/unpin.js
CHANGED
|
@@ -4,7 +4,7 @@ import { option } from 'pastel';
|
|
|
4
4
|
import { z } from 'zod';
|
|
5
5
|
import { Spinner } from '../components/index.js';
|
|
6
6
|
import { useCommand } from '../hooks/useCommand.js';
|
|
7
|
-
import { findInstalledAsset, isPinned, LockfileError,
|
|
7
|
+
import { findInstalledAsset, isPinned, LockfileError, readLockfile, unpinAssetVersion, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
|
|
8
8
|
import { findProjectRoot } from '../lib/paths.js';
|
|
9
9
|
import { AssetType } from '../lib/schemas/manifest.js';
|
|
10
10
|
import { resolveTool } from '../lib/tool-resolver.js';
|
|
@@ -34,33 +34,25 @@ export default function Unpin({ args: [name], options: { projectRoot, tool, type
|
|
|
34
34
|
const state = useCommand(async (progress) => {
|
|
35
35
|
const projectDir = findProjectRoot(projectRoot);
|
|
36
36
|
await resolveTool(tool);
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
45
|
-
}
|
|
46
|
-
// Check if the asset is actually pinned
|
|
47
|
-
if (!isPinned(lockfile, name, type)) {
|
|
48
|
-
return { name, outcome: 'not-pinned' };
|
|
49
|
-
}
|
|
50
|
-
const previousVersion = installed.pinnedVersion;
|
|
51
|
-
progress('Removing version pin...');
|
|
52
|
-
const updatedLockfile = unpinAssetVersion(lockfile, name, type);
|
|
53
|
-
progress('Writing lockfile...');
|
|
54
|
-
await writeLockfile(projectDir, updatedLockfile);
|
|
55
|
-
return { name, outcome: 'unpinned', version: previousVersion };
|
|
56
|
-
});
|
|
57
|
-
}
|
|
58
|
-
catch (error) {
|
|
59
|
-
if (error instanceof LockfileLockedError) {
|
|
60
|
-
throw new Error('Another ATK process is currently modifying this project. Please wait and try again.');
|
|
37
|
+
return await withLockfileErrorHandling(projectDir, async () => {
|
|
38
|
+
progress('Reading lockfile...');
|
|
39
|
+
const lockfile = await readLockfile(projectDir);
|
|
40
|
+
// Verify the asset is installed
|
|
41
|
+
const installed = findInstalledAsset(lockfile, name, type);
|
|
42
|
+
if (!installed) {
|
|
43
|
+
throw new LockfileError(`Asset '${name}' is not installed`);
|
|
61
44
|
}
|
|
62
|
-
|
|
63
|
-
|
|
45
|
+
// Check if the asset is actually pinned
|
|
46
|
+
if (!isPinned(lockfile, name, type)) {
|
|
47
|
+
return { name, outcome: 'not-pinned' };
|
|
48
|
+
}
|
|
49
|
+
const previousVersion = installed.pinnedVersion;
|
|
50
|
+
progress('Removing version pin...');
|
|
51
|
+
const updatedLockfile = unpinAssetVersion(lockfile, name, type);
|
|
52
|
+
progress('Writing lockfile...');
|
|
53
|
+
await writeLockfile(projectDir, updatedLockfile);
|
|
54
|
+
return { name, outcome: 'unpinned', version: previousVersion };
|
|
55
|
+
});
|
|
64
56
|
}, [name, projectRoot, tool, type]);
|
|
65
57
|
if (state.status === 'loading') {
|
|
66
58
|
return _jsx(Spinner, { message: state.message });
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"unpin.js","sourceRoot":"","sources":["../../src/commands/unpin.tsx"],"names":[],"mappings":";AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AACjD,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EACL,kBAAkB,EAClB,QAAQ,EACR,aAAa,EACb,
|
|
1
|
+
{"version":3,"file":"unpin.js","sourceRoot":"","sources":["../../src/commands/unpin.tsx"],"names":[],"mappings":"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"}
|