@detergent-software/atk 9.2.0-dev.7 → 9.2.0-dev.9

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 (40) hide show
  1. package/CHANGELOG.md +25 -0
  2. package/README.md +3 -3
  3. package/build/command-manifest.json +36 -2
  4. package/build/commands/freeze.d.ts +2 -2
  5. package/build/commands/freeze.d.ts.map +1 -1
  6. package/build/commands/freeze.js +45 -22
  7. package/build/commands/freeze.js.map +1 -1
  8. package/build/commands/pin.d.ts +2 -2
  9. package/build/commands/pin.d.ts.map +1 -1
  10. package/build/commands/pin.js +77 -46
  11. package/build/commands/pin.js.map +1 -1
  12. package/build/commands/sync.d.ts +13 -2
  13. package/build/commands/sync.d.ts.map +1 -1
  14. package/build/commands/sync.js +50 -13
  15. package/build/commands/sync.js.map +1 -1
  16. package/build/commands/thaw.d.ts +2 -2
  17. package/build/commands/thaw.d.ts.map +1 -1
  18. package/build/commands/thaw.js +44 -21
  19. package/build/commands/thaw.js.map +1 -1
  20. package/build/commands/unpin.d.ts +2 -2
  21. package/build/commands/unpin.d.ts.map +1 -1
  22. package/build/commands/unpin.js +54 -25
  23. package/build/commands/unpin.js.map +1 -1
  24. package/build/lib/config.d.ts +18 -0
  25. package/build/lib/config.d.ts.map +1 -1
  26. package/build/lib/config.js +32 -9
  27. package/build/lib/config.js.map +1 -1
  28. package/build/lib/named-entry.d.ts +24 -0
  29. package/build/lib/named-entry.d.ts.map +1 -0
  30. package/build/lib/named-entry.js +33 -0
  31. package/build/lib/named-entry.js.map +1 -0
  32. package/build/lib/sync.d.ts +9 -0
  33. package/build/lib/sync.d.ts.map +1 -1
  34. package/build/lib/sync.js +13 -8
  35. package/build/lib/sync.js.map +1 -1
  36. package/build/lib/updater.d.ts +3 -5
  37. package/build/lib/updater.d.ts.map +1 -1
  38. package/build/lib/updater.js +7 -30
  39. package/build/lib/updater.js.map +1 -1
  40. package/package.json +3 -3
package/CHANGELOG.md CHANGED
@@ -1,3 +1,28 @@
1
+ ## [9.2.0-dev.9](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv9.2.0-dev.8&targetVersion=GTv9.2.0-dev.9) (2026-10-24)
2
+
3
+ ### Features
4
+
5
+ * **cli:** pin, unpin, freeze and thaw take several names (ATK-762) ([4f89199](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/4f89199939bf4c0e780fb84d77ee6ad348e10f38))
6
+
7
+ ### Bug Fixes
8
+
9
+ * **cli:** put type before outcome in freeze and thaw's assets (ATK-762) ([7824ad5](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/7824ad5b5f0d138f8fffc4982268d06a575d0fdc))
10
+
11
+ ### Documentation
12
+
13
+ * **cli:** list several names for pin and unpin in the README (ATK-762) ([f06ac5c](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/f06ac5c6f1988564a4215fcc6d740a97db86a91d))
14
+
15
+ ## [9.2.0-dev.8](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv9.2.0-dev.7&targetVersion=GTv9.2.0-dev.8) (2026-10-24)
16
+
17
+ ### Features
18
+
19
+ * **cli:** sync only the named assets with atk sync <names> ([4e076f6](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/4e076f6d881734e064ddb3ee3e2dbc98619307d7))
20
+
21
+ ### Bug Fixes
22
+
23
+ * **cli:** review fixes for atk sync <names> ([4a9b69b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/4a9b69b1b7e0167a887ddc6f509a43bb6a0066cb))
24
+ * **cli:** tighten atk sync <names> after code review ([2a1005b](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/commit/2a1005b8c6542af77c7e90defb450efd56f54691))
25
+
1
26
  ## [9.2.0-dev.7](https://emergentcode.visualstudio.com/Emergent%20Software/_git/Emergent.AgenticToolkit/branchCompare?baseVersion=GTv9.2.0-dev.6&targetVersion=GTv9.2.0-dev.7) (2026-10-24)
2
27
 
3
28
  ### Features
package/README.md CHANGED
@@ -87,16 +87,16 @@ atk update
87
87
  | `atk logout` | Sign out of your Emergent account |
88
88
  | `atk move <asset>` | Move an installed asset between the project and the user scope |
89
89
  | `atk outdated` | Show assets with available updates |
90
- | `atk pin <asset>` | Pin an asset to its current version |
90
+ | `atk pin <assets...>` | Pin assets at their installed versions |
91
91
  | `atk promote <name>` | Promote an org-scoped asset or bundle to global via PR |
92
92
  | `atk prune` | Remove orphaned dependencies |
