@slats/claude-assets-sync 0.1.4 → 0.2.0

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 (227) hide show
  1. package/README.md +111 -587
  2. package/bin/claude-sync.mjs +24 -0
  3. package/dist/claude-hashes.json +20 -0
  4. package/dist/commands/index.d.ts +1 -112
  5. package/dist/commands/runCli/index.d.ts +2 -0
  6. package/dist/commands/runCli/runCli.cjs +31 -0
  7. package/dist/commands/runCli/runCli.d.ts +10 -0
  8. package/dist/commands/runCli/runCli.mjs +29 -0
  9. package/dist/commands/runCli/type.d.ts +28 -0
  10. package/dist/commands/runCli/utils/injectOne.cjs +48 -0
  11. package/dist/commands/runCli/utils/injectOne.d.ts +3 -0
  12. package/dist/commands/runCli/utils/injectOne.mjs +46 -0
  13. package/dist/commands/runCli/utils/resolveScopeFlag.cjs +28 -0
  14. package/dist/commands/runCli/utils/resolveScopeFlag.d.ts +2 -0
  15. package/dist/commands/runCli/utils/resolveScopeFlag.mjs +26 -0
  16. package/dist/commands/runCli/utils/runInject.cjs +36 -0
  17. package/dist/commands/runCli/utils/runInject.d.ts +2 -0
  18. package/dist/commands/runCli/utils/runInject.mjs +34 -0
  19. package/dist/core/buildPlan/buildPlan.cjs +42 -0
  20. package/dist/core/buildPlan/buildPlan.d.ts +2 -0
  21. package/dist/core/buildPlan/buildPlan.mjs +40 -0
  22. package/dist/core/buildPlan/index.d.ts +2 -0
  23. package/dist/core/buildPlan/type.d.ts +32 -0
  24. package/dist/core/buildPlan/utils/toPosix.cjs +9 -0
  25. package/dist/core/buildPlan/utils/toPosix.d.ts +1 -0
  26. package/dist/core/buildPlan/utils/toPosix.mjs +7 -0
  27. package/dist/core/buildPlan/utils/walkFiles.cjs +25 -0
  28. package/dist/core/buildPlan/utils/walkFiles.d.ts +1 -0
  29. package/dist/core/buildPlan/utils/walkFiles.mjs +23 -0
  30. package/dist/core/hash/hash.cjs +30 -0
  31. package/dist/core/hash/hash.d.ts +4 -0
  32. package/dist/core/hash/hash.mjs +26 -0
  33. package/dist/core/hash/index.d.ts +1 -0
  34. package/dist/core/hashManifest/hashManifest.cjs +27 -0
  35. package/dist/core/hashManifest/hashManifest.d.ts +17 -0
  36. package/dist/core/hashManifest/hashManifest.mjs +23 -0
  37. package/dist/core/hashManifest/index.d.ts +1 -0
  38. package/dist/core/index.d.ts +5 -0
  39. package/dist/core/injectDocs/index.d.ts +2 -0
  40. package/dist/core/injectDocs/injectDocs.cjs +43 -0
  41. package/dist/core/injectDocs/injectDocs.d.ts +2 -0
  42. package/dist/core/injectDocs/injectDocs.mjs +41 -0
  43. package/dist/core/injectDocs/type.d.ts +30 -0
  44. package/dist/core/injectDocs/utils/applyAction.cjs +21 -0
  45. package/dist/core/injectDocs/utils/applyAction.d.ts +2 -0
  46. package/dist/core/injectDocs/utils/applyAction.mjs +19 -0
  47. package/dist/core/injectDocs/utils/emitCiForceList.cjs +10 -0
  48. package/dist/core/injectDocs/utils/emitCiForceList.d.ts +2 -0
  49. package/dist/core/injectDocs/utils/emitCiForceList.mjs +8 -0
  50. package/dist/core/injectDocs/utils/printPlan.cjs +20 -0
  51. package/dist/core/injectDocs/utils/printPlan.d.ts +2 -0
  52. package/dist/core/injectDocs/utils/printPlan.mjs +18 -0
  53. package/dist/core/injectDocs/utils/summarize.cjs +27 -0
  54. package/dist/core/injectDocs/utils/summarize.d.ts +3 -0
  55. package/dist/core/injectDocs/utils/summarize.mjs +25 -0
  56. package/dist/core/scope/index.d.ts +1 -0
  57. package/dist/core/scope/scope.cjs +46 -0
  58. package/dist/core/scope/scope.d.ts +16 -0
  59. package/dist/core/scope/scope.mjs +41 -0
  60. package/dist/core/scope/utils/isDirectory.cjs +14 -0
  61. package/dist/core/scope/utils/isDirectory.d.ts +1 -0
  62. package/dist/core/scope/utils/isDirectory.mjs +12 -0
  63. package/dist/index.cjs +15 -9
  64. package/dist/index.d.ts +3 -5
  65. package/dist/index.mjs +7 -3
  66. package/dist/prompts/confirmForce.cjs +27 -0
  67. package/dist/prompts/confirmForce.d.ts +1 -0
  68. package/dist/prompts/confirmForce.mjs +25 -0
  69. package/dist/prompts/index.d.ts +2 -0
  70. package/dist/prompts/selectScope.cjs +30 -0
  71. package/dist/prompts/selectScope.d.ts +2 -0
  72. package/dist/prompts/selectScope.mjs +28 -0
  73. package/dist/utils/heartbeat.cjs +25 -0
  74. package/dist/utils/heartbeat.d.ts +16 -0
  75. package/dist/utils/heartbeat.mjs +23 -0
  76. package/dist/utils/logger.cjs +7 -0
  77. package/dist/utils/logger.d.ts +8 -0
  78. package/dist/utils/logger.mjs +7 -0
  79. package/dist/utils/types.d.ts +1 -252
  80. package/dist/utils/version.cjs +2 -14
  81. package/dist/utils/version.d.ts +3 -53
  82. package/dist/utils/version.mjs +2 -13
  83. package/docs/bundle-size-decision.md +36 -0
  84. package/docs/claude/skills/claude-sync-applier/SKILL.md +195 -0
  85. package/docs/claude/skills/claude-sync-applier/knowledge/claude-md-template.md +77 -0
  86. package/docs/claude/skills/claude-sync-applier/knowledge/dependency-cruiser.md +126 -0
  87. package/docs/claude/skills/claude-sync-applier/knowledge/gotchas.md +139 -0
  88. package/docs/claude/skills/claude-sync-applier/knowledge/package-json-patches.md +130 -0
  89. package/docs/claude/skills/claude-sync-applier/knowledge/reference-files.md +120 -0
  90. package/docs/claude/skills/claude-sync-applier/knowledge/smoke-tests.md +102 -0
  91. package/docs/consumer-integration.md +153 -0
  92. package/package.json +24 -16
  93. package/scripts/build-hashes.mjs +30 -0
  94. package/scripts/buildHashes.d.mts +15 -0
  95. package/scripts/buildHashes.mjs +82 -0
  96. package/scripts/claude-build-hashes.mjs +42 -0
  97. package/scripts/inject-version.js +112 -0
  98. package/dist/cli.cjs +0 -8
  99. package/dist/cli.d.ts +0 -1
  100. package/dist/cli.mjs +0 -7
  101. package/dist/commands/add.cjs +0 -80
  102. package/dist/commands/add.d.ts +0 -8
  103. package/dist/commands/add.mjs +0 -78
  104. package/dist/commands/list.cjs +0 -94
  105. package/dist/commands/list.d.ts +0 -15
  106. package/dist/commands/list.mjs +0 -91
  107. package/dist/commands/migrate.cjs +0 -9
  108. package/dist/commands/migrate.d.ts +0 -6
  109. package/dist/commands/migrate.mjs +0 -7
  110. package/dist/commands/remove.cjs +0 -127
  111. package/dist/commands/remove.d.ts +0 -6
  112. package/dist/commands/remove.mjs +0 -105
  113. package/dist/commands/status.cjs +0 -193
  114. package/dist/commands/status.d.ts +0 -6
  115. package/dist/commands/status.mjs +0 -171
  116. package/dist/commands/sync.cjs +0 -28
  117. package/dist/commands/sync.d.ts +0 -6
  118. package/dist/commands/sync.mjs +0 -26
  119. package/dist/commands/types.d.ts +0 -89
  120. package/dist/commands/update.cjs +0 -209
  121. package/dist/commands/update.d.ts +0 -29
  122. package/dist/commands/update.mjs +0 -206
  123. package/dist/components/add/AddCommand.cjs +0 -103
  124. package/dist/components/add/AddCommand.d.ts +0 -14
  125. package/dist/components/add/AddCommand.mjs +0 -101
  126. package/dist/components/add/BulkAddView.cjs +0 -165
  127. package/dist/components/add/BulkAddView.d.ts +0 -11
  128. package/dist/components/add/BulkAddView.mjs +0 -163
  129. package/dist/components/add/index.d.ts +0 -2
  130. package/dist/components/index.d.ts +0 -2
  131. package/dist/components/list/EditableTreeItem.d.ts +0 -13
  132. package/dist/components/list/ListCommand.cjs +0 -651
  133. package/dist/components/list/ListCommand.d.ts +0 -5
  134. package/dist/components/list/ListCommand.mjs +0 -649
  135. package/dist/components/list/SyncedPackageTree.d.ts +0 -14
  136. package/dist/components/list/index.d.ts +0 -10
  137. package/dist/components/list/types.d.ts +0 -14
  138. package/dist/components/primitives/Box.d.ts +0 -4
  139. package/dist/components/primitives/Spinner.d.ts +0 -6
  140. package/dist/components/primitives/Text.d.ts +0 -4
  141. package/dist/components/primitives/index.d.ts +0 -3
  142. package/dist/components/remove/RemoveConfirm.cjs +0 -18
  143. package/dist/components/remove/RemoveConfirm.d.ts +0 -11
  144. package/dist/components/remove/RemoveConfirm.mjs +0 -16
  145. package/dist/components/shared/Confirm.cjs +0 -30
  146. package/dist/components/shared/Confirm.d.ts +0 -8
  147. package/dist/components/shared/Confirm.mjs +0 -28
  148. package/dist/components/shared/MenuItem.cjs +0 -18
  149. package/dist/components/shared/MenuItem.d.ts +0 -7
  150. package/dist/components/shared/MenuItem.mjs +0 -16
  151. package/dist/components/shared/ProgressBar.d.ts +0 -7
  152. package/dist/components/shared/StepRunner.cjs +0 -58
  153. package/dist/components/shared/StepRunner.d.ts +0 -15
  154. package/dist/components/shared/StepRunner.mjs +0 -56
  155. package/dist/components/shared/Table.cjs +0 -19
  156. package/dist/components/shared/Table.d.ts +0 -8
  157. package/dist/components/shared/Table.mjs +0 -17
  158. package/dist/components/shared/index.d.ts +0 -6
  159. package/dist/components/status/PackageStatusCard.d.ts +0 -10
  160. package/dist/components/status/StatusDisplay.cjs +0 -26
  161. package/dist/components/status/StatusDisplay.d.ts +0 -23
  162. package/dist/components/status/StatusDisplay.mjs +0 -24
  163. package/dist/components/status/StatusTreeNode.cjs +0 -40
  164. package/dist/components/status/StatusTreeNode.d.ts +0 -15
  165. package/dist/components/status/StatusTreeNode.mjs +0 -38
  166. package/dist/components/status/index.d.ts +0 -6
  167. package/dist/components/tree/AssetTreeNode.cjs +0 -54
  168. package/dist/components/tree/AssetTreeNode.d.ts +0 -12
  169. package/dist/components/tree/AssetTreeNode.mjs +0 -52
  170. package/dist/components/tree/TreeSelect.cjs +0 -129
  171. package/dist/components/tree/TreeSelect.d.ts +0 -12
  172. package/dist/components/tree/TreeSelect.mjs +0 -127
  173. package/dist/components/tree/index.d.ts +0 -4
  174. package/dist/core/assetStructure.cjs +0 -30
  175. package/dist/core/assetStructure.d.ts +0 -36
  176. package/dist/core/assetStructure.mjs +0 -27
  177. package/dist/core/cli.cjs +0 -106
  178. package/dist/core/cli.d.ts +0 -9
  179. package/dist/core/cli.mjs +0 -103
  180. package/dist/core/constants.cjs +0 -28
  181. package/dist/core/constants.d.ts +0 -94
  182. package/dist/core/constants.mjs +0 -21
  183. package/dist/core/filesystem.cjs +0 -98
  184. package/dist/core/filesystem.d.ts +0 -94
  185. package/dist/core/filesystem.mjs +0 -88
  186. package/dist/core/github.cjs +0 -115
  187. package/dist/core/github.d.ts +0 -61
  188. package/dist/core/github.mjs +0 -107
  189. package/dist/core/io.cjs +0 -46
  190. package/dist/core/io.d.ts +0 -40
  191. package/dist/core/io.mjs +0 -39
  192. package/dist/core/listOperations.cjs +0 -228
  193. package/dist/core/listOperations.d.ts +0 -43
  194. package/dist/core/listOperations.mjs +0 -205
  195. package/dist/core/localSource.cjs +0 -126
  196. package/dist/core/localSource.d.ts +0 -33
  197. package/dist/core/localSource.mjs +0 -120
  198. package/dist/core/migration.cjs +0 -201
  199. package/dist/core/migration.d.ts +0 -57
  200. package/dist/core/migration.mjs +0 -198
  201. package/dist/core/packageScanner.cjs +0 -360
  202. package/dist/core/packageScanner.d.ts +0 -22
  203. package/dist/core/packageScanner.mjs +0 -356
  204. package/dist/core/sync.cjs +0 -400
  205. package/dist/core/sync.d.ts +0 -21
  206. package/dist/core/sync.mjs +0 -397
  207. package/dist/core/syncMeta.cjs +0 -242
  208. package/dist/core/syncMeta.d.ts +0 -75
  209. package/dist/core/syncMeta.mjs +0 -229
  210. package/dist/utils/dependencies.cjs +0 -57
  211. package/dist/utils/dependencies.d.ts +0 -10
  212. package/dist/utils/dependencies.mjs +0 -34
  213. package/dist/utils/nameTransform.cjs +0 -13
  214. package/dist/utils/nameTransform.d.ts +0 -65
  215. package/dist/utils/nameTransform.mjs +0 -11
  216. package/dist/utils/package.cjs +0 -170
  217. package/dist/utils/package.d.ts +0 -105
  218. package/dist/utils/package.mjs +0 -157
  219. package/dist/utils/packageName.cjs +0 -24
  220. package/dist/utils/packageName.d.ts +0 -32
  221. package/dist/utils/packageName.mjs +0 -21
  222. package/dist/utils/paths.cjs +0 -18
  223. package/dist/utils/paths.d.ts +0 -55
  224. package/dist/utils/paths.mjs +0 -15
  225. package/dist/version.cjs +0 -5
  226. package/dist/version.d.ts +0 -5
  227. package/dist/version.mjs +0 -3
