@slats/claude-assets-sync 0.1.4 → 0.3.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.
- package/README.md +89 -581
- package/bin/inject-claude-settings.mjs +4 -0
- package/dist/claude-hashes.json +20 -0
- package/dist/commands/index.d.ts +1 -112
- package/dist/commands/runCli/index.d.ts +2 -0
- package/dist/commands/runCli/runCli.cjs +53 -0
- package/dist/commands/runCli/runCli.d.ts +14 -0
- package/dist/commands/runCli/runCli.mjs +51 -0
- package/dist/commands/runCli/type.d.ts +19 -0
- package/dist/commands/runCli/utils/classifyTarget.cjs +48 -0
- package/dist/commands/runCli/utils/classifyTarget.d.ts +19 -0
- package/dist/commands/runCli/utils/classifyTarget.mjs +46 -0
- package/dist/commands/runCli/utils/injectOne.cjs +47 -0
- package/dist/commands/runCli/utils/injectOne.d.ts +3 -0
- package/dist/commands/runCli/utils/injectOne.mjs +45 -0
- package/dist/commands/runCli/utils/resolvePackage.cjs +77 -0
- package/dist/commands/runCli/utils/resolvePackage.d.ts +16 -0
- package/dist/commands/runCli/utils/resolvePackage.mjs +74 -0
- package/dist/commands/runCli/utils/resolveScopeAlias.cjs +69 -0
- package/dist/commands/runCli/utils/resolveScopeAlias.d.ts +2 -0
- package/dist/commands/runCli/utils/resolveScopeAlias.mjs +67 -0
- package/dist/commands/runCli/utils/resolveScopeFlag.cjs +28 -0
- package/dist/commands/runCli/utils/resolveScopeFlag.d.ts +2 -0
- package/dist/commands/runCli/utils/resolveScopeFlag.mjs +26 -0
- package/dist/commands/runCli/utils/resolveTargets.cjs +40 -0
- package/dist/commands/runCli/utils/resolveTargets.d.ts +15 -0
- package/dist/commands/runCli/utils/resolveTargets.mjs +38 -0
- package/dist/commands/runCli/utils/runInject.cjs +52 -0
- package/dist/commands/runCli/utils/runInject.d.ts +3 -0
- package/dist/commands/runCli/utils/runInject.mjs +50 -0
- package/dist/core/buildPlan/buildPlan.cjs +42 -0
- package/dist/core/buildPlan/buildPlan.d.ts +2 -0
- package/dist/core/buildPlan/buildPlan.mjs +40 -0
- package/dist/core/buildPlan/index.d.ts +2 -0
- package/dist/core/buildPlan/type.d.ts +32 -0
- package/dist/core/buildPlan/utils/toPosix.cjs +9 -0
- package/dist/core/buildPlan/utils/toPosix.d.ts +1 -0
- package/dist/core/buildPlan/utils/toPosix.mjs +7 -0
- package/dist/core/buildPlan/utils/walkFiles.cjs +25 -0
- package/dist/core/buildPlan/utils/walkFiles.d.ts +1 -0
- package/dist/core/buildPlan/utils/walkFiles.mjs +23 -0
- package/dist/core/hash/hash.cjs +30 -0
- package/dist/core/hash/hash.d.ts +4 -0
- package/dist/core/hash/hash.mjs +26 -0
- package/dist/core/hash/index.d.ts +1 -0
- package/dist/core/hashManifest/hashManifest.cjs +27 -0
- package/dist/core/hashManifest/hashManifest.d.ts +17 -0
- package/dist/core/hashManifest/hashManifest.mjs +23 -0
- package/dist/core/hashManifest/index.d.ts +1 -0
- package/dist/core/index.d.ts +5 -0
- package/dist/core/injectDocs/index.d.ts +2 -0
- package/dist/core/injectDocs/injectDocs.cjs +43 -0
- package/dist/core/injectDocs/injectDocs.d.ts +2 -0
- package/dist/core/injectDocs/injectDocs.mjs +41 -0
- package/dist/core/injectDocs/type.d.ts +30 -0
- package/dist/core/injectDocs/utils/applyAction.cjs +21 -0
- package/dist/core/injectDocs/utils/applyAction.d.ts +2 -0
- package/dist/core/injectDocs/utils/applyAction.mjs +19 -0
- package/dist/core/injectDocs/utils/emitCiForceList.cjs +10 -0
- package/dist/core/injectDocs/utils/emitCiForceList.d.ts +2 -0
- package/dist/core/injectDocs/utils/emitCiForceList.mjs +8 -0
- package/dist/core/injectDocs/utils/printPlan.cjs +20 -0
- package/dist/core/injectDocs/utils/printPlan.d.ts +2 -0
- package/dist/core/injectDocs/utils/printPlan.mjs +18 -0
- package/dist/core/injectDocs/utils/summarize.cjs +27 -0
- package/dist/core/injectDocs/utils/summarize.d.ts +3 -0
- package/dist/core/injectDocs/utils/summarize.mjs +25 -0
- package/dist/core/scope/index.d.ts +1 -0
- package/dist/core/scope/scope.cjs +46 -0
- package/dist/core/scope/scope.d.ts +16 -0
- package/dist/core/scope/scope.mjs +41 -0
- package/dist/core/scope/utils/isDirectory.cjs +14 -0
- package/dist/core/scope/utils/isDirectory.d.ts +1 -0
- package/dist/core/scope/utils/isDirectory.mjs +12 -0
- package/dist/index.cjs +15 -9
- package/dist/index.d.ts +3 -5
- package/dist/index.mjs +7 -3
- package/dist/prompts/confirmForce.cjs +27 -0
- package/dist/prompts/confirmForce.d.ts +1 -0
- package/dist/prompts/confirmForce.mjs +25 -0
- package/dist/prompts/index.d.ts +2 -0
- package/dist/prompts/selectScope.cjs +30 -0
- package/dist/prompts/selectScope.d.ts +2 -0
- package/dist/prompts/selectScope.mjs +28 -0
- package/dist/utils/heartbeat.cjs +25 -0
- package/dist/utils/heartbeat.d.ts +16 -0
- package/dist/utils/heartbeat.mjs +23 -0
- package/dist/utils/logger.cjs +7 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.mjs +7 -0
- package/dist/utils/types.d.ts +1 -252
- package/dist/utils/version.cjs +2 -14
- package/dist/utils/version.d.ts +3 -53
- package/dist/utils/version.mjs +2 -13
- package/docs/bundle-size-decision.md +36 -0
- package/docs/claude/skills/claude-docs-asset-wiring/SKILL.md +159 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/claude-md-template.md +86 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/dependency-cruiser.md +54 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/gotchas.md +122 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/package-json-patches.md +145 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/reference-files.md +37 -0
- package/docs/claude/skills/claude-docs-asset-wiring/knowledge/smoke-tests.md +111 -0
- package/docs/consumer-integration.md +94 -0
- package/package.json +24 -16
- package/scripts/build-hashes.mjs +30 -0
- package/scripts/buildHashes.d.mts +15 -0
- package/scripts/buildHashes.mjs +82 -0
- package/scripts/claude-build-hashes.mjs +42 -0
- package/scripts/inject-version.js +112 -0
- package/dist/cli.cjs +0 -8
- package/dist/cli.d.ts +0 -1
- package/dist/cli.mjs +0 -7
- package/dist/commands/add.cjs +0 -80
- package/dist/commands/add.d.ts +0 -8
- package/dist/commands/add.mjs +0 -78
- package/dist/commands/list.cjs +0 -94
- package/dist/commands/list.d.ts +0 -15
- package/dist/commands/list.mjs +0 -91
- package/dist/commands/migrate.cjs +0 -9
- package/dist/commands/migrate.d.ts +0 -6
- package/dist/commands/migrate.mjs +0 -7
- package/dist/commands/remove.cjs +0 -127
- package/dist/commands/remove.d.ts +0 -6
- package/dist/commands/remove.mjs +0 -105
- package/dist/commands/status.cjs +0 -193
- package/dist/commands/status.d.ts +0 -6
- package/dist/commands/status.mjs +0 -171
- package/dist/commands/sync.cjs +0 -28
- package/dist/commands/sync.d.ts +0 -6
- package/dist/commands/sync.mjs +0 -26
- package/dist/commands/types.d.ts +0 -89
- package/dist/commands/update.cjs +0 -209
- package/dist/commands/update.d.ts +0 -29
- package/dist/commands/update.mjs +0 -206
- package/dist/components/add/AddCommand.cjs +0 -103
- package/dist/components/add/AddCommand.d.ts +0 -14
- package/dist/components/add/AddCommand.mjs +0 -101
- package/dist/components/add/BulkAddView.cjs +0 -165
- package/dist/components/add/BulkAddView.d.ts +0 -11
- package/dist/components/add/BulkAddView.mjs +0 -163
- package/dist/components/add/index.d.ts +0 -2
- package/dist/components/index.d.ts +0 -2
- package/dist/components/list/EditableTreeItem.d.ts +0 -13
- package/dist/components/list/ListCommand.cjs +0 -651
- package/dist/components/list/ListCommand.d.ts +0 -5
- package/dist/components/list/ListCommand.mjs +0 -649
- package/dist/components/list/SyncedPackageTree.d.ts +0 -14
- package/dist/components/list/index.d.ts +0 -10
- package/dist/components/list/types.d.ts +0 -14
- package/dist/components/primitives/Box.d.ts +0 -4
- package/dist/components/primitives/Spinner.d.ts +0 -6
- package/dist/components/primitives/Text.d.ts +0 -4
- package/dist/components/primitives/index.d.ts +0 -3
- package/dist/components/remove/RemoveConfirm.cjs +0 -18
- package/dist/components/remove/RemoveConfirm.d.ts +0 -11
- package/dist/components/remove/RemoveConfirm.mjs +0 -16
- package/dist/components/shared/Confirm.cjs +0 -30
- package/dist/components/shared/Confirm.d.ts +0 -8
- package/dist/components/shared/Confirm.mjs +0 -28
- package/dist/components/shared/MenuItem.cjs +0 -18
- package/dist/components/shared/MenuItem.d.ts +0 -7
- package/dist/components/shared/MenuItem.mjs +0 -16
- package/dist/components/shared/ProgressBar.d.ts +0 -7
- package/dist/components/shared/StepRunner.cjs +0 -58
- package/dist/components/shared/StepRunner.d.ts +0 -15
- package/dist/components/shared/StepRunner.mjs +0 -56
- package/dist/components/shared/Table.cjs +0 -19
- package/dist/components/shared/Table.d.ts +0 -8
- package/dist/components/shared/Table.mjs +0 -17
- package/dist/components/shared/index.d.ts +0 -6
- package/dist/components/status/PackageStatusCard.d.ts +0 -10
- package/dist/components/status/StatusDisplay.cjs +0 -26
- package/dist/components/status/StatusDisplay.d.ts +0 -23
- package/dist/components/status/StatusDisplay.mjs +0 -24
- package/dist/components/status/StatusTreeNode.cjs +0 -40
- package/dist/components/status/StatusTreeNode.d.ts +0 -15
- package/dist/components/status/StatusTreeNode.mjs +0 -38
- package/dist/components/status/index.d.ts +0 -6
- package/dist/components/tree/AssetTreeNode.cjs +0 -54
- package/dist/components/tree/AssetTreeNode.d.ts +0 -12
- package/dist/components/tree/AssetTreeNode.mjs +0 -52
- package/dist/components/tree/TreeSelect.cjs +0 -129
- package/dist/components/tree/TreeSelect.d.ts +0 -12
- package/dist/components/tree/TreeSelect.mjs +0 -127
- package/dist/components/tree/index.d.ts +0 -4
- package/dist/core/assetStructure.cjs +0 -30
- package/dist/core/assetStructure.d.ts +0 -36
- package/dist/core/assetStructure.mjs +0 -27
- package/dist/core/cli.cjs +0 -106
- package/dist/core/cli.d.ts +0 -9
- package/dist/core/cli.mjs +0 -103
- package/dist/core/constants.cjs +0 -28
- package/dist/core/constants.d.ts +0 -94
- package/dist/core/constants.mjs +0 -21
- package/dist/core/filesystem.cjs +0 -98
- package/dist/core/filesystem.d.ts +0 -94
- package/dist/core/filesystem.mjs +0 -88
- package/dist/core/github.cjs +0 -115
- package/dist/core/github.d.ts +0 -61
- package/dist/core/github.mjs +0 -107
- package/dist/core/io.cjs +0 -46
- package/dist/core/io.d.ts +0 -40
- package/dist/core/io.mjs +0 -39
- package/dist/core/listOperations.cjs +0 -228
- package/dist/core/listOperations.d.ts +0 -43
- package/dist/core/listOperations.mjs +0 -205
- package/dist/core/localSource.cjs +0 -126
- package/dist/core/localSource.d.ts +0 -33
- package/dist/core/localSource.mjs +0 -120
- package/dist/core/migration.cjs +0 -201
- package/dist/core/migration.d.ts +0 -57
- package/dist/core/migration.mjs +0 -198
- package/dist/core/packageScanner.cjs +0 -360
- package/dist/core/packageScanner.d.ts +0 -22
- package/dist/core/packageScanner.mjs +0 -356
- package/dist/core/sync.cjs +0 -400
- package/dist/core/sync.d.ts +0 -21
- package/dist/core/sync.mjs +0 -397
- package/dist/core/syncMeta.cjs +0 -242
- package/dist/core/syncMeta.d.ts +0 -75
- package/dist/core/syncMeta.mjs +0 -229
- package/dist/utils/dependencies.cjs +0 -57
- package/dist/utils/dependencies.d.ts +0 -10
- package/dist/utils/dependencies.mjs +0 -34
- package/dist/utils/nameTransform.cjs +0 -13
- package/dist/utils/nameTransform.d.ts +0 -65
- package/dist/utils/nameTransform.mjs +0 -11
- package/dist/utils/package.cjs +0 -170
- package/dist/utils/package.d.ts +0 -105
- package/dist/utils/package.mjs +0 -157
- package/dist/utils/packageName.cjs +0 -24
- package/dist/utils/packageName.d.ts +0 -32
- package/dist/utils/packageName.mjs +0 -21
- package/dist/utils/paths.cjs +0 -18
- package/dist/utils/paths.d.ts +0 -55
- package/dist/utils/paths.mjs +0 -15
- package/dist/version.cjs +0 -5
- package/dist/version.d.ts +0 -5
- package/dist/version.mjs +0 -3
package/dist/commands/status.cjs
DELETED
|
@@ -1,193 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var fs = require('node:fs');
|
|
4
|
-
var path = require('node:path');
|
|
5
|
-
var ink = require('ink');
|
|
6
|
-
var pc = require('picocolors');
|
|
7
|
-
var React = require('react');
|
|
8
|
-
var StatusDisplay = require('../components/status/StatusDisplay.cjs');
|
|
9
|
-
require('react/jsx-runtime');
|
|
10
|
-
var syncMeta = require('../core/syncMeta.cjs');
|
|
11
|
-
var logger = require('../utils/logger.cjs');
|
|
12
|
-
var _package = require('../utils/package.cjs');
|
|
13
|
-
|
|
14
|
-
function _interopNamespaceDefault(e) {
|
|
15
|
-
var n = Object.create(null);
|
|
16
|
-
if (e) {
|
|
17
|
-
Object.keys(e).forEach(function (k) {
|
|
18
|
-
if (k !== 'default') {
|
|
19
|
-
var d = Object.getOwnPropertyDescriptor(e, k);
|
|
20
|
-
Object.defineProperty(n, k, d.get ? d : {
|
|
21
|
-
enumerable: true,
|
|
22
|
-
get: function () { return e[k]; }
|
|
23
|
-
});
|
|
24
|
-
}
|
|
25
|
-
});
|
|
26
|
-
}
|
|
27
|
-
n.default = e;
|
|
28
|
-
return Object.freeze(n);
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
var fs__namespace = /*#__PURE__*/_interopNamespaceDefault(fs);
|
|
32
|
-
var path__namespace = /*#__PURE__*/_interopNamespaceDefault(path);
|
|
33
|
-
|
|
34
|
-
const CACHE_DURATION = 5 * 60 * 1000;
|
|
35
|
-
const CACHE_FILE = '.sync-version-cache.json';
|
|
36
|
-
const fetchRemoteVersion = async (packageName) => {
|
|
37
|
-
try {
|
|
38
|
-
const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
|
|
39
|
-
signal: AbortSignal.timeout(5000),
|
|
40
|
-
});
|
|
41
|
-
if (!response.ok) {
|
|
42
|
-
if (response.status === 404) {
|
|
43
|
-
return undefined;
|
|
44
|
-
}
|
|
45
|
-
throw new Error(`HTTP ${response.status}`);
|
|
46
|
-
}
|
|
47
|
-
const data = await response.json();
|
|
48
|
-
return data.version;
|
|
49
|
-
}
|
|
50
|
-
catch {
|
|
51
|
-
return undefined;
|
|
52
|
-
}
|
|
53
|
-
};
|
|
54
|
-
const readVersionCache = (cwd) => {
|
|
55
|
-
try {
|
|
56
|
-
const cachePath = path__namespace.join(cwd, '.claude', CACHE_FILE);
|
|
57
|
-
const content = fs__namespace.readFileSync(cachePath, 'utf-8');
|
|
58
|
-
return JSON.parse(content);
|
|
59
|
-
}
|
|
60
|
-
catch {
|
|
61
|
-
return {};
|
|
62
|
-
}
|
|
63
|
-
};
|
|
64
|
-
const writeVersionCache = (cwd, cache) => {
|
|
65
|
-
try {
|
|
66
|
-
const cachePath = path__namespace.join(cwd, '.claude', CACHE_FILE);
|
|
67
|
-
fs__namespace.writeFileSync(cachePath, JSON.stringify(cache, null, 2));
|
|
68
|
-
}
|
|
69
|
-
catch {
|
|
70
|
-
}
|
|
71
|
-
};
|
|
72
|
-
const getCachedRemoteVersion = async (packageName, cwd) => {
|
|
73
|
-
const cache = readVersionCache(cwd);
|
|
74
|
-
const now = Date.now();
|
|
75
|
-
const cached = cache[packageName];
|
|
76
|
-
if (cached && now - cached.timestamp < CACHE_DURATION) {
|
|
77
|
-
return cached.version;
|
|
78
|
-
}
|
|
79
|
-
const version = await fetchRemoteVersion(packageName);
|
|
80
|
-
if (version) {
|
|
81
|
-
cache[packageName] = {
|
|
82
|
-
version,
|
|
83
|
-
timestamp: now,
|
|
84
|
-
};
|
|
85
|
-
writeVersionCache(cwd, cache);
|
|
86
|
-
}
|
|
87
|
-
return version;
|
|
88
|
-
};
|
|
89
|
-
const runStatusCommand = async (options, cwd = process.cwd()) => {
|
|
90
|
-
const destDir = _package.findGitRoot(cwd) ?? cwd;
|
|
91
|
-
const meta = syncMeta.readUnifiedSyncMeta(destDir);
|
|
92
|
-
if (!meta || Object.keys(meta.packages).length === 0) {
|
|
93
|
-
logger.logger.info('No packages synced yet.');
|
|
94
|
-
return;
|
|
95
|
-
}
|
|
96
|
-
const statuses = [];
|
|
97
|
-
for (const [, packageInfo] of Object.entries(meta.packages)) {
|
|
98
|
-
let remoteVersion;
|
|
99
|
-
let error;
|
|
100
|
-
if (!options.noRemote) {
|
|
101
|
-
try {
|
|
102
|
-
remoteVersion = await getCachedRemoteVersion(packageInfo.originalName, destDir);
|
|
103
|
-
}
|
|
104
|
-
catch (err) {
|
|
105
|
-
error = err instanceof Error ? err.message : 'Unknown error';
|
|
106
|
-
}
|
|
107
|
-
}
|
|
108
|
-
const upToDate = remoteVersion !== undefined && remoteVersion === packageInfo.version;
|
|
109
|
-
let totalFiles = 0;
|
|
110
|
-
for (const files of Object.values(packageInfo.files)) {
|
|
111
|
-
totalFiles += Array.isArray(files) ? files.length : 0;
|
|
112
|
-
}
|
|
113
|
-
statuses.push({
|
|
114
|
-
name: packageInfo.originalName,
|
|
115
|
-
localVersion: packageInfo.version,
|
|
116
|
-
remoteVersion,
|
|
117
|
-
upToDate,
|
|
118
|
-
syncedAt: meta.syncedAt,
|
|
119
|
-
error,
|
|
120
|
-
files: packageInfo.files,
|
|
121
|
-
fileCount: totalFiles,
|
|
122
|
-
});
|
|
123
|
-
}
|
|
124
|
-
statuses.sort((a, b) => a.name.localeCompare(b.name));
|
|
125
|
-
if (process.stdout.isTTY) {
|
|
126
|
-
const packages = statuses.map((s) => ({
|
|
127
|
-
name: s.name,
|
|
128
|
-
localVersion: s.localVersion,
|
|
129
|
-
remoteVersion: s.remoteVersion,
|
|
130
|
-
status: s.error
|
|
131
|
-
? 'error'
|
|
132
|
-
: s.upToDate
|
|
133
|
-
? 'up-to-date'
|
|
134
|
-
: s.remoteVersion
|
|
135
|
-
? 'outdated'
|
|
136
|
-
: 'unknown',
|
|
137
|
-
syncedAt: s.syncedAt,
|
|
138
|
-
error: s.error,
|
|
139
|
-
files: s.files,
|
|
140
|
-
fileCount: s.fileCount,
|
|
141
|
-
}));
|
|
142
|
-
const summary = {
|
|
143
|
-
upToDate: statuses.filter((s) => s.upToDate).length,
|
|
144
|
-
outdated: statuses.filter((s) => s.remoteVersion && !s.upToDate).length,
|
|
145
|
-
error: statuses.filter((s) => s.error).length,
|
|
146
|
-
unknown: statuses.filter((s) => !s.remoteVersion && !s.error && !options.noRemote).length,
|
|
147
|
-
};
|
|
148
|
-
ink.render(React.createElement(StatusDisplay.StatusDisplay, {
|
|
149
|
-
packages,
|
|
150
|
-
loading: false,
|
|
151
|
-
summary,
|
|
152
|
-
}));
|
|
153
|
-
}
|
|
154
|
-
else {
|
|
155
|
-
console.log(pc.bold('\nPackage Status:\n'));
|
|
156
|
-
for (const status of statuses) {
|
|
157
|
-
const icon = status.upToDate
|
|
158
|
-
? pc.green('✓')
|
|
159
|
-
: status.remoteVersion
|
|
160
|
-
? pc.yellow('⚠')
|
|
161
|
-
: pc.gray('?');
|
|
162
|
-
console.log(` ${icon} ${pc.cyan(status.name)}`);
|
|
163
|
-
console.log(` Local: ${status.localVersion}`);
|
|
164
|
-
if (status.remoteVersion) {
|
|
165
|
-
console.log(` Remote: ${status.remoteVersion}`);
|
|
166
|
-
}
|
|
167
|
-
else if (status.error) {
|
|
168
|
-
console.log(` Remote: ${pc.red('Error:')} ${status.error}`);
|
|
169
|
-
}
|
|
170
|
-
else if (options.noRemote) {
|
|
171
|
-
console.log(` Remote: ${pc.gray('(check skipped)')}`);
|
|
172
|
-
}
|
|
173
|
-
else {
|
|
174
|
-
console.log(` Remote: ${pc.gray('(not available)')}`);
|
|
175
|
-
}
|
|
176
|
-
if (status.remoteVersion && !status.upToDate) {
|
|
177
|
-
console.log(` Status: ${pc.yellow('Update available')}`);
|
|
178
|
-
}
|
|
179
|
-
else if (status.upToDate) {
|
|
180
|
-
console.log(` Status: ${pc.green('Up to date')}`);
|
|
181
|
-
}
|
|
182
|
-
console.log(` Synced: ${new Date(status.syncedAt).toLocaleString()}`);
|
|
183
|
-
console.log('');
|
|
184
|
-
}
|
|
185
|
-
const upToDateCount = statuses.filter((s) => s.upToDate).length;
|
|
186
|
-
const updateAvailable = statuses.filter((s) => s.remoteVersion && !s.upToDate).length;
|
|
187
|
-
if (!options.noRemote) {
|
|
188
|
-
console.log(pc.gray(`Summary: ${upToDateCount} up to date, ${updateAvailable} updates available\n`));
|
|
189
|
-
}
|
|
190
|
-
}
|
|
191
|
-
};
|
|
192
|
-
|
|
193
|
-
exports.runStatusCommand = runStatusCommand;
|
package/dist/commands/status.mjs
DELETED
|
@@ -1,171 +0,0 @@
|
|
|
1
|
-
import * as fs from 'node:fs';
|
|
2
|
-
import * as path from 'node:path';
|
|
3
|
-
import { render } from 'ink';
|
|
4
|
-
import pc from 'picocolors';
|
|
5
|
-
import React from 'react';
|
|
6
|
-
import { StatusDisplay } from '../components/status/StatusDisplay.mjs';
|
|
7
|
-
import 'react/jsx-runtime';
|
|
8
|
-
import { readUnifiedSyncMeta } from '../core/syncMeta.mjs';
|
|
9
|
-
import { logger } from '../utils/logger.mjs';
|
|
10
|
-
import { findGitRoot } from '../utils/package.mjs';
|
|
11
|
-
|
|
12
|
-
const CACHE_DURATION = 5 * 60 * 1000;
|
|
13
|
-
const CACHE_FILE = '.sync-version-cache.json';
|
|
14
|
-
const fetchRemoteVersion = async (packageName) => {
|
|
15
|
-
try {
|
|
16
|
-
const response = await fetch(`https://registry.npmjs.org/${packageName}/latest`, {
|
|
17
|
-
signal: AbortSignal.timeout(5000),
|
|
18
|
-
});
|
|
19
|
-
if (!response.ok) {
|
|
20
|
-
if (response.status === 404) {
|
|
21
|
-
return undefined;
|
|
22
|
-
}
|
|
23
|
-
throw new Error(`HTTP ${response.status}`);
|
|
24
|
-
}
|
|
25
|
-
const data = await response.json();
|
|
26
|
-
return data.version;
|
|
27
|
-
}
|
|
28
|
-
catch {
|
|
29
|
-
return undefined;
|
|
30
|
-
}
|
|
31
|
-
};
|
|
32
|
-
const readVersionCache = (cwd) => {
|
|
33
|
-
try {
|
|
34
|
-
const cachePath = path.join(cwd, '.claude', CACHE_FILE);
|
|
35
|
-
const content = fs.readFileSync(cachePath, 'utf-8');
|
|
36
|
-
return JSON.parse(content);
|
|
37
|
-
}
|
|
38
|
-
catch {
|
|
39
|
-
return {};
|
|
40
|
-
}
|
|
41
|
-
};
|
|
42
|
-
const writeVersionCache = (cwd, cache) => {
|
|
43
|
-
try {
|
|
44
|
-
const cachePath = path.join(cwd, '.claude', CACHE_FILE);
|
|
45
|
-
fs.writeFileSync(cachePath, JSON.stringify(cache, null, 2));
|
|
46
|
-
}
|
|
47
|
-
catch {
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
const getCachedRemoteVersion = async (packageName, cwd) => {
|
|
51
|
-
const cache = readVersionCache(cwd);
|
|
52
|
-
const now = Date.now();
|
|
53
|
-
const cached = cache[packageName];
|
|
54
|
-
if (cached && now - cached.timestamp < CACHE_DURATION) {
|
|
55
|
-
return cached.version;
|
|
56
|
-
}
|
|
57
|
-
const version = await fetchRemoteVersion(packageName);
|
|
58
|
-
if (version) {
|
|
59
|
-
cache[packageName] = {
|
|
60
|
-
version,
|
|
61
|
-
timestamp: now,
|
|
62
|
-
};
|
|
63
|
-
writeVersionCache(cwd, cache);
|
|
64
|
-
}
|
|
65
|
-
return version;
|
|
66
|
-
};
|
|
67
|
-
const runStatusCommand = async (options, cwd = process.cwd()) => {
|
|
68
|
-
const destDir = findGitRoot(cwd) ?? cwd;
|
|
69
|
-
const meta = readUnifiedSyncMeta(destDir);
|
|
70
|
-
if (!meta || Object.keys(meta.packages).length === 0) {
|
|
71
|
-
logger.info('No packages synced yet.');
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
const statuses = [];
|
|
75
|
-
for (const [, packageInfo] of Object.entries(meta.packages)) {
|
|
76
|
-
let remoteVersion;
|
|
77
|
-
let error;
|
|
78
|
-
if (!options.noRemote) {
|
|
79
|
-
try {
|
|
80
|
-
remoteVersion = await getCachedRemoteVersion(packageInfo.originalName, destDir);
|
|
81
|
-
}
|
|
82
|
-
catch (err) {
|
|
83
|
-
error = err instanceof Error ? err.message : 'Unknown error';
|
|
84
|
-
}
|
|
85
|
-
}
|
|
86
|
-
const upToDate = remoteVersion !== undefined && remoteVersion === packageInfo.version;
|
|
87
|
-
let totalFiles = 0;
|
|
88
|
-
for (const files of Object.values(packageInfo.files)) {
|
|
89
|
-
totalFiles += Array.isArray(files) ? files.length : 0;
|
|
90
|
-
}
|
|
91
|
-
statuses.push({
|
|
92
|
-
name: packageInfo.originalName,
|
|
93
|
-
localVersion: packageInfo.version,
|
|
94
|
-
remoteVersion,
|
|
95
|
-
upToDate,
|
|
96
|
-
syncedAt: meta.syncedAt,
|
|
97
|
-
error,
|
|
98
|
-
files: packageInfo.files,
|
|
99
|
-
fileCount: totalFiles,
|
|
100
|
-
});
|
|
101
|
-
}
|
|
102
|
-
statuses.sort((a, b) => a.name.localeCompare(b.name));
|
|
103
|
-
if (process.stdout.isTTY) {
|
|
104
|
-
const packages = statuses.map((s) => ({
|
|
105
|
-
name: s.name,
|
|
106
|
-
localVersion: s.localVersion,
|
|
107
|
-
remoteVersion: s.remoteVersion,
|
|
108
|
-
status: s.error
|
|
109
|
-
? 'error'
|
|
110
|
-
: s.upToDate
|
|
111
|
-
? 'up-to-date'
|
|
112
|
-
: s.remoteVersion
|
|
113
|
-
? 'outdated'
|
|
114
|
-
: 'unknown',
|
|
115
|
-
syncedAt: s.syncedAt,
|
|
116
|
-
error: s.error,
|
|
117
|
-
files: s.files,
|
|
118
|
-
fileCount: s.fileCount,
|
|
119
|
-
}));
|
|
120
|
-
const summary = {
|
|
121
|
-
upToDate: statuses.filter((s) => s.upToDate).length,
|
|
122
|
-
outdated: statuses.filter((s) => s.remoteVersion && !s.upToDate).length,
|
|
123
|
-
error: statuses.filter((s) => s.error).length,
|
|
124
|
-
unknown: statuses.filter((s) => !s.remoteVersion && !s.error && !options.noRemote).length,
|
|
125
|
-
};
|
|
126
|
-
render(React.createElement(StatusDisplay, {
|
|
127
|
-
packages,
|
|
128
|
-
loading: false,
|
|
129
|
-
summary,
|
|
130
|
-
}));
|
|
131
|
-
}
|
|
132
|
-
else {
|
|
133
|
-
console.log(pc.bold('\nPackage Status:\n'));
|
|
134
|
-
for (const status of statuses) {
|
|
135
|
-
const icon = status.upToDate
|
|
136
|
-
? pc.green('✓')
|
|
137
|
-
: status.remoteVersion
|
|
138
|
-
? pc.yellow('⚠')
|
|
139
|
-
: pc.gray('?');
|
|
140
|
-
console.log(` ${icon} ${pc.cyan(status.name)}`);
|
|
141
|
-
console.log(` Local: ${status.localVersion}`);
|
|
142
|
-
if (status.remoteVersion) {
|
|
143
|
-
console.log(` Remote: ${status.remoteVersion}`);
|
|
144
|
-
}
|
|
145
|
-
else if (status.error) {
|
|
146
|
-
console.log(` Remote: ${pc.red('Error:')} ${status.error}`);
|
|
147
|
-
}
|
|
148
|
-
else if (options.noRemote) {
|
|
149
|
-
console.log(` Remote: ${pc.gray('(check skipped)')}`);
|
|
150
|
-
}
|
|
151
|
-
else {
|
|
152
|
-
console.log(` Remote: ${pc.gray('(not available)')}`);
|
|
153
|
-
}
|
|
154
|
-
if (status.remoteVersion && !status.upToDate) {
|
|
155
|
-
console.log(` Status: ${pc.yellow('Update available')}`);
|
|
156
|
-
}
|
|
157
|
-
else if (status.upToDate) {
|
|
158
|
-
console.log(` Status: ${pc.green('Up to date')}`);
|
|
159
|
-
}
|
|
160
|
-
console.log(` Synced: ${new Date(status.syncedAt).toLocaleString()}`);
|
|
161
|
-
console.log('');
|
|
162
|
-
}
|
|
163
|
-
const upToDateCount = statuses.filter((s) => s.upToDate).length;
|
|
164
|
-
const updateAvailable = statuses.filter((s) => s.remoteVersion && !s.upToDate).length;
|
|
165
|
-
if (!options.noRemote) {
|
|
166
|
-
console.log(pc.gray(`Summary: ${upToDateCount} up to date, ${updateAvailable} updates available\n`));
|
|
167
|
-
}
|
|
168
|
-
}
|
|
169
|
-
};
|
|
170
|
-
|
|
171
|
-
export { runStatusCommand };
|
package/dist/commands/sync.cjs
DELETED
|
@@ -1,28 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
var sync = require('../core/sync.cjs');
|
|
4
|
-
var logger = require('../utils/logger.cjs');
|
|
5
|
-
|
|
6
|
-
const runSyncCommand = async (options) => {
|
|
7
|
-
if (options.package.length === 0) {
|
|
8
|
-
logger.logger.error('No packages specified. Use -p <package> to specify packages.');
|
|
9
|
-
logger.logger.info('Example: claude-assets-sync -p @canard/schema-form');
|
|
10
|
-
process.exit(1);
|
|
11
|
-
}
|
|
12
|
-
if (options.dryRun)
|
|
13
|
-
logger.logger.dryRunNotice();
|
|
14
|
-
if (options.local)
|
|
15
|
-
logger.logger.info('[LOCAL MODE] Reading packages from workspace instead of node_modules\n');
|
|
16
|
-
const results = await sync.syncPackages(options.package, {
|
|
17
|
-
force: options.force,
|
|
18
|
-
dryRun: options.dryRun,
|
|
19
|
-
local: options.local,
|
|
20
|
-
ref: options.ref,
|
|
21
|
-
flat: options.flat,
|
|
22
|
-
});
|
|
23
|
-
const hasFailures = results.some((r) => !r.success && !r.skipped);
|
|
24
|
-
if (hasFailures)
|
|
25
|
-
process.exit(1);
|
|
26
|
-
};
|
|
27
|
-
|
|
28
|
-
exports.runSyncCommand = runSyncCommand;
|
package/dist/commands/sync.d.ts
DELETED
package/dist/commands/sync.mjs
DELETED
|
@@ -1,26 +0,0 @@
|
|
|
1
|
-
import { syncPackages } from '../core/sync.mjs';
|
|
2
|
-
import { logger } from '../utils/logger.mjs';
|
|
3
|
-
|
|
4
|
-
const runSyncCommand = async (options) => {
|
|
5
|
-
if (options.package.length === 0) {
|
|
6
|
-
logger.error('No packages specified. Use -p <package> to specify packages.');
|
|
7
|
-
logger.info('Example: claude-assets-sync -p @canard/schema-form');
|
|
8
|
-
process.exit(1);
|
|
9
|
-
}
|
|
10
|
-
if (options.dryRun)
|
|
11
|
-
logger.dryRunNotice();
|
|
12
|
-
if (options.local)
|
|
13
|
-
logger.info('[LOCAL MODE] Reading packages from workspace instead of node_modules\n');
|
|
14
|
-
const results = await syncPackages(options.package, {
|
|
15
|
-
force: options.force,
|
|
16
|
-
dryRun: options.dryRun,
|
|
17
|
-
local: options.local,
|
|
18
|
-
ref: options.ref,
|
|
19
|
-
flat: options.flat,
|
|
20
|
-
});
|
|
21
|
-
const hasFailures = results.some((r) => !r.success && !r.skipped);
|
|
22
|
-
if (hasFailures)
|
|
23
|
-
process.exit(1);
|
|
24
|
-
};
|
|
25
|
-
|
|
26
|
-
export { runSyncCommand };
|
package/dist/commands/types.d.ts
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Common types for command modules
|
|
3
|
-
*/
|
|
4
|
-
import type { SkillUnit } from '../utils/types.js';
|
|
5
|
-
/**
|
|
6
|
-
* Base command result
|
|
7
|
-
*/
|
|
8
|
-
export interface CommandResult {
|
|
9
|
-
success: boolean;
|
|
10
|
-
message?: string;
|
|
11
|
-
}
|
|
12
|
-
/**
|
|
13
|
-
* Options for add command
|
|
14
|
-
*/
|
|
15
|
-
export interface AddCommandOptions {
|
|
16
|
-
package?: string;
|
|
17
|
-
pattern?: string;
|
|
18
|
-
local?: boolean;
|
|
19
|
-
ref?: string;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Options for sync command
|
|
23
|
-
*/
|
|
24
|
-
export interface SyncCommandOptions {
|
|
25
|
-
package: string[];
|
|
26
|
-
force: boolean;
|
|
27
|
-
dryRun: boolean;
|
|
28
|
-
local: boolean;
|
|
29
|
-
ref?: string;
|
|
30
|
-
flat?: boolean;
|
|
31
|
-
}
|
|
32
|
-
/**
|
|
33
|
-
* Options for list command
|
|
34
|
-
*/
|
|
35
|
-
export interface ListCommandOptions {
|
|
36
|
-
json?: boolean;
|
|
37
|
-
}
|
|
38
|
-
/**
|
|
39
|
-
* Options for remove command
|
|
40
|
-
*/
|
|
41
|
-
export interface RemoveCommandOptions {
|
|
42
|
-
package: string;
|
|
43
|
-
yes?: boolean;
|
|
44
|
-
dryRun?: boolean;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* Options for status command
|
|
48
|
-
*/
|
|
49
|
-
export interface StatusCommandOptions {
|
|
50
|
-
noRemote?: boolean;
|
|
51
|
-
}
|
|
52
|
-
/**
|
|
53
|
-
* Options for migrate command
|
|
54
|
-
*/
|
|
55
|
-
export interface MigrateCommandOptions {
|
|
56
|
-
dryRun?: boolean;
|
|
57
|
-
}
|
|
58
|
-
/**
|
|
59
|
-
* Package list item
|
|
60
|
-
*/
|
|
61
|
-
export interface PackageListItem {
|
|
62
|
-
name: string;
|
|
63
|
-
version: string;
|
|
64
|
-
syncedAt: string;
|
|
65
|
-
assetCount: number;
|
|
66
|
-
assets: Record<string, number>;
|
|
67
|
-
}
|
|
68
|
-
/**
|
|
69
|
-
* Package status item
|
|
70
|
-
*/
|
|
71
|
-
export interface PackageStatusItem {
|
|
72
|
-
name: string;
|
|
73
|
-
localVersion: string;
|
|
74
|
-
remoteVersion?: string;
|
|
75
|
-
upToDate: boolean;
|
|
76
|
-
syncedAt: string;
|
|
77
|
-
error?: string;
|
|
78
|
-
files: Record<string, SkillUnit[]>;
|
|
79
|
-
fileCount: number;
|
|
80
|
-
}
|
|
81
|
-
/**
|
|
82
|
-
* Remote version cache entry
|
|
83
|
-
*/
|
|
84
|
-
export interface RemoteVersionCache {
|
|
85
|
-
[packageName: string]: {
|
|
86
|
-
version: string;
|
|
87
|
-
timestamp: number;
|
|
88
|
-
};
|
|
89
|
-
}
|