93
93
  | `atk publish` | Publish one or more assets, or a bundle, to the registry |
94
94
  | `atk register <dir>` | Drop a manifest.json into an existing local directory |
95
95
  | `atk release-notes` | Show CLI release notes, recent history or a specific version |
96
96
  | `atk search [query]` | Search by keyword (every word must match), type, tag or tool |
97
- | `atk sync` | Re-apply all installed assets from the lockfile |
97
+ | `atk sync [names...]` | Re-apply the lockfile's assets, all of them or only those named |
98
98
  | `atk uninstall <asset>` | Remove an asset and clean up placed files |
99
- | `atk unpin <asset>` | Remove a version pin |
99
+ | `atk unpin <assets...>` | Remove the version pins from assets |
100
100
  | `atk unpublish <name>` | Remove an asset, bundle or one version from the registry via PR |
101
101
  | `atk update [asset]` | Update installed assets to latest versions |
102
102
  | `atk validate [path...]` | Check asset or bundle directories for errors before publishing |
@@ -352,6 +352,10 @@
352
352
  {
353
353
  "description": "Asset name to freeze (supports @org/name syntax)",
354
354
  "name": "<name>"
355
+ },
356
+ {
357
+ "description": "More assets to freeze with the first, in one pass",
358
+ "name": "[names...]"
355
359
  }
356
360
  ],
357
361
  "description": "Freeze an installed asset to prevent sync and update from overwriting it",
@@ -774,6 +778,10 @@
774
778
  {
775
779
  "description": "Asset name (supports @org/name); an @version suffix must be the installed version. To pin another version, run atk install <name>@<version> --pin",
776
780
  "name": "<name>"
781
+ },
782
+ {
783
+ "description": "More assets to pin with the first, in one pass (each may carry @version)",
784
+ "name": "[names...]"
777
785
  }
778
786
  ],
779
787
  "description": "Pin an installed asset at its installed version",
@@ -1239,7 +1247,13 @@
1239
1247
  {
1240
1248
  "isDefault": false,
1241
1249
  "name": "sync",
1242
- "description": "Re-apply drifted installed assets, keeping local edits (use --force to re-apply all)",
1250
+ "args": [
1251
+ {
1252
+ "description": "Installed assets to sync, as @org/name or name (all of them when omitted)",
1253
+ "name": "[names...]"
1254
+ }
1255
+ ],
1256
+ "description": "Re-apply drifted installed assets, or only the named ones, keeping local edits (use --force to re-apply them all)",
1243
1257
  "file": "sync.js",
1244
1258
  "options": [
1245
1259
  {
@@ -1254,7 +1268,7 @@
1254
1268
  },
1255
1269
  {
1256
1270
  "flags": "-f, --force",
1257
- "description": "Force re-sync all assets, not just drifted ones, overwriting local edits",
1271
+ "description": "Force re-sync all assets (or the named ones), not just drifted ones, overwriting local edits",
1258
1272
  "defaultValue": false
1259
1273
  },
1260
1274
  {
@@ -1275,6 +1289,18 @@
1275
1289
  "flags": "-T, --tool [tool]",
1276
1290
  "description": "Target tool (e.g., claude-code)"
1277
1291
  },
1292
+ {
1293
+ "flags": "-t, --type [type]",
1294
+ "description": "Type of a named asset, when the name is installed as more than one type",
1295
+ "choices": [
1296
+ "skill",
1297
+ "agent",
1298
+ "rule",
1299
+ "hook",
1300
+ "memory-template",
1301
+ "mcp-config"
1302
+ ]
1303
+ },
1278
1304
  {
1279
1305
  "flags": "--user",
1280
1306
  "description": "Use the user scope (the user root, ~ by default) instead of the project",
@@ -1289,6 +1315,10 @@
1289
1315
  {
1290
1316
  "description": "Asset name to thaw",
1291
1317
  "name": "<name>"
1318
+ },
1319
+ {
1320
+ "description": "More assets to thaw with the first, in one pass",
1321
+ "name": "[names...]"
1292
1322
  }
1293
1323
  ],
1294
1324
  "description": "Thaw a frozen asset to allow sync and update to overwrite it again",
@@ -1401,6 +1431,10 @@
1401
1431
  {
1402
1432
  "description": "Asset name to unpin",
1403
1433
  "name": "<name>"
1434
+ },
1435
+ {
1436
+ "description": "More assets to unpin with the first, in one pass",
1437
+ "name": "[names...]"
1404
1438
  }
1405
1439
  ],
1406
1440
  "description": "Remove a version pin from an installed asset",
@@ -13,11 +13,11 @@ export declare const options: z.ZodObject<{
13
13
  }>>;
14
14
  user: z.ZodOptional<z.ZodBoolean>;
15
15
  }, z.core.$strip>;
16
- export declare const args: z.ZodTuple<[z.ZodString], null>;
16
+ export declare const args: z.ZodTuple<[z.ZodString], z.ZodString>;
17
17
  type Props = {
18
18
  args: z.infer<typeof args>;
19
19
  options: z.infer<typeof options>;
20
20
  };