@@ -1,400 +0,0 @@
1
- 'use strict';
2
-
3
- var logger = require('../utils/logger.cjs');
4
- var nameTransform = require('../utils/nameTransform.cjs');
5
- var _package = require('../utils/package.cjs');
6
- var packageName = require('../utils/packageName.cjs');
7
- var paths = require('../utils/paths.cjs');
8
- var constants = require('./constants.cjs');
9
- var filesystem = require('./filesystem.cjs');
10
- var github = require('./github.cjs');
11
- var localSource = require('./localSource.cjs');
12
- var syncMeta = require('./syncMeta.cjs');
13
- var assetStructure = require('./assetStructure.cjs');
14
-
15
- function groupEntriesIntoSkillUnits(entries, prefix) {
16
- const dirGroups = new Map();
17
- const singleFiles = [];
18
- for (const entry of entries) {
19
- const slashIndex = entry.name.indexOf('/');
20
- if (slashIndex === -1) {
21
- singleFiles.push({
22
- name: entry.name,
23
- isDirectory: false,
24
- transformed: nameTransform.toFlatFileName(prefix, entry.name),
25
- });
26
- }
27
- else {
28
- const dirName = entry.name.substring(0, slashIndex);
29
- const internalFile = entry.name.substring(slashIndex + 1);
30
- if (!dirGroups.has(dirName)) {
31
- dirGroups.set(dirName, []);
32
- }
33
- dirGroups.get(dirName).push(internalFile);
34
- }
35
- }
36
- const dirSkillUnits = [];
37
- for (const [dirName, internalFiles] of dirGroups.entries()) {
38
- dirSkillUnits.push({
39
- name: dirName,
40
- isDirectory: true,
41
- transformed: nameTransform.toFlatFileName(prefix, dirName),
42
- internalFiles,
43
- });
44
- }
45
- return [...singleFiles, ...dirSkillUnits];
46
- }
47
- const syncPackage = async (packageName$1, options, cwd = process.cwd(), exclusions, outputDir) => {
48
- logger.logger.packageStart(packageName$1);
49
- try {
50
- const destDir = outputDir ?? _package.findGitRoot(cwd) ?? cwd;
51
- const packageInfo = options.local
52
- ? _package.readLocalPackageJson(packageName$1, cwd)
53
- : _package.readPackageJson(packageName$1, cwd);
54
- if (!packageInfo) {
55
- const location = options.local ? 'workspace' : 'node_modules';
56
- return {
57
- packageName: packageName$1,
58
- success: false,
59
- skipped: true,
60
- reason: `Package not found in ${location}`,
61
- };
62
- }
63
- const claudeConfig = _package.resolveClaudeConfig(packageInfo.claude);
64
- const repoInfo = _package.parseGitHubRepo(packageInfo.repository);
65
- const useFlat = options.flat !== false;
66
- if (useFlat) {
67
- const prefix = packageName.packageNameToPrefix(packageName$1);
68
- const unifiedMeta = syncMeta.readUnifiedSyncMeta(destDir) ?? syncMeta.createEmptyUnifiedMeta();
69
- if (!options.force &&
70
- !syncMeta.needsSyncUnified(unifiedMeta, prefix, packageInfo.version)) {
71
- return {
72
- packageName: packageName$1,
73
- success: true,
74
- skipped: true,
75
- reason: `Already synced at version ${packageInfo.version}`,
76
- };
77
- }
78
- const assetPath = _package.buildAssetPath(claudeConfig.assetPath);
79
- const useLocalSource = options.ref
80
- ? { available: false }
81
- : localSource.canUseLocalSource(packageName$1, packageInfo.version, assetPath, cwd);
82
- const assetTypes = _package.getAssetTypes(claudeConfig);
83
- let assetFiles;
84
- let isLocalSource;
85
- if (useLocalSource.available && useLocalSource.docsPath) {
86
- isLocalSource = true;
87
- logger.logger.step('Using', 'local docs from node_modules');
88
- assetFiles = await localSource.fetchLocalAssetFiles(useLocalSource.docsPath, assetTypes);
89
- }
90
- else {
91
- if (!repoInfo) {
92
- return {
93
- packageName: packageName$1,
94
- success: false,
95
- skipped: true,
96
- reason: `Package ${packageName$1} has no valid GitHub repository URL for remote fetch`,
97
- };
98
- }
99
- isLocalSource = false;
100
- const tag = options.ref ?? _package.buildVersionTag(packageName$1, packageInfo.version);
101
- logger.logger.step('Fetching', `asset list from GitHub (ref: ${tag})`);
102
- assetFiles = await github.fetchAssetFiles(repoInfo, assetPath, tag, assetTypes);
103
- }
104
- let totalFiles = 0;
105
- for (const assetType of assetTypes) {
106
- totalFiles += (assetFiles[assetType] || []).length;
107
- }
108
- if (totalFiles === 0)
109
- return {
110
- packageName: packageName$1,
111
- success: false,
112
- skipped: true,
113
- reason: `No assets found in package (checked: ${assetTypes.join(', ')})`,
114
- };
115
- const foundSummary = assetTypes
116
- .map((type) => `${(assetFiles[type] || []).length} ${type}`)
117
- .join(', ');
118
- logger.logger.step('Found', foundSummary);
119
- const fileMappings = {};
120
- for (const assetType of assetTypes) {
121
- const entries = assetFiles[assetType] || [];
122
- if (entries.length === 0)
123
- continue;
124
- const filteredEntries = entries.filter((entry) => {
125
- if (!exclusions)
126
- return true;
127
- const excludedPath = `${assetType}/${entry.name}`;
128
- return !exclusions.files.includes(excludedPath);
129
- });
130
- if (filteredEntries.length === 0)
131
- continue;
132
- const structure = assetStructure.getAssetStructure(assetType, claudeConfig);
133
- if (structure === 'nested') {
134
- fileMappings[assetType] = filteredEntries.map((e) => ({
135
- name: e.name,
136
- isDirectory: false,
137
- }));
138
- }
139
- else {
140
- fileMappings[assetType] = groupEntriesIntoSkillUnits(filteredEntries, prefix);
141
- }
142
- }
143
- if (options.dryRun) {
144
- for (const assetType of assetTypes) {
145
- const units = fileMappings[assetType];
146
- if (!units || units.length === 0)
147
- continue;
148
- const structure = assetStructure.getAssetStructure(assetType, claudeConfig);
149
- if (structure === 'nested') {
150
- logger.logger.step(`Would sync ${assetType} to`, paths.getDestinationDir(destDir, packageName$1, assetType));
151
- units.forEach((unit) => {
152
- logger.logger.file('create', unit.name);
153
- });
154
- }
155
- else {
156
- logger.logger.step(`Would sync ${assetType} to`, paths.getFlatDestinationDir(destDir, assetType));
157
- units.forEach((unit) => {
158
- const displayName = unit.transformed ?? unit.name;
159
- logger.logger.file('create', displayName);
160
- });
161
- }
162
- }
163
- const syncedFiles = {};
164
- for (const assetType of assetTypes) {
165
- const units = fileMappings[assetType];
166
- if (!units || units.length === 0)
167
- continue;
168
- syncedFiles[assetType] = units.map((u) => u.transformed ?? u.name);
169
- }
170
- return {
171
- packageName: packageName$1,
172
- success: true,
173
- skipped: false,
174
- syncedFiles,
175
- };
176
- }
177
- for (const assetType of assetTypes) {
178
- const structure = assetStructure.getAssetStructure(assetType, claudeConfig);
179
- if (structure === 'nested') {
180
- filesystem.cleanAssetDir(destDir, packageName$1, assetType);
181
- }
182
- else {
183
- filesystem.cleanFlatAssetFiles(destDir, assetType, prefix, unifiedMeta);
184
- }
185
- }
186
- for (const assetType of assetTypes) {
187
- const entries = assetFiles[assetType] || [];
188
- if (entries.length === 0)
189
- continue;
190
- const filteredEntries = entries.filter((entry) => {
191
- if (!exclusions)
192
- return true;
193
- const excludedPath = `${assetType}/${entry.name}`;
194
- return !exclusions.files.includes(excludedPath);
195
- });
196
- if (filteredEntries.length === 0)
197
- continue;
198
- const structure = assetStructure.getAssetStructure(assetType, claudeConfig);
199
- logger.logger.step('Downloading', assetType);
200
- let downloadedFiles;
201
- if (isLocalSource && useLocalSource.docsPath) {
202
- downloadedFiles = await localSource.downloadLocalAssetFiles(useLocalSource.docsPath, assetType, filteredEntries);
203
- }
204
- else {
205
- const tag = options.ref ?? _package.buildVersionTag(packageName$1, packageInfo.version);
206
- downloadedFiles = await github.downloadAssetFiles(repoInfo, assetPath, assetType, filteredEntries, tag);
207
- }
208
- if (structure === 'nested') {
209
- for (const [fileName, content] of downloadedFiles) {
210
- filesystem.writeAssetFile(destDir, packageName$1, assetType, fileName, content);
211
- logger.logger.file('create', fileName);
212
- }
213
- }
214
- else {
215
- for (const [fileName, content] of downloadedFiles) {
216
- const flatName = nameTransform.toFlatFileName(prefix, fileName);
217
- filesystem.writeFlatAssetFile(destDir, assetType, flatName, content);
218
- logger.logger.file('create', flatName);
219
- }
220
- }
221
- }
222
- const updatedMeta = syncMeta.updatePackageInMeta(unifiedMeta, prefix, {
223
- originalName: packageName$1,
224
- version: packageInfo.version,
225
- local: options.local,
226
- files: fileMappings,
227
- exclusions: exclusions &&
228
- (exclusions.directories.length > 0 || exclusions.files.length > 0)
229
- ? exclusions
230
- : undefined,
231
- });
232
- updatedMeta.skillUnitFormat = constants.SCHEMA_VERSIONS.SKILL_UNIT_FORMAT;
233
- syncMeta.writeUnifiedSyncMeta(destDir, updatedMeta);
234
- const syncedFiles = {};
235
- for (const assetType of assetTypes) {
236
- const units = fileMappings[assetType];
237
- if (!units || units.length === 0)
238
- continue;
239
- syncedFiles[assetType] = units.map((u) => u.transformed ?? u.name);
240
- }
241
- return {
242
- packageName: packageName$1,
243
- success: true,
244
- skipped: false,
245
- syncedFiles,
246
- };
247
- }
248
- else {
249
- const assetPath = _package.buildAssetPath(claudeConfig.assetPath);
250
- const useLocalSource = options.ref
251
- ? { available: false }
252
- : localSource.canUseLocalSource(packageName$1, packageInfo.version, assetPath, cwd);
253
- const assetTypes = _package.getAssetTypes(claudeConfig);
254
- let assetFiles;
255
- let isLocalSource;
256
- if (useLocalSource.available && useLocalSource.docsPath) {
257
- isLocalSource = true;
258
- logger.logger.step('Using', 'local docs from node_modules');
259
- assetFiles = await localSource.fetchLocalAssetFiles(useLocalSource.docsPath, assetTypes);
260
- }
261
- else {
262
- if (!repoInfo) {
263
- return {
264
- packageName: packageName$1,
265
- success: false,
266
- skipped: true,
267
- reason: `Package ${packageName$1} has no valid GitHub repository URL for remote fetch`,
268
- };
269
- }
270
- isLocalSource = false;
271
- const tag = options.ref ?? _package.buildVersionTag(packageName$1, packageInfo.version);
272
- logger.logger.step('Fetching', `asset list from GitHub (ref: ${tag})`);
273
- assetFiles = await github.fetchAssetFiles(repoInfo, assetPath, tag, assetTypes);
274
- }
275
- let totalFiles = 0;
276
- for (const assetType of assetTypes) {
277
- totalFiles += (assetFiles[assetType] || []).length;
278
- }
279
- if (totalFiles === 0)
280
- return {
281
- packageName: packageName$1,
282
- success: false,
283
- skipped: true,
284
- reason: `No assets found in package (checked: ${assetTypes.join(', ')})`,
285
- };
286
- const foundSummary = assetTypes
287
- .map((type) => `${(assetFiles[type] || []).length} ${type}`)
288
- .join(', ');
289
- logger.logger.step('Found', foundSummary);
290
- if (!options.force &&
291
- !filesystem.needsSync(destDir, packageName$1, packageInfo.version, assetTypes)) {
292
- return {
293
- packageName: packageName$1,
294
- success: true,
295
- skipped: true,
296
- reason: `Already synced at version ${packageInfo.version}`,
297
- };
298
- }
299
- if (options.dryRun) {
300
- const syncedFiles = {};
301
- for (const assetType of assetTypes) {
302
- const entries = assetFiles[assetType] || [];
303
- if (entries.length === 0)
304
- continue;
305
- const filteredEntries = entries.filter((entry) => {
306
- if (!exclusions)
307
- return true;
308
- const excludedPath = `${assetType}/${entry.name}`;
309
- return !exclusions.files.includes(excludedPath);
310
- });
311
- if (filteredEntries.length === 0)
312
- continue;
313
- logger.logger.step(`Would sync ${assetType} to`, paths.getDestinationDir(destDir, packageName$1, assetType));
314
- filteredEntries.forEach((entry) => logger.logger.file('create', entry.name));
315
- syncedFiles[assetType] = filteredEntries.map((e) => e.name);
316
- }
317
- return {
318
- packageName: packageName$1,
319
- success: true,
320
- skipped: false,
321
- syncedFiles,
322
- };
323
- }
324
- const syncedFiles = {};
325
- for (const assetType of assetTypes) {
326
- const entries = assetFiles[assetType] || [];
327
- if (entries.length === 0)
328
- continue;
329
- const filteredEntries = entries.filter((entry) => {
330
- if (!exclusions)
331
- return true;
332
- const excludedPath = `${assetType}/${entry.name}`;
333
- return !exclusions.files.includes(excludedPath);
334
- });
335
- if (filteredEntries.length === 0)
336
- continue;
337
- logger.logger.step('Downloading', assetType);
338
- let downloadedFiles;
339
- if (isLocalSource && useLocalSource.docsPath) {
340
- downloadedFiles = await localSource.downloadLocalAssetFiles(useLocalSource.docsPath, assetType, filteredEntries);
341
- }
342
- else {
343
- const tag = options.ref ?? _package.buildVersionTag(packageName$1, packageInfo.version);
344
- downloadedFiles = await github.downloadAssetFiles(repoInfo, assetPath, assetType, filteredEntries, tag);
345
- }
346
- filesystem.cleanAssetDir(destDir, packageName$1, assetType);
347
- syncedFiles[assetType] = [];
348
- for (const [fileName, content] of downloadedFiles) {
349
- filesystem.writeAssetFile(destDir, packageName$1, assetType, fileName, content);
350
- logger.logger.file('create', fileName);
351
- syncedFiles[assetType].push(fileName);
352
- }
353
- filesystem.writeSyncMeta(destDir, packageName$1, assetType, filesystem.createSyncMeta(packageInfo.version, syncedFiles[assetType]));
354
- }
355
- return {
356
- packageName: packageName$1,
357
- success: true,
358
- skipped: false,
359
- syncedFiles,
360
- };
361
- }
362
- }
363
- catch (error) {
364
- if (error instanceof github.RateLimitError)
365
- return {
366
- packageName: packageName$1,
367
- success: false,
368
- skipped: false,
369
- reason: error.message,
370
- };
371
- const message = error instanceof Error ? error.message : 'Unknown error occurred';
372
- return {
373
- packageName: packageName$1,
374
- success: false,
375
- skipped: false,
376
- reason: message,
377
- };
378
- }
379
- };
380
- const syncPackages = async (packages, options, cwd = process.cwd()) => {
381
- const results = [];
382
- const gitRoot = _package.findGitRoot(cwd);
383
- if (gitRoot)
384
- logger.logger.info(`[Output] ${gitRoot}/.claude\n`);
385
- for (const packageName of packages) {
386
- const result = await syncPackage(packageName, options, cwd, undefined, gitRoot ?? undefined);
387
- logger.logger.packageEnd(packageName, result);
388
- results.push(result);
389
- }
390
- const summary = {
391
- success: results.filter((r) => r.success && !r.skipped).length,
392
- skipped: results.filter((r) => r.skipped).length,
393
- failed: results.filter((r) => !r.success && !r.skipped).length,
394
- };
395
- logger.logger.summary(summary);
396
- return results;
397
- };
398
-
399
- exports.syncPackage = syncPackage;
400
- exports.syncPackages = syncPackages;
@@ -1,21 +0,0 @@
1
- import type { CliOptions, SyncResult } from '../utils/types.js';
2
- /**
3
- * Sync Claude assets for a single package
4
- * @param packageName - Package name to sync
5
- * @param options - CLI options
6
- * @param cwd - Current working directory
7
- * @param exclusions - Optional exclusions for selective syncing
8
- * @returns Sync result
9
- */
10
- export declare const syncPackage: (packageName: string, options: Pick<CliOptions, "force" | "dryRun" | "local" | "ref" | "flat">, cwd?: string, exclusions?: {
11
- directories: string[];
12
- files: string[];
13
- }, outputDir?: string) => Promise<SyncResult>;
14
- /**
15
- * Sync Claude assets for multiple packages
16
- * @param packages - List of package names to sync
17
- * @param options - CLI options
18
- * @param cwd - Current working directory
19
- * @returns Array of sync results
20
- */
21
- export declare const syncPackages: (packages: string[], options: Pick<CliOptions, "force" | "dryRun" | "local" | "ref" | "flat">, cwd?: string) => Promise<SyncResult[]>;