mirror of
https://github.com/thedotmack/claude-mem
synced 2026-04-26 01:25:10 +02:00
96 lines
2.7 KiB
JavaScript
96 lines
2.7 KiB
JavaScript
#!/usr/bin/env node
|
|
|
|
import fs from 'fs';
|
|
import path from 'path';
|
|
import { fileURLToPath } from 'url';
|
|
|
|
const __dirname = path.dirname(fileURLToPath(import.meta.url));
|
|
const rootDir = path.resolve(__dirname, '..');
|
|
|
|
const packageJsonPath = path.join(rootDir, 'package.json');
|
|
const codexPluginPath = path.join(rootDir, '.codex-plugin', 'plugin.json');
|
|
const claudePluginPath = path.join(rootDir, '.claude-plugin', 'plugin.json');
|
|
|
|
function readJson(filePath) {
|
|
return JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
|
}
|
|
|
|
function writeJson(filePath, value) {
|
|
fs.writeFileSync(filePath, JSON.stringify(value, null, 2) + '\n');
|
|
}
|
|
|
|
function syncCodexPlugin(plugin, pkg) {
|
|
const author =
|
|
typeof plugin.author === 'object' && plugin.author ? plugin.author : {};
|
|
|
|
return {
|
|
...plugin,
|
|
name: pkg.name,
|
|
version: pkg.version,
|
|
description: pkg.description,
|
|
homepage: pkg.homepage,
|
|
repository: normalizeRepositoryUrl(pkg.repository),
|
|
license: pkg.license,
|
|
keywords: pkg.keywords,
|
|
author: {
|
|
...author,
|
|
name: normalizeAuthorName(pkg.author),
|
|
},
|
|
interface: {
|
|
...plugin.interface,
|
|
developerName: normalizeAuthorName(pkg.author),
|
|
websiteURL: normalizeRepositoryUrl(pkg.repository),
|
|
},
|
|
};
|
|
}
|
|
|
|
function syncClaudePlugin(plugin, pkg) {
|
|
return {
|
|
...plugin,
|
|
name: pkg.name,
|
|
version: pkg.version,
|
|
description: pkg.description,
|
|
homepage: pkg.homepage,
|
|
repository: normalizeRepositoryUrl(pkg.repository),
|
|
license: pkg.license,
|
|
keywords: pkg.keywords,
|
|
author: {
|
|
...(typeof plugin.author === 'object' && plugin.author ? plugin.author : {}),
|
|
name: normalizeAuthorName(pkg.author),
|
|
},
|
|
};
|
|
}
|
|
|
|
function normalizeAuthorName(author) {
|
|
if (typeof author === 'string') return author;
|
|
if (author && typeof author === 'object' && typeof author.name === 'string') return author.name;
|
|
return '';
|
|
}
|
|
|
|
function normalizeRepositoryUrl(repository) {
|
|
if (typeof repository === 'string') return repository.replace(/\.git$/, '');
|
|
if (repository && typeof repository === 'object' && typeof repository.url === 'string')
|
|
return repository.url.replace(/\.git$/, '');
|
|
return '';
|
|
}
|
|
|
|
function main() {
|
|
for (const filePath of [packageJsonPath, codexPluginPath, claudePluginPath]) {
|
|
if (!fs.existsSync(filePath)) {
|
|
console.error(`Missing required file: ${filePath}`);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
const pkg = readJson(packageJsonPath);
|
|
const codexPlugin = readJson(codexPluginPath);
|
|
const claudePlugin = readJson(claudePluginPath);
|
|
|
|
writeJson(codexPluginPath, syncCodexPlugin(codexPlugin, pkg));
|
|
writeJson(claudePluginPath, syncClaudePlugin(claudePlugin, pkg));
|
|
|
|
console.log('✓ Synced plugin manifests from package.json');
|
|
}
|
|
|
|
main();
|