21
- export default function Freeze({ args: [rawName], options: { json, projectRoot, type, user } }: Props): import("react").JSX.Element;
21
+ export default function Freeze({ args: [rawName, ...more], options: { json, projectRoot, type, user } }: Props): import("react").JSX.Element;
22
22
  export {};
23
23
  //# sourceMappingURL=freeze.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,WAAW,6EAA6E,CAAC;AAEtG,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAiClB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAEf,CAAC;AAIH,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,OAAO,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,+BAwEpG"}
1
+ {"version":3,"file":"freeze.d.ts","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"AAGA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAaxB,eAAO,MAAM,WAAW,6EAA6E,CAAC;AAEtG,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAiClB,CAAC;AAEH,eAAO,MAAM,IAAI,wCAMd,CAAC;AAYJ,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,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,+BAqF7G"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Text } from 'ink';
2
+ import { Box, Text } from 'ink';
3
3
  import { z } from 'zod';
4
4
  import { ErrorView, Spinner } from '../components/index.js';
5
5
  import { useCommand } from '../hooks/useCommand.js';
6
6
  import { useResolvedScope } from '../hooks/useResolvedScope.js';
7
- import { freezeAssetInConfig, isAssetFrozen } from '../lib/config.js';
8
- import { readLockfile, requireDirectInstall } from '../lib/lockfile.js';
9
- import { parseOrgFromName } from '../lib/org.js';
7
+ import { freezeAssetsInConfig, isAssetFrozen } from '../lib/config.js';
8
+ import { identityKey, readLockfile, requireDirectInstall } from '../lib/lockfile.js';
9
+ import { formatOrgName, parseOrgFromName } from '../lib/org.js';
10
10
  import { renderJson, useNonInteractive } from '../lib/output.js';
11
11
  import { argument, option } from '../lib/pastel/index.js';
12
12
  import { AssetType } from '../lib/schemas/index.js';
@@ -38,29 +38,46 @@ export const options = z.object({
38
38
  description: 'Use the user scope (the user root, ~ by default) instead of the project',
39
39
  })),
40
40
  });
41
- export const args = z.tuple([
41
+ export const args = z
42
+ .tuple([
42
43
  z.string().describe(argument({ description: 'Asset name to freeze (supports @org/name syntax)', name: 'name' })),
43
- ]);
44
- export default function Freeze({ args: [rawName], options: { json, projectRoot, type, user } }) {
45
- const { name, org } = parseOrgFromName(rawName);
44
+ ])
45
+ .rest(z.string().describe(argument({ description: 'More assets to freeze with the first, in one pass', name: 'names' })));
46
+ export default function Freeze({ args: [rawName, ...more], options: { json, projectRoot, type, user } }) {
46
47
  const { json: effectiveJson } = useNonInteractive(json);
47
48
  const { fields, resolve, resolved } = useResolvedScope({ projectRoot, user });
49
+ const specs = [rawName, ...more];
48
50
  const state = useCommand(async (progress) => {
49
51
  const where = await resolve();
50
52
  const projectDir = where.root;
51
53
  progress('Reading lockfile...');
52
54
  const lockfile = await readLockfile(projectDir);
53
- // Verify asset is installed and is a direct install
54
- const installed = requireDirectInstall(lockfile, name, 'frozen', type, org, scopeLabel(where));
55
- // Check if already frozen via project config
56
- if (await isAssetFrozen(projectDir, name, installed.type, org)) {
57
- return { name: rawName, outcome: 'already-frozen' };
55
+ // Check every name before anything is written; a name naming an entry already named is dropped
56
+ const named = [];
57
+ const seen = new Set();
58
+ for (const spec of specs) {
59
+ const { name, org } = parseOrgFromName(spec);
60
+ // Verify asset is installed and is a direct install
61
+ const installed = requireDirectInstall(lockfile, name, 'frozen', type, org, scopeLabel(where));
62
+ if (seen.has(identityKey(installed)))
63
+ continue;
64
+ seen.add(identityKey(installed));
65
+ // Check if already frozen via project config
66
+ const frozen = await isAssetFrozen(projectDir, name, installed.type, org);
67
+ const asset = { name, ...(org ? { org } : {}), type: installed.type };
68
+ named.push({ ...asset, outcome: frozen ? 'already-frozen' : 'frozen' });
58
69
  }
59
- // Freeze in project config (.atkrc.json)
60
- progress('Freezing asset...');
61
- await freezeAssetInConfig(projectDir, name, installed.type, org);
62
- return { name: rawName, outcome: 'frozen' };
63
- }, [rawName, projectRoot, type, user]);
70
+ // Freeze in project config (.atkrc.json), in one write
71
+ const toFreeze = named.filter((a) => a.outcome === 'frozen');
72
+ if (toFreeze.length > 0) {
73
+ progress(more.length > 0 ? 'Freezing assets...' : 'Freezing asset...');
74
+ await freezeAssetsInConfig(projectDir, toFreeze.map(({ name, org, type: assetType }) => ({ name, org, type: assetType })));
75
+ }
76
+ if (more.length > 0) {
77
+ return { assets: named, outcome: toFreeze.length > 0 ? 'frozen' : 'already-frozen' };
78
+ }
79
+ return { name: rawName, outcome: named[0].outcome };
80
+ }, [specs.join(' '), projectRoot, type, user]);
64
81
  if (state.status === 'loading') {
65
82
  return _jsx(Spinner, { message: state.message });
66
83
  }
@@ -82,10 +99,16 @@ export default function Freeze({ args: [rawName], options: { json, projectRoot,
82
99
  return renderJson({ ...data, ...fields });
83
100
  }
84
101
  const where = resolved ? _jsxs(Text, { dimColor: true, children: [" in ", scopeLabel(resolved)] }) : null;
85
- if (data.outcome === 'already-frozen') {
86
- return (_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: data.name }), " is already frozen", where] }));
102
+ if ('assets' in data) {
103
+ return (_jsx(Box, { flexDirection: 'column', children: data.assets.map((a) => (_jsx(FreezeLine, { name: formatOrgName(a.org, a.name), outcome: a.outcome, where: where }, identityKey(a)))) }));
104
+ }
105
+ return _jsx(FreezeLine, { name: data.name, outcome: data.outcome, where: where });
106
+ }
107
+ function FreezeLine({ name, outcome, where }) {
108
+ if (outcome === 'already-frozen') {
109
+ return (_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: name }), " is already frozen", where] }));
87
110
  }
