ga-plugins-cli 0.1.0 → 0.1.2
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/dist/config-patcher.d.ts +20 -50
- package/dist/config-patcher.d.ts.map +1 -1
- package/dist/config-patcher.js +138 -102
- package/dist/config-patcher.js.map +1 -1
- package/dist/index.js +75 -22
- package/dist/index.js.map +1 -1
- package/dist/installer.d.ts +0 -18
- package/dist/installer.d.ts.map +1 -1
- package/dist/installer.js +19 -39
- package/dist/installer.js.map +1 -1
- package/dist/types.d.ts +10 -6
- package/dist/types.d.ts.map +1 -1
- package/dist/uninstaller.d.ts +0 -23
- package/dist/uninstaller.d.ts.map +1 -1
- package/dist/uninstaller.js +22 -68
- package/dist/uninstaller.js.map +1 -1
- package/package.json +3 -2
- package/plugins/go-reviewer/.claude-plugin/plugin.json +12 -0
- package/plugins/go-reviewer/commands/go-review.md +424 -0
- package/plugins/go-reviewer/mcp-servers/go-reviewer-mcp/README.md +236 -0
- package/plugins/go-reviewer/mcp-servers/go-reviewer-mcp/main.go +678 -0
- package/plugins/go-scaffolder/.claude-plugin/plugin.json +12 -0
- package/plugins/go-scaffolder/commands/scaffold-service.md +802 -0
- package/plugins/go-scaffolder/reference-service/.env.example +27 -0
- package/plugins/go-scaffolder/reference-service/Dockerfile +55 -0
- package/plugins/go-scaffolder/reference-service/REFERENCE-SERVICE-NOTICE.md +104 -0
- package/plugins/go-scaffolder/reference-service/cmd/server/main.go +266 -0
- package/plugins/go-scaffolder/reference-service/config/config.go +67 -0
- package/plugins/go-scaffolder/reference-service/go.mod +17 -0
- package/plugins/go-scaffolder/reference-service/internal/domain/booking.go +118 -0
- package/plugins/go-scaffolder/reference-service/internal/handler/booking.go +242 -0
- package/plugins/go-scaffolder/reference-service/internal/handler/booking_test.go +451 -0
- package/plugins/go-scaffolder/reference-service/internal/repository/booking_postgres.go +124 -0
- package/plugins/go-scaffolder/reference-service/internal/usecase/booking.go +181 -0
- package/plugins/go-standards/.claude-plugin/plugin.json +22 -0
- package/plugins/go-standards/commands/go-standards-check.md +232 -0
- package/plugins/go-standards/skills/concurrency.md +336 -0
- package/plugins/go-standards/skills/config.md +267 -0
- package/plugins/go-standards/skills/error-handling.md +286 -0
- package/plugins/go-standards/skills/http-chi.md +390 -0
- package/plugins/go-standards/skills/logging-observability.md +340 -0
- package/plugins/go-standards/skills/naming-and-style.md +315 -0
- package/plugins/go-standards/skills/project-layout.md +313 -0
- package/plugins/go-standards/skills/testing.md +366 -0
- package/plugins/java2go-porter/.claude-plugin/plugin.json +21 -0
- package/plugins/java2go-porter/agents/analyzer.md +232 -0
- package/plugins/java2go-porter/agents/reviewer.md +241 -0
- package/plugins/java2go-porter/agents/test-pairer.md +365 -0
- package/plugins/java2go-porter/agents/translator.md +419 -0
- package/plugins/java2go-porter/commands/port-java-service.md +149 -0
- package/plugins/java2go-porter/skills/idiom-mapping.md +75 -0
- package/plugins/migration-safety/.claude-plugin/plugin.json +20 -0
- package/plugins/migration-safety/commands/gen-characterization-test.md +452 -0
- package/plugins/migration-safety/commands/strangler-plan.md +356 -0
- package/plugins/migration-safety/skills/strangler-fig.md +382 -0
package/dist/installer.js
CHANGED
|
@@ -6,12 +6,9 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.install = install;
|
|
7
7
|
exports.installAll = installAll;
|
|
8
8
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
9
|
const chalk_1 = __importDefault(require("chalk"));
|
|
11
10
|
const config_patcher_js_1 = require("./config-patcher.js");
|
|
12
11
|
const registry_js_1 = require("./registry.js");
|
|
13
|
-
// ─── Versions file helpers ────────────────────────────────────────────────────
|
|
14
|
-
/** Reads the versions tracking file, returning defaults if missing. */
|
|
15
12
|
function readVersions() {
|
|
16
13
|
const versionsPath = (0, config_patcher_js_1.getVersionsFilePath)();
|
|
17
14
|
if (!fs_extra_1.default.existsSync(versionsPath)) {
|
|
@@ -32,7 +29,6 @@ function readVersions() {
|
|
|
32
29
|
};
|
|
33
30
|
}
|
|
34
31
|
}
|
|
35
|
-
/** Writes the versions tracking file to disk. */
|
|
36
32
|
function writeVersions(versions, dryRun) {
|
|
37
33
|
const versionsPath = (0, config_patcher_js_1.getVersionsFilePath)();
|
|
38
34
|
if (dryRun) {
|
|
@@ -41,43 +37,23 @@ function writeVersions(versions, dryRun) {
|
|
|
41
37
|
}
|
|
42
38
|
fs_extra_1.default.outputJSONSync(versionsPath, versions, { spaces: 2 });
|
|
43
39
|
}
|
|
44
|
-
// ─── Prefix helper ────────────────────────────────────────────────────────────
|
|
45
40
|
function prefix(dryRun) {
|
|
46
41
|
return dryRun ? chalk_1.default.yellow('[DRY RUN] ') : '';
|
|
47
42
|
}
|
|
48
|
-
// ─── Core install logic ───────────────────────────────────────────────────────
|
|
49
|
-
/**
|
|
50
|
-
* Installs the given plugin IDs to ~/.claude/plugins/ and registers them in ~/.claude.json.
|
|
51
|
-
*
|
|
52
|
-
* Each plugin:
|
|
53
|
-
* 1. Gets its bundled source path resolved from the npm package
|
|
54
|
-
* 2. Is copied to ~/.claude/plugins/<pluginId>/ (overwrites any existing version)
|
|
55
|
-
* 3. Gets an entry added/updated in ~/.claude.json under the `plugins` array
|
|
56
|
-
* 4. Gets its version recorded in ~/.claude/plugins/.ga-versions.json
|
|
57
|
-
*
|
|
58
|
-
* All actions are printed to stdout. In dry-run mode, no files are written.
|
|
59
|
-
*
|
|
60
|
-
* @throws if a bundled plugin source directory cannot be found
|
|
61
|
-
*/
|
|
62
43
|
async function install(pluginIds, options = {}) {
|
|
63
44
|
const dryRun = options.dryRun ?? false;
|
|
64
45
|
const pluginsDir = (0, config_patcher_js_1.getPluginsDir)();
|
|
65
46
|
const pkgVersion = require('../package.json').version ?? '0.1.0';
|
|
66
47
|
const now = new Date().toISOString();
|
|
67
|
-
// Ensure ~/.claude/plugins/ exists
|
|
68
48
|
if (!dryRun) {
|
|
69
49
|
fs_extra_1.default.ensureDirSync(pluginsDir);
|
|
50
|
+
(0, config_patcher_js_1.ensureMarketplaceRegistered)(pkgVersion);
|
|
70
51
|
}
|
|
71
|
-
|
|
72
|
-
console.log(chalk_1.default.dim(` [DRY RUN] Would ensure directory: ${pluginsDir}`));
|
|
73
|
-
}
|
|
74
|
-
// Load current state
|
|
75
|
-
const config = (0, config_patcher_js_1.readClaudeConfig)();
|
|
52
|
+
let installedPlugins = (0, config_patcher_js_1.readInstalledPlugins)();
|
|
76
53
|
const versions = readVersions();
|
|
77
|
-
let updatedConfig = config;
|
|
78
54
|
for (const pluginId of pluginIds) {
|
|
79
|
-
const srcPath = (0, registry_js_1.getBundledPluginPath)(pluginId);
|
|
80
|
-
const destPath =
|
|
55
|
+
const srcPath = (0, registry_js_1.getBundledPluginPath)(pluginId);
|
|
56
|
+
const destPath = (0, config_patcher_js_1.getPluginCachePath)(pluginId, pkgVersion);
|
|
81
57
|
// ── Copy plugin folder ──────────────────────────────────────────────────
|
|
82
58
|
if (!fs_extra_1.default.existsSync(srcPath)) {
|
|
83
59
|
console.warn(chalk_1.default.yellow(` Warning: bundled plugin source not found for "${pluginId}" at ${srcPath}. ` +
|
|
@@ -88,29 +64,33 @@ async function install(pluginIds, options = {}) {
|
|
|
88
64
|
` ${chalk_1.default.dim('→')} ${destPath}`);
|
|
89
65
|
if (!dryRun) {
|
|
90
66
|
fs_extra_1.default.copySync(srcPath, destPath, { overwrite: true });
|
|
67
|
+
(0, config_patcher_js_1.ensureMarketplacePluginDir)(pluginId, srcPath);
|
|
91
68
|
}
|
|
92
69
|
}
|
|
93
|
-
// ── Register in
|
|
94
|
-
console.log(`${prefix(dryRun)}${chalk_1.default.cyan('register')} ${pluginId} in ${chalk_1.default.dim('
|
|
70
|
+
// ── Register in installed_plugins.json ──────────────────────────────────
|
|
71
|
+
console.log(`${prefix(dryRun)}${chalk_1.default.cyan('register')} ${pluginId} in ${chalk_1.default.dim('installed_plugins.json')}`);
|
|
95
72
|
if (!dryRun) {
|
|
96
|
-
|
|
73
|
+
installedPlugins = (0, config_patcher_js_1.addInstalledPlugin)(installedPlugins, pluginId, {
|
|
74
|
+
scope: 'user',
|
|
75
|
+
installPath: destPath,
|
|
76
|
+
version: pkgVersion,
|
|
77
|
+
installedAt: now,
|
|
78
|
+
lastUpdated: now,
|
|
79
|
+
});
|
|
97
80
|
}
|
|
98
|
-
// ── Update versions record ──────────────────────────────────────────────
|
|
99
81
|
versions.plugins[pluginId] = { version: pkgVersion, installedAt: now };
|
|
100
|
-
|
|
82
|
+
if (!dryRun) {
|
|
83
|
+
(0, config_patcher_js_1.setPluginEnabled)(pluginId, true);
|
|
84
|
+
}
|
|
85
|
+
console.log(chalk_1.default.green(` ✓ ${pluginId} installed and enabled (v${pkgVersion})`));
|
|
101
86
|
}
|
|
102
|
-
// Write updated config and versions atomically (once, after all plugins)
|
|
103
87
|
if (!dryRun) {
|
|
104
|
-
(0, config_patcher_js_1.
|
|
88
|
+
(0, config_patcher_js_1.writeInstalledPlugins)(installedPlugins);
|
|
105
89
|
versions.version = pkgVersion;
|
|
106
90
|
versions.installedAt = now;
|
|
107
91
|
}
|
|
108
92
|
writeVersions(versions, dryRun);
|
|
109
93
|
}
|
|
110
|
-
/**
|
|
111
|
-
* Installs ALL known GA plugins.
|
|
112
|
-
* Convenience wrapper around `install(getAllPluginIds(), options)`.
|
|
113
|
-
*/
|
|
114
94
|
async function installAll(options = {}) {
|
|
115
95
|
return install((0, registry_js_1.getAllPluginIds)(), options);
|
|
116
96
|
}
|
package/dist/installer.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"installer.js","sourceRoot":"","sources":["../src/installer.ts"],"names":[],"mappings":"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"}
|
package/dist/types.d.ts
CHANGED
|
@@ -18,12 +18,16 @@ export interface InstalledVersions {
|
|
|
18
18
|
installedAt: string;
|
|
19
19
|
}>;
|
|
20
20
|
}
|
|
21
|
-
export interface
|
|
22
|
-
|
|
23
|
-
|
|
21
|
+
export interface InstalledPlugin {
|
|
22
|
+
scope: 'user' | 'project';
|
|
23
|
+
installPath: string;
|
|
24
|
+
version: string;
|
|
25
|
+
installedAt: string;
|
|
26
|
+
lastUpdated: string;
|
|
27
|
+
gitCommitSha?: string;
|
|
24
28
|
}
|
|
25
|
-
export interface
|
|
26
|
-
|
|
27
|
-
|
|
29
|
+
export interface InstalledPluginsFile {
|
|
30
|
+
version: 2;
|
|
31
|
+
plugins: Record<string, InstalledPlugin[]>;
|
|
28
32
|
}
|
|
29
33
|
//# sourceMappingURL=types.d.ts.map
|
package/dist/types.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,MAAM,CAAC;IACb,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,WAAW,EAAE,CAAC;CACxB;AAED,MAAM,WAAW,WAAW;IAC1B,EAAE,EAAE,MAAM,CAAC;IACX,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;CACd;AAED,MAAM,WAAW,iBAAiB;IAChC,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,CAAA;KAAE,CAAC,CAAC;CACnE;AAID,MAAM,WAAW,eAAe;IAC9B,KAAK,EAAE,MAAM,GAAG,SAAS,CAAC;IAC1B,WAAW,EAAE,MAAM,CAAC;IACpB,OAAO,EAAE,MAAM,CAAC;IAChB,WAAW,EAAE,MAAM,CAAC;IACpB,WAAW,EAAE,MAAM,CAAC;IACpB,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,MAAM,WAAW,oBAAoB;IACnC,OAAO,EAAE,CAAC,CAAC;IACX,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,eAAe,EAAE,CAAC,CAAC;CAC5C"}
|
package/dist/uninstaller.d.ts
CHANGED
|
@@ -1,32 +1,9 @@
|
|
|
1
1
|
export interface UninstallOptions {
|
|
2
|
-
/** When true, prints what would happen without actually doing it. */
|
|
3
2
|
dryRun?: boolean;
|
|
4
3
|
}
|
|
5
4
|
export interface UninstallAllOptions extends UninstallOptions {
|
|
6
|
-
/** When true, skips the interactive confirmation prompt. */
|
|
7
5
|
skipConfirm?: boolean;
|
|
8
6
|
}
|
|
9
|
-
/**
|
|
10
|
-
* Uninstalls the given plugin IDs from ~/.claude/plugins/ and removes them from ~/.claude.json.
|
|
11
|
-
*
|
|
12
|
-
* For each plugin:
|
|
13
|
-
* - If the plugin folder exists: removes it
|
|
14
|
-
* - If the folder is missing but an entry exists in ~/.claude.json: cleans up the stale entry
|
|
15
|
-
* and prints a warning
|
|
16
|
-
* - Removes the entry from .ga-versions.json
|
|
17
|
-
*
|
|
18
|
-
* In dry-run mode, no files are removed.
|
|
19
|
-
*/
|
|
20
7
|
export declare function uninstall(pluginIds: string[], options?: UninstallOptions): Promise<void>;
|
|
21
|
-
/**
|
|
22
|
-
* Uninstalls ALL installed GA plugins.
|
|
23
|
-
*
|
|
24
|
-
* Discovers installed plugins by:
|
|
25
|
-
* 1. Checking which known plugin IDs have a folder in ~/.claude/plugins/
|
|
26
|
-
* 2. Checking which known plugin IDs have an entry in ~/.claude.json
|
|
27
|
-
* The union of both sets is uninstalled.
|
|
28
|
-
*
|
|
29
|
-
* When `skipConfirm` is false (default), prompts for interactive confirmation.
|
|
30
|
-
*/
|
|
31
8
|
export declare function uninstallAll(options?: UninstallAllOptions): Promise<void>;
|
|
32
9
|
//# sourceMappingURL=uninstaller.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstaller.d.ts","sourceRoot":"","sources":["../src/uninstaller.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"uninstaller.d.ts","sourceRoot":"","sources":["../src/uninstaller.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,gBAAgB;IAC/B,MAAM,CAAC,EAAE,OAAO,CAAC;CAClB;AAED,MAAM,WAAW,mBAAoB,SAAQ,gBAAgB;IAC3D,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAmDD,wBAAsB,SAAS,CAC7B,SAAS,EAAE,MAAM,EAAE,EACnB,OAAO,GAAE,gBAAqB,GAC7B,OAAO,CAAC,IAAI,CAAC,CAgDf;AAED,wBAAsB,YAAY,CAAC,OAAO,GAAE,mBAAwB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyCnF"}
|
package/dist/uninstaller.js
CHANGED
|
@@ -6,12 +6,10 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
6
6
|
exports.uninstall = uninstall;
|
|
7
7
|
exports.uninstallAll = uninstallAll;
|
|
8
8
|
const fs_extra_1 = __importDefault(require("fs-extra"));
|
|
9
|
-
const path_1 = __importDefault(require("path"));
|
|
10
9
|
const readline_1 = __importDefault(require("readline"));
|
|
11
10
|
const chalk_1 = __importDefault(require("chalk"));
|
|
12
11
|
const config_patcher_js_1 = require("./config-patcher.js");
|
|
13
12
|
const registry_js_1 = require("./registry.js");
|
|
14
|
-
// ─── Versions file helpers ────────────────────────────────────────────────────
|
|
15
13
|
function readVersions() {
|
|
16
14
|
const versionsPath = (0, config_patcher_js_1.getVersionsFilePath)();
|
|
17
15
|
if (!fs_extra_1.default.existsSync(versionsPath)) {
|
|
@@ -40,15 +38,9 @@ function writeVersions(versions, dryRun) {
|
|
|
40
38
|
}
|
|
41
39
|
fs_extra_1.default.outputJSONSync(versionsPath, versions, { spaces: 2 });
|
|
42
40
|
}
|
|
43
|
-
// ─── Prefix helper ────────────────────────────────────────────────────────────
|
|
44
41
|
function prefix(dryRun) {
|
|
45
42
|
return dryRun ? chalk_1.default.yellow('[DRY RUN] ') : '';
|
|
46
43
|
}
|
|
47
|
-
// ─── Confirmation prompt ──────────────────────────────────────────────────────
|
|
48
|
-
/**
|
|
49
|
-
* Prompts the user for confirmation on stdin.
|
|
50
|
-
* Returns true if user typed "yes" (case-insensitive).
|
|
51
|
-
*/
|
|
52
44
|
function promptConfirm(message) {
|
|
53
45
|
return new Promise((resolve) => {
|
|
54
46
|
const rl = readline_1.default.createInterface({
|
|
@@ -61,97 +53,59 @@ function promptConfirm(message) {
|
|
|
61
53
|
rl.close();
|
|
62
54
|
resolve(answer.trim().toLowerCase() === 'yes');
|
|
63
55
|
});
|
|
64
|
-
rl.once('close', () => {
|
|
65
|
-
resolve(false);
|
|
66
|
-
});
|
|
56
|
+
rl.once('close', () => { resolve(false); });
|
|
67
57
|
});
|
|
68
58
|
}
|
|
69
|
-
// ─── Core uninstall logic ─────────────────────────────────────────────────────
|
|
70
|
-
/**
|
|
71
|
-
* Uninstalls the given plugin IDs from ~/.claude/plugins/ and removes them from ~/.claude.json.
|
|
72
|
-
*
|
|
73
|
-
* For each plugin:
|
|
74
|
-
* - If the plugin folder exists: removes it
|
|
75
|
-
* - If the folder is missing but an entry exists in ~/.claude.json: cleans up the stale entry
|
|
76
|
-
* and prints a warning
|
|
77
|
-
* - Removes the entry from .ga-versions.json
|
|
78
|
-
*
|
|
79
|
-
* In dry-run mode, no files are removed.
|
|
80
|
-
*/
|
|
81
59
|
async function uninstall(pluginIds, options = {}) {
|
|
82
60
|
const dryRun = options.dryRun ?? false;
|
|
83
|
-
|
|
84
|
-
const config = (0, config_patcher_js_1.readClaudeConfig)();
|
|
61
|
+
let installedPlugins = (0, config_patcher_js_1.readInstalledPlugins)();
|
|
85
62
|
const versions = readVersions();
|
|
86
|
-
let updatedConfig = config;
|
|
87
63
|
for (const pluginId of pluginIds) {
|
|
88
|
-
const
|
|
64
|
+
const entry = (0, config_patcher_js_1.getInstalledEntry)(installedPlugins, pluginId);
|
|
65
|
+
const destPath = entry?.installPath ?? (0, config_patcher_js_1.getPluginCachePath)(pluginId, versions.plugins[pluginId]?.version ?? '0.1.0');
|
|
89
66
|
const folderExists = fs_extra_1.default.existsSync(destPath);
|
|
90
|
-
if (!folderExists) {
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
}
|
|
98
|
-
else {
|
|
99
|
-
console.log(chalk_1.default.dim(` ${pluginId}: not installed (nothing to remove)`));
|
|
100
|
-
continue;
|
|
101
|
-
}
|
|
67
|
+
if (!folderExists && !entry) {
|
|
68
|
+
console.log(chalk_1.default.dim(` ${pluginId}: not installed (nothing to remove)`));
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
if (!folderExists && entry) {
|
|
72
|
+
console.warn(chalk_1.default.yellow(` Warning: plugin folder not found for "${pluginId}" at ${destPath} ` +
|
|
73
|
+
`but a registry entry exists — cleaning up stale entry.`));
|
|
102
74
|
}
|
|
103
75
|
else {
|
|
104
|
-
// ── Remove plugin folder ──────────────────────────────────────────────
|
|
105
76
|
console.log(`${prefix(dryRun)}${chalk_1.default.red('remove')} ${destPath}`);
|
|
106
77
|
if (!dryRun) {
|
|
107
78
|
fs_extra_1.default.removeSync(destPath);
|
|
79
|
+
(0, config_patcher_js_1.removeMarketplacePluginDir)(pluginId);
|
|
108
80
|
}
|
|
109
81
|
}
|
|
110
|
-
|
|
111
|
-
console.log(`${prefix(dryRun)}${chalk_1.default.red('deregister')} ${pluginId} from ${chalk_1.default.dim('~/.claude.json')}`);
|
|
82
|
+
console.log(`${prefix(dryRun)}${chalk_1.default.red('deregister')} ${pluginId} from ${chalk_1.default.dim('installed_plugins.json')}`);
|
|
112
83
|
if (!dryRun) {
|
|
113
|
-
|
|
84
|
+
installedPlugins = (0, config_patcher_js_1.removeInstalledPlugin)(installedPlugins, pluginId);
|
|
85
|
+
(0, config_patcher_js_1.setPluginEnabled)(pluginId, false);
|
|
114
86
|
}
|
|
115
|
-
// ── Remove from versions record ───────────────────────────────────────
|
|
116
87
|
delete versions.plugins[pluginId];
|
|
117
88
|
console.log(chalk_1.default.green(` ✓ ${pluginId} uninstalled`));
|
|
118
89
|
}
|
|
119
|
-
// Write updated config and versions once, after all plugins
|
|
120
90
|
if (!dryRun) {
|
|
121
|
-
(0, config_patcher_js_1.
|
|
91
|
+
(0, config_patcher_js_1.writeInstalledPlugins)(installedPlugins);
|
|
122
92
|
}
|
|
123
93
|
writeVersions(versions, dryRun);
|
|
124
94
|
}
|
|
125
|
-
/**
|
|
126
|
-
* Uninstalls ALL installed GA plugins.
|
|
127
|
-
*
|
|
128
|
-
* Discovers installed plugins by:
|
|
129
|
-
* 1. Checking which known plugin IDs have a folder in ~/.claude/plugins/
|
|
130
|
-
* 2. Checking which known plugin IDs have an entry in ~/.claude.json
|
|
131
|
-
* The union of both sets is uninstalled.
|
|
132
|
-
*
|
|
133
|
-
* When `skipConfirm` is false (default), prompts for interactive confirmation.
|
|
134
|
-
*/
|
|
135
95
|
async function uninstallAll(options = {}) {
|
|
136
96
|
const dryRun = options.dryRun ?? false;
|
|
137
97
|
const skipConfirm = options.skipConfirm ?? false;
|
|
138
|
-
|
|
139
|
-
const pluginsDir = (0, config_patcher_js_1.getPluginsDir)();
|
|
140
|
-
const config = (0, config_patcher_js_1.readClaudeConfig)();
|
|
98
|
+
const installedPlugins = (0, config_patcher_js_1.readInstalledPlugins)();
|
|
141
99
|
const allKnownIds = (0, registry_js_1.getAllPluginIds)();
|
|
100
|
+
const versions = readVersions();
|
|
142
101
|
const installedIds = new Set();
|
|
143
|
-
// Check filesystem
|
|
144
102
|
for (const id of allKnownIds) {
|
|
145
|
-
if (
|
|
103
|
+
if ((0, config_patcher_js_1.getInstalledEntry)(installedPlugins, id)) {
|
|
146
104
|
installedIds.add(id);
|
|
147
105
|
}
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
for (const entry of config.plugins) {
|
|
152
|
-
if ((0, registry_js_1.validatePluginId)(entry.id)) {
|
|
153
|
-
installedIds.add(entry.id);
|
|
154
|
-
}
|
|
106
|
+
// Also catch entries tracked only in versions file
|
|
107
|
+
if (versions.plugins[id]) {
|
|
108
|
+
installedIds.add(id);
|
|
155
109
|
}
|
|
156
110
|
}
|
|
157
111
|
if (installedIds.size === 0) {
|
package/dist/uninstaller.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"uninstaller.js","sourceRoot":"","sources":["../src/uninstaller.ts"],"names":[],"mappings":";;;;;
|
|
1
|
+
{"version":3,"file":"uninstaller.js","sourceRoot":"","sources":["../src/uninstaller.ts"],"names":[],"mappings":";;;;;AA0EA,8BAmDC;AAED,oCAyCC;AAxKD,wDAA0B;AAE1B,wDAAgC;AAChC,kDAA0B;AAC1B,2DAS6B;AAC7B,+CAAkE;AAWlE,SAAS,YAAY;IACnB,MAAM,YAAY,GAAG,IAAA,uCAAmB,GAAE,CAAC;IAC3C,IAAI,CAAC,kBAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;QACjC,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAiB;YACrD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;IACD,IAAI,CAAC;QACH,OAAO,kBAAE,CAAC,YAAY,CAAC,YAAY,CAAsB,CAAC;IAC5D,CAAC;IAAC,MAAM,CAAC;QACP,OAAO;YACL,OAAO,EAAE,OAAO,CAAC,iBAAiB,CAAC,CAAC,OAAiB;YACrD,WAAW,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACrC,OAAO,EAAE,EAAE;SACZ,CAAC;IACJ,CAAC;AACH,CAAC;AAED,SAAS,aAAa,CAAC,QAA2B,EAAE,MAAe;IACjE,MAAM,YAAY,GAAG,IAAA,uCAAmB,GAAE,CAAC;IAC3C,IAAI,MAAM,EAAE,CAAC;QACX,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,uCAAuC,YAAY,EAAE,CAAC,CAAC,CAAC;QAC9E,OAAO;IACT,CAAC;IACD,kBAAE,CAAC,cAAc,CAAC,YAAY,EAAE,QAAQ,EAAE,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS,MAAM,CAAC,MAAe;IAC7B,OAAO,MAAM,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;AAClD,CAAC;AAED,SAAS,aAAa,CAAC,OAAe;IACpC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC7B,MAAM,EAAE,GAAG,kBAAQ,CAAC,eAAe,CAAC;YAClC,KAAK,EAAE,OAAO,CAAC,KAAK;YACpB,MAAM,EAAE,OAAO,CAAC,MAAM;YACtB,QAAQ,EAAE,KAAK;SAChB,CAAC,CAAC;QACH,OAAO,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAC9B,EAAE,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,MAAM,EAAE,EAAE;YACzB,EAAE,CAAC,KAAK,EAAE,CAAC;YACX,OAAO,CAAC,MAAM,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,KAAK,KAAK,CAAC,CAAC;QACjD,CAAC,CAAC,CAAC;QACH,EAAE,CAAC,IAAI,CAAC,OAAO,EAAE,GAAG,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC9C,CAAC,CAAC,CAAC;AACL,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,SAAmB,EACnB,UAA4B,EAAE;IAE9B,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IAEvC,IAAI,gBAAgB,GAAG,IAAA,wCAAoB,GAAE,CAAC;IAC9C,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,KAAK,MAAM,QAAQ,IAAI,SAAS,EAAE,CAAC;QACjC,MAAM,KAAK,GAAG,IAAA,qCAAiB,EAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;QAC5D,MAAM,QAAQ,GAAG,KAAK,EAAE,WAAW,IAAI,IAAA,sCAAkB,EAAC,QAAQ,EAAE,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,OAAO,IAAI,OAAO,CAAC,CAAC;QACpH,MAAM,YAAY,GAAG,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAE7C,IAAI,CAAC,YAAY,IAAI,CAAC,KAAK,EAAE,CAAC;YAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,KAAK,QAAQ,qCAAqC,CAAC,CAAC,CAAC;YAC3E,SAAS;QACX,CAAC;QAED,IAAI,CAAC,YAAY,IAAI,KAAK,EAAE,CAAC;YAC3B,OAAO,CAAC,IAAI,CACV,eAAK,CAAC,MAAM,CACV,2CAA2C,QAAQ,QAAQ,QAAQ,GAAG;gBACtE,wDAAwD,CACzD,CACF,CAAC;QACJ,CAAC;aAAM,CAAC;YACN,OAAO,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,IAAI,QAAQ,EAAE,CAAC,CAAC;YACnE,IAAI,CAAC,MAAM,EAAE,CAAC;gBACZ,kBAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;gBACxB,IAAA,8CAA0B,EAAC,QAAQ,CAAC,CAAC;YACvC,CAAC;QACH,CAAC;QAED,OAAO,CAAC,GAAG,CACT,GAAG,MAAM,CAAC,MAAM,CAAC,GAAG,eAAK,CAAC,GAAG,CAAC,YAAY,CAAC,IAAI,QAAQ,SAAS,eAAK,CAAC,GAAG,CAAC,wBAAwB,CAAC,EAAE,CACtG,CAAC;QACF,IAAI,CAAC,MAAM,EAAE,CAAC;YACZ,gBAAgB,GAAG,IAAA,yCAAqB,EAAC,gBAAgB,EAAE,QAAQ,CAAC,CAAC;YACrE,IAAA,oCAAgB,EAAC,QAAQ,EAAE,KAAK,CAAC,CAAC;QACpC,CAAC;QAED,OAAO,QAAQ,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QAElC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,KAAK,CAAC,OAAO,QAAQ,cAAc,CAAC,CAAC,CAAC;IAC1D,CAAC;IAED,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,IAAA,yCAAqB,EAAC,gBAAgB,CAAC,CAAC;IAC1C,CAAC;IACD,aAAa,CAAC,QAAQ,EAAE,MAAM,CAAC,CAAC;AAClC,CAAC;AAEM,KAAK,UAAU,YAAY,CAAC,UAA+B,EAAE;IAClE,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAC;IACvC,MAAM,WAAW,GAAG,OAAO,CAAC,WAAW,IAAI,KAAK,CAAC;IAEjD,MAAM,gBAAgB,GAAG,IAAA,wCAAoB,GAAE,CAAC;IAChD,MAAM,WAAW,GAAG,IAAA,6BAAe,GAAE,CAAC;IACtC,MAAM,QAAQ,GAAG,YAAY,EAAE,CAAC;IAEhC,MAAM,YAAY,GAAG,IAAI,GAAG,EAAU,CAAC;IAEvC,KAAK,MAAM,EAAE,IAAI,WAAW,EAAE,CAAC;QAC7B,IAAI,IAAA,qCAAiB,EAAC,gBAAgB,EAAE,EAAE,CAAC,EAAE,CAAC;YAC5C,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;QACD,mDAAmD;QACnD,IAAI,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC,EAAE,CAAC;YACzB,YAAY,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACvB,CAAC;IACH,CAAC;IAED,IAAI,YAAY,CAAC,IAAI,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,wCAAwC,CAAC,CAAC,CAAC;QACjE,OAAO;IACT,CAAC;IAED,MAAM,MAAM,GAAG,CAAC,GAAG,YAAY,CAAC,CAAC;IAEjC,IAAI,CAAC,WAAW,IAAI,CAAC,MAAM,EAAE,CAAC;QAC5B,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,MAAM,CAAC,qCAAqC,MAAM,CAAC,MAAM,IAAI,CAAC,CAAC,CAAC;QAClF,KAAK,MAAM,EAAE,IAAI,MAAM,EAAE,CAAC;YACxB,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;QACtC,CAAC;QAED,MAAM,SAAS,GAAG,MAAM,aAAa,CAAC,eAAK,CAAC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC;QACjF,IAAI,CAAC,SAAS,EAAE,CAAC;YACf,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAC;YAC5D,OAAO;QACT,CAAC;IACH,CAAC;IAED,MAAM,SAAS,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC;AACtC,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,13 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "ga-plugins-cli",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "CLI to install GA Migration Claude Code plugins globally at user level (~/.claude/plugins/)",
|
|
5
5
|
"bin": {
|
|
6
6
|
"ga-plugins-cli": "./dist/index.js"
|
|
7
7
|
},
|
|
8
8
|
"main": "./dist/index.js",
|
|
9
9
|
"scripts": {
|
|
10
|
-
"
|
|
10
|
+
"copy-plugins": "node -e \"const f=require('fs-extra'),p=require('path');f.copySync(p.join(process.cwd(),'../plugins'),p.join(process.cwd(),'plugins'),{overwrite:true});console.log('plugins copied')\"",
|
|
11
|
+
"build": "npm run copy-plugins && tsc",
|
|
11
12
|
"dev": "ts-node src/index.ts",
|
|
12
13
|
"prepublishOnly": "npm run build",
|
|
13
14
|
"lint": "eslint src/**/*.ts"
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "go-reviewer",
|
|
3
|
+
"version": "0.1.0",
|
|
4
|
+
"description": "Incremental Go code review (new findings only, diff-based) + auto-fix in isolated git worktree. Integrates external linters via MCP shim.",
|
|
5
|
+
"commands": [
|
|
6
|
+
{
|
|
7
|
+
"name": "go-review",
|
|
8
|
+
"description": "Review Go code changes — incremental (new findings only) or full audit with auto-fix in isolated worktree",
|
|
9
|
+
"path": "commands/go-review.md"
|
|
10
|
+
}
|
|
11
|
+
]
|
|
12
|
+
}
|