88
- // data.outcome === 'frozen'
89
- return (_jsxs(Text, { color: 'green', children: ["Frozen ", _jsx(Text, { bold: true, children: data.name }), where] }));
111
+ // outcome === 'frozen'
112
+ return (_jsxs(Text, { color: 'green', children: ["Frozen ", _jsx(Text, { bold: true, children: name }), where] }));
90
113
  }
91
114
  //# sourceMappingURL=freeze.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"freeze.js","sourceRoot":"","sources":["../../src/commands/freeze.tsx"],"names":[],"mappings":";AAEA,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,KAAK,CAAC;AAChC,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAExB,OAAO,EAAE,SAAS,EAAE,OAAO,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,UAAU,EAAE,MAAM,wBAAwB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,8BAA8B,CAAC;AAChE,OAAO,EAAE,oBAAoB,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACvE,OAAO,EAAE,WAAW,EAAE,YAAY,EAAE,oBAAoB,EAAE,MAAM,oBAAoB,CAAC;AACrF,OAAO,EAAE,aAAa,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AAChE,OAAO,EAAE,UAAU,EAAE,iBAAiB,EAAE,MAAM,kBAAkB,CAAC;AACjE,OAAO,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,wBAAwB,CAAC;AAC1D,OAAO,EAAE,SAAS,EAAE,MAAM,yBAAyB,CAAC;AACpD,OAAO,EAAE,UAAU,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,CAAC,MAAM,WAAW,GAAG,0EAA0E,CAAC;AAEtG,MAAM,CAAC,MAAM,OAAO,GAAG,CAAC,CAAC,MAAM,CAAC;IAC9B,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,OAAO,CAAC,KAAK,CAAC;SACd,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,wCAAwC;KACtD,CAAC,CACH;IACH,WAAW,EAAE,CAAC;SACX,MAAM,EAAE;SACR,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,iCAAiC;KAC/C,CAAC,CACH;IACH,IAAI,EAAE,SAAS,CAAC,QAAQ,EAAE,CAAC,QAAQ,CACjC,MAAM,CAAC;QACL,KAAK,EAAE,GAAG;QACV,WAAW,EAAE,8EAA8E;KAC5F,CAAC,CACH;IACD,IAAI,EAAE,CAAC;SACJ,OAAO,EAAE;SACT,QAAQ,EAAE;SACV,QAAQ,CACP,MAAM,CAAC;QACL,WAAW,EAAE,yEAAyE;KACvF,CAAC,CACH;CACJ,CAAC,CAAC;AAEH,MAAM,CAAC,MAAM,IAAI,GAAG,CAAC;KAClB,KAAK,CAAC;IACL,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,kDAAkD,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;CACjH,CAAC;KACD,IAAI,CACH,CAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,WAAW,EAAE,mDAAmD,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC,CAAC,CACnH,CAAC;AAmBJ,MAAM,CAAC,OAAO,UAAU,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAS;IAC5G,MAAM,EAAE,IAAI,EAAE,aAAa,EAAE,GAAG,iBAAiB,CAAC,IAAI,CAAC,CAAC;IACxD,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,QAAQ,EAAE,GAAG,gBAAgB,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC;IAC9E,MAAM,KAAK,GAAG,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,CAAC;IAEjC,MAAM,KAAK,GAAG,UAAU,CACtB,KAAK,EAAE,QAAQ,EAAE,EAAE;QACjB,MAAM,KAAK,GAAG,MAAM,OAAO,EAAE,CAAC;QAC9B,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC;QAE9B,QAAQ,CAAC,qBAAqB,CAAC,CAAC;QAChC,MAAM,QAAQ,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAEhD,+FAA+F;QAC/F,MAAM,KAAK,GAAkB,EAAE,CAAC;QAChC,MAAM,IAAI,GAAG,IAAI,GAAG,EAAU,CAAC;QAC/B,KAAK,MAAM,IAAI,IAAI,KAAK,EAAE,CAAC;YACzB,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,GAAG,gBAAgB,CAAC,IAAI,CAAC,CAAC;YAE7C,oDAAoD;YACpD,MAAM,SAAS,GAAG,oBAAoB,CAAC,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,GAAG,EAAE,UAAU,CAAC,KAAK,CAAC,CAAC,CAAC;YAC/F,IAAI,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;gBAAE,SAAS;YAC/C,IAAI,CAAC,GAAG,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC,CAAC;YAEjC,6CAA6C;YAC7C,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,UAAU,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;YAC1E,MAAM,KAAK,GAAG,EAAE,IAAI,EAAE,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,IAAI,EAAE,SAAS,CAAC,IAAI,EAAE,CAAC;YACtE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,KAAK,EAAE,OAAO,EAAE,MAAM,CAAC,CAAC,CAAC,gBAAgB,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;QAC1E,CAAC;QAED,uDAAuD;QACvD,MAAM,QAAQ,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC;QAC7D,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACxB,QAAQ,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,mBAAmB,CAAC,CAAC;YACvE,MAAM,oBAAoB,CACxB,UAAU,EACV,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,CAAC,CAAC,CACnF,CAAC;QACJ,CAAC;QAED,IAAI,IAAI,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACpB,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,gBAAgB,EAAE,CAAC;QACvF,CAAC;QACD,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC,CAAE,CAAC,OAAO,EAAE,CAAC;IACvD,CAAC,EACD,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,CAAC,CAC3C,CAAC;IAEF,IAAI,KAAK,CAAC,MAAM,KAAK,SAAS,EAAE,CAAC;QAC/B,OAAO,KAAC,OAAO,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IAC7C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,OAAO,EAAE,CAAC;QAC7B,IAAI,aAAa,EAAE,CAAC;YAClB,OAAO,UAAU,CAAC;gBAChB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,GAAG,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBACpD,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC3C,OAAO,EAAE,KAAK,CAAC,OAAO;gBACtB,OAAO,EAAE,OAAO;gBAChB,GAAG,MAAM;aACV,CAAC,CAAC;QACL,CAAC;QACD,OAAO,KAAC,SAAS,IAAC,OAAO,EAAE,KAAK,CAAC,OAAO,EAAE,IAAI,EAAE,KAAK,CAAC,IAAI,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,GAAI,CAAC;IACzF,CAAC;IAED,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC;IAEvB,IAAI,aAAa,EAAE,CAAC;QAClB,OAAO,UAAU,CAAC,EAAE,GAAG,IAAI,EAAE,GAAG,MAAM,EAAE,CAAC,CAAC;IAC5C,CAAC;IAED,MAAM,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,MAAC,IAAI,IAAC,QAAQ,2BAAM,UAAU,CAAC,QAAQ,CAAC,IAAQ,CAAC,CAAC,CAAC,IAAI,CAAC;IAEjF,IAAI,QAAQ,IAAI,IAAI,EAAE,CAAC;QACrB,OAAO,CACL,KAAC,GAAG,IAAC,aAAa,EAAC,QAAQ,YACxB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CACtB,KAAC,UAAU,IAAsB,IAAI,EAAE,aAAa,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,IAApF,WAAW,CAAC,CAAC,CAAC,CAA0E,CAC1G,CAAC,GACE,CACP,CAAC;IACJ,CAAC;IAED,OAAO,KAAC,UAAU,IAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,CAAC,OAAO,EAAE,KAAK,EAAE,KAAK,GAAI,CAAC;AAC9E,CAAC;AAED,SAAS,UAAU,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAyE;IACjH,IAAI,OAAO,KAAK,gBAAgB,EAAE,CAAC;QACjC,OAAO,CACL,MAAC,IAAI,eACH,KAAC,IAAI,IAAC,KAAK,EAAC,QAAQ,kBAAS,OAAC,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,GAAQ,wBACrD,KAAK,IACD,CACR,CAAC;IACJ,CAAC;IAED,uBAAuB;IACvB,OAAO,CACL,MAAC,IAAI,IAAC,KAAK,EAAC,OAAO,wBACV,KAAC,IAAI,IAAC,IAAI,kBAAE,IAAI,GAAQ,EAC9B,KAAK,IACD,CACR,CAAC;AACJ,CAAC"}
@@ -13,11 +13,11 @@ export declare const options: z.ZodObject<{
13
13
  }>>;
14
14
  user: z.ZodOptional<z.ZodBoolean>;
15
15
  }, z.core.$strip>;
16
- export declare const args: z.ZodTuple<[z.ZodString], null>;
16
+ export declare const args: z.ZodTuple<[z.ZodString], z.ZodString>;
17
17
  type Props = {
18
18
  args: z.infer<typeof args>;
19
19
  options: z.infer<typeof options>;
20
20
  };
21
- export default function Pin({ args: [nameArg], options: { json, projectRoot, type, user } }: Props): import("react").JSX.Element;
21
+ export default function Pin({ args: [nameArg, ...more], options: { json, projectRoot, type, user } }: Props): import("react").JSX.Element;
22
22
  export {};
23
23
  //# sourceMappingURL=pin.d.ts.map
@@ -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;AAqBxB,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAE7E,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAiClB,CAAC;AAEH,eAAO,MAAM,IAAI,iCAQf,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,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,+BAoHjG"}
1
+ {"version":3,"file":"pin.d.ts","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"AAIA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAsBxB,eAAO,MAAM,WAAW,oDAAoD,CAAC;AAE7E,eAAO,MAAM,OAAO;;;;;;;;;;;;iBAiClB,CAAC;AAEH,eAAO,MAAM,IAAI,wCAiBd,CAAC;AAYJ,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,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC,OAAO,EAAE,GAAG,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,+BA4H1G"}
@@ -1,12 +1,12 @@
1
1
  import { jsx as _jsx, jsxs as _jsxs } from "react/jsx-runtime";
2
- import { Text } from 'ink';
2
+ import { Box, Text } from 'ink';
3
3
  import { valid as semverValid } from 'semver';
4
4
  import { z } from 'zod';
5
5
  import { ErrorView, Spinner } from '../components/index.js';
6
6
  import { useCommand } from '../hooks/useCommand.js';
7
7
  import { useResolvedScope } from '../hooks/useResolvedScope.js';
8
- import { findInstalledAsset, isPinned, LockfileError, pinAssetVersion, readLockfile, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
9
- import { parseOrgFromName } from '../lib/org.js';
8
+ import { findInstalledAsset, identityKey, isPinned, LockfileError, pinAssetVersion, readLockfile, withLockfileErrorHandling, writeLockfile, } from '../lib/lockfile.js';
9
+ import { formatOrgName, parseOrgFromName } from '../lib/org.js';
10
10
  import { renderJson, useNonInteractive } from '../lib/output.js';
11
11
  import { argument, option } from '../lib/pastel/index.js';
12
12
  import { AssetType } from '../lib/schemas/index.js';
@@ -39,58 +39,83 @@ export const options = z.object({
39
39
  description: 'Use the user scope (the user root, ~ by default) instead of the project',
40
40
  })),
41
41
  });
42
- export const args = z.tuple([
42
+ export const args = z
43
+ .tuple([
43
44
  z.string().describe(argument({
44
45
  description: 'Asset name (supports @org/name); an @version suffix must be the installed version. To pin another version, run atk install <name>@<version> --pin',
45
46
  name: 'name',
46
47
  })),
47
- ]);
48
- export default function Pin({ args: [nameArg], options: { json, projectRoot, type, user } }) {
49
- const { name: parsedName, version } = parseNameVersion(nameArg);
50
- const { name, org } = parseOrgFromName(parsedName);
48
+ ])
49
+ .rest(z.string().describe(argument({
50
+ description: 'More assets to pin with the first, in one pass (each may carry @version)',
51
+ name: 'names',
52
+ })));
53
+ export default function Pin({ args: [nameArg, ...more], options: { json, projectRoot, type, user } }) {
51
54
  const { json: effectiveJson } = useNonInteractive(json);
52
55
  const { fields, resolve, resolved } = useResolvedScope({ projectRoot, user });
56
+ const specs = [nameArg, ...more];
53
57
  const state = useCommand(async (progress) => {
54
- // Validate explicit version is valid semver; compare its clean form (`v1.0.0` is `1.0.0`)
55
- const requestedVersion = version === undefined ? undefined : semverValid(version);
56
- if (requestedVersion === null) {
57
- throw new LockfileError(`Invalid version '${version}' -- expected a valid semver version`);
58
- }
58
+ const requests = specs.map((spec) => {
59
+ const { name: parsedName, version } = parseNameVersion(spec);
60
+ // Validate explicit version is valid semver; compare its clean form (`v1.0.0` is `1.0.0`)
61
+ const requestedVersion = version === undefined ? undefined : semverValid(version);
62
+ if (requestedVersion === null) {
63
+ throw new LockfileError(`Invalid version '${version}' -- expected a valid semver version`);
64
+ }
65
+ return { parsedName, requestedVersion, spec, ...parseOrgFromName(parsedName) };
66
+ });
59
67
  const where = await resolve();
60
68
  const { root: projectDir, scope } = where;
61
69
  return await withLockfileErrorHandling(projectDir, async () => {
62
70
  progress('Reading lockfile...');
63
- const lockfile = await readLockfile(projectDir);
64
- // Look up the installed asset to determine current version
65
- const installed = findInstalledAsset(lockfile, name, type, org);
66
- if (!installed) {
67
- throw new LockfileError(`Asset '${nameArg}' is not installed in ${scopeLabel(where)}`);
71
+ let lockfile = await readLockfile(projectDir);
72
+ // Check every name before the lockfile is written; a name naming an entry already named is dropped
73
+ const named = [];
74
+ const seen = new Set();
75
+ for (const { name, org, parsedName, requestedVersion, spec } of requests) {
76
+ // Look up the installed asset to determine current version
77
+ const installed = findInstalledAsset(lockfile, name, type, org);
78
+ if (!installed) {
79
+ throw new LockfileError(`Asset '${spec}' is not installed in ${scopeLabel(where)}`);
80
+ }
81
+ // A pin holds the installed version; installing another one (and checking that it
82
+ // exists in the registry) is `install --pin`'s job
83
+ if (requestedVersion && requestedVersion !== installed.version) {
84
+ throw new LockfileError(`'${parsedName}' is installed at v${installed.version}; atk pin holds the installed version.`, {
85
+ command: scopedCommand(`atk install ${parsedName}@${requestedVersion} --pin`, scope),
86
+ hint: 'Install that version with --pin to switch to it and pin it in one step.',
87
+ });
88
+ }
89
+ if (seen.has(identityKey(installed)))
90
+ continue;
91
+ seen.add(identityKey(installed));
92
+ const asset = { name, ...(org ? { org } : {}), type: installed.type };
93
+ const pinVersion = installed.version;
94
+ // Check if already pinned to the same version
95
+ if (isPinned(lockfile, name, type, org) && installed.pinnedVersion === pinVersion) {
96
+ named.push({ ...asset, outcome: 'already-pinned', version: pinVersion });
97
+ continue;
98
+ }
99
+ // Track previous pin for informational message
100
+ const previousPin = installed.pinnedVersion;
101
+ progress(more.length > 0 ? `Pinning ${parsedName}...` : 'Pinning asset version...');
102
+ lockfile = pinAssetVersion(lockfile, name, pinVersion, type, org);
103
+ named.push(previousPin
104
+ ? { ...asset, outcome: 'updated-pin', previousVersion: previousPin, version: pinVersion }
105
+ : { ...asset, outcome: 'pinned', version: pinVersion });
68
106
  }
69
- // A pin holds the installed version; installing another one (and checking that it
70
- // exists in the registry) is `install --pin`'s job
71
- if (requestedVersion && requestedVersion !== installed.version) {
72
- throw new LockfileError(`'${parsedName}' is installed at v${installed.version}; atk pin holds the installed version.`, {
73
- command: scopedCommand(`atk install ${parsedName}@${requestedVersion} --pin`, scope),
74
- hint: 'Install that version with --pin to switch to it and pin it in one step.',
75
- });
107
+ const changed = named.some((a) => a.outcome !== 'already-pinned');
108
+ if (changed) {
109
+ progress('Writing lockfile...');
110
+ await writeLockfile(projectDir, lockfile);
76
111
  }
77
- const pinVersion = installed.version;
78
- // Check if already pinned to the same version
79
- if (isPinned(lockfile, name, type, org) && installed.pinnedVersion === pinVersion) {
80
- return { name: nameArg, outcome: 'already-pinned', version: pinVersion };
112
+ if (more.length > 0) {
113
+ return { assets: named, outcome: changed ? 'pinned' : 'already-pinned' };
81
114
  }
82
- // Track previous pin for informational message
83
- const previousPin = installed.pinnedVersion;
84
- progress('Pinning asset version...');
85
- const updatedLockfile = pinAssetVersion(lockfile, name, pinVersion, type, org);
86
- progress('Writing lockfile...');
87
- await writeLockfile(projectDir, updatedLockfile);
88
- if (previousPin) {
89
- return { name: nameArg, outcome: 'updated-pin', previousVersion: previousPin, version: pinVersion };
90
- }
91
- return { name: nameArg, outcome: 'pinned', version: pinVersion };
115
+ const { name: _name, org: _org, type: _type, ...result } = named[0];
116
+ return { name: nameArg, ...result };
92
117
  });
93
- }, [name, org, version, projectRoot, type, user]);
118
+ }, [specs.join(' '), projectRoot, type, user]);
94
119
  if (state.status === 'loading') {
95
120
  return _jsx(Spinner, { message: state.message });
96
121
  }
@@ -112,13 +137,19 @@ export default function Pin({ args: [nameArg], options: { json, projectRoot, typ
112
137
  return renderJson({ ...data, ...fields });
113
138
  }
114
139
  const where = resolved ? _jsxs(Text, { dimColor: true, children: [" in ", scopeLabel(resolved)] }) : null;
115
- if (data.outcome === 'already-pinned') {
116
- return (_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: data.name }), " is already pinned to v", data.version, where] }));
140
+ if ('assets' in data) {
141
+ return (_jsx(Box, { flexDirection: 'column', children: data.assets.map((a) => (_jsx(PinLine, { name: formatOrgName(a.org, a.name), result: a, where: where }, identityKey(a)))) }));
142
+ }
143
+ return _jsx(PinLine, { name: data.name, result: data, where: where });
144
+ }
145
+ function PinLine({ name, result, where }) {
146
+ if (result.outcome === 'already-pinned') {
147
+ return (_jsxs(Text, { children: [_jsx(Text, { color: 'yellow', children: "!" }), " ", _jsx(Text, { bold: true, children: name }), " is already pinned to v", result.version, where] }));
117
148
  }
118
- if (data.outcome === 'updated-pin') {
119
- return (_jsxs(Text, { color: 'green', children: ["Pinned ", _jsx(Text, { bold: true, children: data.name }), " to v", data.version, " ", _jsxs(Text, { dimColor: true, children: ["(was v", data.previousVersion, ")"] }), where] }));
149
+ if (result.outcome === 'updated-pin') {
150
+ return (_jsxs(Text, { color: 'green', children: ["Pinned ", _jsx(Text, { bold: true, children: name }), " to v", result.version, " ", _jsxs(Text, { dimColor: true, children: ["(was v", result.previousVersion, ")"] }), where] }));
120
151
  }
121
- // data.outcome === 'pinned'
122
- return (_jsxs(Text, { color: 'green', children: ["Pinned ", _jsx(Text, { bold: true, children: data.name }), " to v", data.version, where] }));
152
+ // result.outcome === 'pinned'
153
+ return (_jsxs(Text, { color: 'green', children: ["Pinned ", _jsx(Text, { bold: true, children: name }), " to v", result.version, where] }));
123
154
  }
124
155
  //# sourceMappingURL=pin.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"pin.js","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"pin.js","sourceRoot":"","sources":["../../src/commands/pin.tsx"],"names":[],"mappings":"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"}
@@ -1,5 +1,5 @@
1
1
  import { z } from 'zod';
2
- export declare const description = "Re-apply drifted installed assets, keeping local edits (use --force to re-apply all)";
2
+ export declare const description = "Re-apply drifted installed assets, or only the named ones, keeping local edits (use --force to re-apply them all)";
3
3
  export declare const options: z.ZodObject<{
4
4
  check: z.ZodOptional<z.ZodBoolean>;
5
5
  dryRun: z.ZodDefault<z.ZodBoolean>;
@@ -8,11 +8,22 @@ export declare const options: z.ZodObject<{
8
8
  projectRoot: z.ZodOptional<z.ZodString>;
9
9
  refresh: z.ZodDefault<z.ZodBoolean>;
10
10
  tool: z.ZodOptional<z.ZodString>;
11
+ type: z.ZodOptional<z.ZodEnum<{
12
+ skill: "skill";
13
+ agent: "agent";
14
+ rule: "rule";
15
+ hook: "hook";
16
+ "memory-template": "memory-template";
17
+ "mcp-config": "mcp-config";
18
+ }>>;
11
19
  user: z.ZodOptional<z.ZodBoolean>;
12
20
  }, z.core.$strip>;
21
+ export declare const args: z.ZodTuple<[], z.ZodString>;
13
22
  type Props = {
23
+ /** Absent when `atk install` with no names runs a full sync. */
24
+ args?: z.infer<typeof args>;
14
25
  options: z.infer<typeof options>;
15
26
  };
16
- export default function Sync({ options: { check, dryRun, force, json, projectRoot, refresh, tool, user } }: Props): import("react").JSX.Element;
27
+ export default function Sync({ args: names, options: { check, dryRun, force, json, projectRoot, refresh, tool, type, user }, }: Props): import("react").JSX.Element;
17
28
  export {};
18
29
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA0BxB,eAAO,MAAM,WAAW,yFAAyF,CAAC;AAElH,eAAO,MAAM,OAAO;;;;;;;;;iBAwElB,CAAC;AAEH,KAAK,KAAK,GAAG;IACX,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAAE,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,KAAK,+BAgIhH"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.tsx"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AA+BxB,eAAO,MAAM,WAAW,sHAC6F,CAAC;AAEtH,eAAO,MAAM,OAAO;;;;;;;;;;;;;;;;;iBA8ElB,CAAC;AAEH,eAAO,MAAM,IAAI,6BAOhB,CAAC;AAEF,KAAK,KAAK,GAAG;IACX,gEAAgE;IAChE,IAAI,CAAC,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,IAAI,CAAC,CAAC;IAC5B,OAAO,EAAE,CAAC,CAAC,KAAK,CAAC,OAAO,OAAO,CAAC,CAAC;CAClC,CAAC;AAEF,MAAM,CAAC,OAAO,UAAU,IAAI,CAAC,EAC3B,IAAI,EAAE,KAAU,EAChB,OAAO,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAChF,EAAE,KAAK,+BAyIP"}