@ctxkit/cli 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.
- package/dist/commands/apply.d.ts +3 -0
- package/dist/commands/apply.d.ts.map +1 -0
- package/dist/commands/apply.js +45 -0
- package/dist/commands/apply.js.map +1 -0
- package/dist/commands/bootstrap-cmd.d.ts +3 -0
- package/dist/commands/bootstrap-cmd.d.ts.map +1 -0
- package/dist/commands/bootstrap-cmd.js +104 -0
- package/dist/commands/bootstrap-cmd.js.map +1 -0
- package/dist/commands/codex.d.ts +3 -0
- package/dist/commands/codex.d.ts.map +1 -0
- package/dist/commands/codex.js +64 -0
- package/dist/commands/codex.js.map +1 -0
- package/dist/commands/conflicts-cmd.d.ts +3 -0
- package/dist/commands/conflicts-cmd.d.ts.map +1 -0
- package/dist/commands/conflicts-cmd.js +178 -0
- package/dist/commands/conflicts-cmd.js.map +1 -0
- package/dist/commands/daemon.d.ts +4 -0
- package/dist/commands/daemon.d.ts.map +1 -0
- package/dist/commands/daemon.js +107 -0
- package/dist/commands/daemon.js.map +1 -0
- package/dist/commands/drift.d.ts +3 -0
- package/dist/commands/drift.d.ts.map +1 -0
- package/dist/commands/drift.js +65 -0
- package/dist/commands/drift.js.map +1 -0
- package/dist/commands/history-cmd.d.ts +3 -0
- package/dist/commands/history-cmd.d.ts.map +1 -0
- package/dist/commands/history-cmd.js +100 -0
- package/dist/commands/history-cmd.js.map +1 -0
- package/dist/commands/hooks-cmd.d.ts +3 -0
- package/dist/commands/hooks-cmd.d.ts.map +1 -0
- package/dist/commands/hooks-cmd.js +98 -0
- package/dist/commands/hooks-cmd.js.map +1 -0
- package/dist/commands/index-cmd.d.ts +3 -0
- package/dist/commands/index-cmd.d.ts.map +1 -0
- package/dist/commands/index-cmd.js +112 -0
- package/dist/commands/index-cmd.js.map +1 -0
- package/dist/commands/init.d.ts +3 -0
- package/dist/commands/init.d.ts.map +1 -0
- package/dist/commands/init.js +158 -0
- package/dist/commands/init.js.map +1 -0
- package/dist/commands/inject.d.ts +3 -0
- package/dist/commands/inject.d.ts.map +1 -0
- package/dist/commands/inject.js +68 -0
- package/dist/commands/inject.js.map +1 -0
- package/dist/commands/migrate-cmd.d.ts +3 -0
- package/dist/commands/migrate-cmd.d.ts.map +1 -0
- package/dist/commands/migrate-cmd.js +132 -0
- package/dist/commands/migrate-cmd.js.map +1 -0
- package/dist/commands/plugin.d.ts +3 -0
- package/dist/commands/plugin.d.ts.map +1 -0
- package/dist/commands/plugin.js +327 -0
- package/dist/commands/plugin.js.map +1 -0
- package/dist/commands/pr-context-cmd.d.ts +3 -0
- package/dist/commands/pr-context-cmd.d.ts.map +1 -0
- package/dist/commands/pr-context-cmd.js +128 -0
- package/dist/commands/pr-context-cmd.js.map +1 -0
- package/dist/commands/propose.d.ts +3 -0
- package/dist/commands/propose.d.ts.map +1 -0
- package/dist/commands/propose.js +109 -0
- package/dist/commands/propose.js.map +1 -0
- package/dist/commands/run.d.ts +3 -0
- package/dist/commands/run.d.ts.map +1 -0
- package/dist/commands/run.js +133 -0
- package/dist/commands/run.js.map +1 -0
- package/dist/commands/sessions.d.ts +3 -0
- package/dist/commands/sessions.d.ts.map +1 -0
- package/dist/commands/sessions.js +93 -0
- package/dist/commands/sessions.js.map +1 -0
- package/dist/commands/speckit-cmd.d.ts +3 -0
- package/dist/commands/speckit-cmd.d.ts.map +1 -0
- package/dist/commands/speckit-cmd.js +196 -0
- package/dist/commands/speckit-cmd.js.map +1 -0
- package/dist/commands/validate.d.ts +3 -0
- package/dist/commands/validate.d.ts.map +1 -0
- package/dist/commands/validate.js +75 -0
- package/dist/commands/validate.js.map +1 -0
- package/dist/index.d.ts +3 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +49 -0
- package/dist/index.js.map +1 -0
- package/dist/services/agents-md.d.ts +34 -0
- package/dist/services/agents-md.d.ts.map +1 -0
- package/dist/services/agents-md.js +248 -0
- package/dist/services/agents-md.js.map +1 -0
- package/package.json +45 -0
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { buildContextPack } from '@ctxkit/core';
|
|
3
|
+
import { existsSync } from 'node:fs';
|
|
4
|
+
import { resolve, join, dirname } from 'node:path';
|
|
5
|
+
export const injectCommand = new Command('inject')
|
|
6
|
+
.description('Build and display a Context Pack for a request')
|
|
7
|
+
.requiredOption('--request <text>', 'The request text to build context for')
|
|
8
|
+
.option('--cwd <path>', 'Working directory', process.cwd())
|
|
9
|
+
.option('--budget <tokens>', 'Token budget', '4000')
|
|
10
|
+
.option('--preview', 'Preview mode (no event recorded)', false)
|
|
11
|
+
.option('--json', 'Output as JSON', false)
|
|
12
|
+
.action((options) => {
|
|
13
|
+
const workingDir = resolve(options.cwd);
|
|
14
|
+
const repoRoot = findRepoRoot(workingDir);
|
|
15
|
+
const budgetTokens = parseInt(options.budget, 10);
|
|
16
|
+
if (isNaN(budgetTokens) || budgetTokens <= 0) {
|
|
17
|
+
console.error('Error: Invalid budget: must be a positive number');
|
|
18
|
+
process.exit(1);
|
|
19
|
+
}
|
|
20
|
+
const result = buildContextPack({
|
|
21
|
+
workingDir,
|
|
22
|
+
repoRoot,
|
|
23
|
+
requestText: options.request,
|
|
24
|
+
budgetTokens,
|
|
25
|
+
});
|
|
26
|
+
const pack = result.pack;
|
|
27
|
+
if (options.json) {
|
|
28
|
+
console.log(JSON.stringify(result, null, 2));
|
|
29
|
+
return;
|
|
30
|
+
}
|
|
31
|
+
// Format output
|
|
32
|
+
console.log(`\nContext Pack (${pack.total_tokens} / ${pack.budget_tokens} tokens)`);
|
|
33
|
+
console.log('━'.repeat(40));
|
|
34
|
+
if (pack.items.length > 0) {
|
|
35
|
+
console.log(`\nIncluded (${pack.items.length} items):`);
|
|
36
|
+
for (let i = 0; i < pack.items.length; i++) {
|
|
37
|
+
const item = pack.items[i];
|
|
38
|
+
const reasons = item.reason_codes.length > 0
|
|
39
|
+
? `[${item.reason_codes.join(', ')}]`
|
|
40
|
+
: '';
|
|
41
|
+
console.log(` ${i + 1}. ${reasons.padEnd(25)} ${item.source} → ${item.section}/${item.entry_id} (${item.tokens} tok)`);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
if (pack.omitted.length > 0) {
|
|
45
|
+
console.log(`\nOmitted (${pack.omitted.length} items):`);
|
|
46
|
+
for (const item of pack.omitted) {
|
|
47
|
+
console.log(` - ${item.source} → ${item.section} (score: ${item.score}, reason: ${item.reason})`);
|
|
48
|
+
}
|
|
49
|
+
}
|
|
50
|
+
if (result.deep_read) {
|
|
51
|
+
console.log(`\nDeep Read: ${result.deep_read.rationale}`);
|
|
52
|
+
}
|
|
53
|
+
console.log();
|
|
54
|
+
});
|
|
55
|
+
function findRepoRoot(startDir) {
|
|
56
|
+
let current = startDir;
|
|
57
|
+
while (true) {
|
|
58
|
+
if (existsSync(join(current, '.git'))) {
|
|
59
|
+
return current;
|
|
60
|
+
}
|
|
61
|
+
const parent = dirname(current);
|
|
62
|
+
if (parent === current) {
|
|
63
|
+
return startDir;
|
|
64
|
+
}
|
|
65
|
+
current = parent;
|
|
66
|
+
}
|
|
67
|
+
}
|
|
68
|
+
//# sourceMappingURL=inject.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"inject.js","sourceRoot":"","sources":["../../src/commands/inject.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/migrate-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,eAAO,MAAM,cAAc,SA8GvB,CAAC"}
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { readFileSync, writeFileSync, readdirSync, statSync } from 'node:fs';
|
|
3
|
+
import { join, relative } from 'node:path';
|
|
4
|
+
import { execSync } from 'node:child_process';
|
|
5
|
+
import { parseCtxFile, serializeCtxFile, computeChecksum, generateIndex, writeIndex } from '@ctxkit/core';
|
|
6
|
+
export const migrateCommand = new Command('migrate')
|
|
7
|
+
.description('Migrate v1 repository to v2')
|
|
8
|
+
.option('--dry-run', 'Preview changes without writing')
|
|
9
|
+
.option('--json', 'Output as JSON')
|
|
10
|
+
.action(async (options) => {
|
|
11
|
+
try {
|
|
12
|
+
let repoRoot;
|
|
13
|
+
try {
|
|
14
|
+
repoRoot = execSync('git rev-parse --show-toplevel', {
|
|
15
|
+
encoding: 'utf-8',
|
|
16
|
+
timeout: 3000,
|
|
17
|
+
stdio: ['pipe', 'pipe', 'pipe'],
|
|
18
|
+
}).trim();
|
|
19
|
+
}
|
|
20
|
+
catch {
|
|
21
|
+
console.error('Error: Not a git repository');
|
|
22
|
+
process.exit(1);
|
|
23
|
+
return;
|
|
24
|
+
}
|
|
25
|
+
const ctxFiles = findCtxFiles(repoRoot);
|
|
26
|
+
if (ctxFiles.length === 0) {
|
|
27
|
+
if (options.json) {
|
|
28
|
+
console.log(JSON.stringify({ message: 'No .ctx files found to migrate' }));
|
|
29
|
+
}
|
|
30
|
+
else {
|
|
31
|
+
console.log('No .ctx files found to migrate.');
|
|
32
|
+
}
|
|
33
|
+
return;
|
|
34
|
+
}
|
|
35
|
+
const results = [];
|
|
36
|
+
for (const ctxPath of ctxFiles) {
|
|
37
|
+
const content = readFileSync(ctxPath, 'utf-8');
|
|
38
|
+
const { ctx } = parseCtxFile(content);
|
|
39
|
+
const relPath = relative(repoRoot, ctxPath);
|
|
40
|
+
// v1→v2 migration: keep version as 1, initialize _history, compute checksum
|
|
41
|
+
if (!ctx._history) {
|
|
42
|
+
const checksum = computeChecksum(ctx);
|
|
43
|
+
if (!options.dryRun) {
|
|
44
|
+
const migrated = {
|
|
45
|
+
...ctx,
|
|
46
|
+
_history: [],
|
|
47
|
+
};
|
|
48
|
+
writeFileSync(ctxPath, serializeCtxFile(migrated), 'utf-8');
|
|
49
|
+
}
|
|
50
|
+
results.push({
|
|
51
|
+
path: relPath,
|
|
52
|
+
version: ctx.version,
|
|
53
|
+
migrated: true,
|
|
54
|
+
checksum,
|
|
55
|
+
});
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
results.push({
|
|
59
|
+
path: relPath,
|
|
60
|
+
version: ctx.version,
|
|
61
|
+
migrated: false,
|
|
62
|
+
});
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
// Generate .ctxl index
|
|
66
|
+
if (!options.dryRun) {
|
|
67
|
+
const index = generateIndex(repoRoot);
|
|
68
|
+
writeIndex(repoRoot, index);
|
|
69
|
+
}
|
|
70
|
+
const migratedCount = results.filter((r) => r.migrated).length;
|
|
71
|
+
if (options.json) {
|
|
72
|
+
console.log(JSON.stringify({
|
|
73
|
+
files_processed: results.length,
|
|
74
|
+
files_migrated: migratedCount,
|
|
75
|
+
files_already_v2: results.length - migratedCount,
|
|
76
|
+
index_generated: !options.dryRun,
|
|
77
|
+
dry_run: !!options.dryRun,
|
|
78
|
+
details: results,
|
|
79
|
+
}, null, 2));
|
|
80
|
+
}
|
|
81
|
+
else {
|
|
82
|
+
console.log(`Migration ${options.dryRun ? '(dry-run) ' : ''}complete:`);
|
|
83
|
+
console.log(` Files processed: ${results.length}`);
|
|
84
|
+
console.log(` Files migrated: ${migratedCount}`);
|
|
85
|
+
console.log(` Already v2: ${results.length - migratedCount}`);
|
|
86
|
+
if (!options.dryRun) {
|
|
87
|
+
console.log(' .ctxl index: generated');
|
|
88
|
+
}
|
|
89
|
+
if (migratedCount > 0) {
|
|
90
|
+
console.log('\nMigrated files:');
|
|
91
|
+
for (const r of results.filter((r) => r.migrated)) {
|
|
92
|
+
console.log(` - ${r.path} (v${r.version})`);
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
catch (error) {
|
|
98
|
+
const message = error instanceof Error ? error.message : String(error);
|
|
99
|
+
if (options.json) {
|
|
100
|
+
console.log(JSON.stringify({ error: message }));
|
|
101
|
+
}
|
|
102
|
+
else {
|
|
103
|
+
console.error(`Error: ${message}`);
|
|
104
|
+
}
|
|
105
|
+
process.exit(1);
|
|
106
|
+
}
|
|
107
|
+
});
|
|
108
|
+
function findCtxFiles(dir) {
|
|
109
|
+
const files = [];
|
|
110
|
+
function walk(d) {
|
|
111
|
+
try {
|
|
112
|
+
const entries = readdirSync(d);
|
|
113
|
+
for (const entry of entries) {
|
|
114
|
+
if (entry === 'node_modules' || entry === '.git' || entry === 'dist' || entry === 'build')
|
|
115
|
+
continue;
|
|
116
|
+
const fullPath = join(d, entry);
|
|
117
|
+
try {
|
|
118
|
+
const stat = statSync(fullPath);
|
|
119
|
+
if (stat.isDirectory())
|
|
120
|
+
walk(fullPath);
|
|
121
|
+
else if (entry === '.ctx')
|
|
122
|
+
files.push(fullPath);
|
|
123
|
+
}
|
|
124
|
+
catch { /* skip */ }
|
|
125
|
+
}
|
|
126
|
+
}
|
|
127
|
+
catch { /* skip */ }
|
|
128
|
+
}
|
|
129
|
+
walk(dir);
|
|
130
|
+
return files;
|
|
131
|
+
}
|
|
132
|
+
//# sourceMappingURL=migrate-cmd.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"migrate-cmd.js","sourceRoot":"","sources":["../../src/commands/migrate-cmd.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.d.ts","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAepC,eAAO,MAAM,aAAa,SAC4B,CAAC"}
|
|
@@ -0,0 +1,327 @@
|
|
|
1
|
+
import { Command } from 'commander';
|
|
2
|
+
import { execSync, spawnSync } from 'node:child_process';
|
|
3
|
+
import { cpSync, existsSync, mkdirSync, readFileSync, rmSync, writeFileSync } from 'node:fs';
|
|
4
|
+
import { dirname, join, resolve } from 'node:path';
|
|
5
|
+
import { fileURLToPath } from 'node:url';
|
|
6
|
+
const __filename = fileURLToPath(import.meta.url);
|
|
7
|
+
const __dirname = dirname(__filename);
|
|
8
|
+
const HOME = process.env.HOME || process.env.USERPROFILE || '~';
|
|
9
|
+
const PLUGIN_ID = 'ctxkit@ctxl';
|
|
10
|
+
const MARKETPLACE_NAME = 'ctxl';
|
|
11
|
+
const PLUGIN_NAME = 'ctxkit';
|
|
12
|
+
const PLUGINS_DIR = join(HOME, '.claude', 'plugins');
|
|
13
|
+
export const pluginCommand = new Command('plugin')
|
|
14
|
+
.description('Manage the Claude Code ctxkit plugin');
|
|
15
|
+
/**
|
|
16
|
+
* Locate the @ctxkit/claude-plugin package directory (has .claude-plugin/plugin.json).
|
|
17
|
+
*/
|
|
18
|
+
function resolvePluginPkg() {
|
|
19
|
+
// CLI at <root>/@ctxkit/cli/dist/commands/plugin.js (global npm)
|
|
20
|
+
// or <root>/packages/cli/dist/commands/plugin.js (monorepo)
|
|
21
|
+
const relative = resolve(__dirname, '../../../claude-plugin');
|
|
22
|
+
if (existsSync(join(relative, '.claude-plugin', 'plugin.json'))) {
|
|
23
|
+
return relative;
|
|
24
|
+
}
|
|
25
|
+
try {
|
|
26
|
+
const globalRoot = execSync('npm root -g', { encoding: 'utf-8', stdio: 'pipe' }).trim();
|
|
27
|
+
const globalPlugin = join(globalRoot, '@ctxl', 'claude-plugin');
|
|
28
|
+
if (existsSync(join(globalPlugin, '.claude-plugin', 'plugin.json'))) {
|
|
29
|
+
return globalPlugin;
|
|
30
|
+
}
|
|
31
|
+
}
|
|
32
|
+
catch {
|
|
33
|
+
// npm not available
|
|
34
|
+
}
|
|
35
|
+
return null;
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* Walk up from the CLI binary to find a git repo root that contains
|
|
39
|
+
* .claude-plugin/marketplace.json. Returns null for global npm installs.
|
|
40
|
+
*/
|
|
41
|
+
function resolveMarketplaceRoot() {
|
|
42
|
+
let dir = resolve(__dirname);
|
|
43
|
+
for (let i = 0; i < 8; i++) {
|
|
44
|
+
if (existsSync(join(dir, '.claude-plugin', 'marketplace.json')) &&
|
|
45
|
+
existsSync(join(dir, '.git'))) {
|
|
46
|
+
return dir;
|
|
47
|
+
}
|
|
48
|
+
const parent = dirname(dir);
|
|
49
|
+
if (parent === dir)
|
|
50
|
+
break;
|
|
51
|
+
dir = parent;
|
|
52
|
+
}
|
|
53
|
+
return null;
|
|
54
|
+
}
|
|
55
|
+
function hasClaudeCli() {
|
|
56
|
+
try {
|
|
57
|
+
execSync('claude --version', { encoding: 'utf-8', stdio: 'pipe' });
|
|
58
|
+
return true;
|
|
59
|
+
}
|
|
60
|
+
catch {
|
|
61
|
+
return false;
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
function readJsonFile(filePath) {
|
|
65
|
+
if (!existsSync(filePath))
|
|
66
|
+
return null;
|
|
67
|
+
try {
|
|
68
|
+
return JSON.parse(readFileSync(filePath, 'utf-8'));
|
|
69
|
+
}
|
|
70
|
+
catch {
|
|
71
|
+
return null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
function writeJsonFile(filePath, data) {
|
|
75
|
+
mkdirSync(dirname(filePath), { recursive: true });
|
|
76
|
+
writeFileSync(filePath, JSON.stringify(data, null, 2) + '\n');
|
|
77
|
+
}
|
|
78
|
+
function claudeExec(args) {
|
|
79
|
+
const result = spawnSync('claude', args.split(' '), {
|
|
80
|
+
encoding: 'utf-8',
|
|
81
|
+
stdio: 'pipe',
|
|
82
|
+
shell: true,
|
|
83
|
+
});
|
|
84
|
+
return result.status === 0;
|
|
85
|
+
}
|
|
86
|
+
function settingsFilePath(scope) {
|
|
87
|
+
return scope === 'project'
|
|
88
|
+
? join(process.cwd(), '.claude', 'settings.json')
|
|
89
|
+
: join(HOME, '.claude', 'settings.json');
|
|
90
|
+
}
|
|
91
|
+
/**
|
|
92
|
+
* Read the plugin version from plugin package's package.json.
|
|
93
|
+
*/
|
|
94
|
+
function getPluginVersion(pluginDir) {
|
|
95
|
+
const pkgJson = readJsonFile(join(pluginDir, 'package.json'));
|
|
96
|
+
return pkgJson?.version || '0.1.0';
|
|
97
|
+
}
|
|
98
|
+
/**
|
|
99
|
+
* Directly install the plugin by copying files to the cache and updating
|
|
100
|
+
* installed_plugins.json + settings.json. This bypasses the marketplace
|
|
101
|
+
* system when `claude plugin marketplace add` fails (e.g. global npm installs
|
|
102
|
+
* where the plugin package is not in a git repo root).
|
|
103
|
+
*/
|
|
104
|
+
function installPluginDirect(pluginDir, scope) {
|
|
105
|
+
const version = getPluginVersion(pluginDir);
|
|
106
|
+
const cachePath = join(PLUGINS_DIR, 'cache', MARKETPLACE_NAME, PLUGIN_NAME, version);
|
|
107
|
+
// Copy plugin files to cache
|
|
108
|
+
if (existsSync(cachePath)) {
|
|
109
|
+
rmSync(cachePath, { recursive: true });
|
|
110
|
+
}
|
|
111
|
+
mkdirSync(dirname(cachePath), { recursive: true });
|
|
112
|
+
cpSync(pluginDir, cachePath, { recursive: true });
|
|
113
|
+
// Update installed_plugins.json
|
|
114
|
+
const installedPath = join(PLUGINS_DIR, 'installed_plugins.json');
|
|
115
|
+
const installed = (readJsonFile(installedPath) ?? { version: 2, plugins: {} });
|
|
116
|
+
if (!installed.plugins || typeof installed.plugins !== 'object') {
|
|
117
|
+
installed.plugins = {};
|
|
118
|
+
}
|
|
119
|
+
const plugins = installed.plugins;
|
|
120
|
+
const entry = {
|
|
121
|
+
scope,
|
|
122
|
+
...(scope === 'project' ? { projectPath: process.cwd() } : {}),
|
|
123
|
+
installPath: cachePath,
|
|
124
|
+
version,
|
|
125
|
+
installedAt: new Date().toISOString(),
|
|
126
|
+
lastUpdated: new Date().toISOString(),
|
|
127
|
+
};
|
|
128
|
+
// Replace existing entries for same scope or add new
|
|
129
|
+
const existing = Array.isArray(plugins[PLUGIN_ID]) ? plugins[PLUGIN_ID] : [];
|
|
130
|
+
const filtered = existing.filter((e) => e.scope !== scope);
|
|
131
|
+
filtered.push(entry);
|
|
132
|
+
plugins[PLUGIN_ID] = filtered;
|
|
133
|
+
writeJsonFile(installedPath, installed);
|
|
134
|
+
// Update enabledPlugins in settings.json
|
|
135
|
+
const sPath = settingsFilePath(scope);
|
|
136
|
+
const settings = (readJsonFile(sPath) ?? {});
|
|
137
|
+
if (typeof settings.enabledPlugins !== 'object' || settings.enabledPlugins === null || Array.isArray(settings.enabledPlugins)) {
|
|
138
|
+
settings.enabledPlugins = {};
|
|
139
|
+
}
|
|
140
|
+
settings.enabledPlugins[PLUGIN_ID] = true;
|
|
141
|
+
writeJsonFile(sPath, settings);
|
|
142
|
+
}
|
|
143
|
+
/**
|
|
144
|
+
* Directly uninstall the plugin by removing cache files and config entries.
|
|
145
|
+
*/
|
|
146
|
+
function uninstallPluginDirect(scope) {
|
|
147
|
+
// Remove from installed_plugins.json
|
|
148
|
+
const installedPath = join(PLUGINS_DIR, 'installed_plugins.json');
|
|
149
|
+
const installed = readJsonFile(installedPath);
|
|
150
|
+
if (installed?.plugins && typeof installed.plugins === 'object') {
|
|
151
|
+
const plugins = installed.plugins;
|
|
152
|
+
if (Array.isArray(plugins[PLUGIN_ID])) {
|
|
153
|
+
plugins[PLUGIN_ID] = plugins[PLUGIN_ID].filter((e) => e.scope !== scope);
|
|
154
|
+
if (plugins[PLUGIN_ID].length === 0) {
|
|
155
|
+
delete plugins[PLUGIN_ID];
|
|
156
|
+
}
|
|
157
|
+
writeJsonFile(installedPath, installed);
|
|
158
|
+
}
|
|
159
|
+
}
|
|
160
|
+
// Remove from enabledPlugins in settings.json
|
|
161
|
+
const sPath = settingsFilePath(scope);
|
|
162
|
+
const settings = readJsonFile(sPath);
|
|
163
|
+
if (settings?.enabledPlugins && typeof settings.enabledPlugins === 'object' && !Array.isArray(settings.enabledPlugins)) {
|
|
164
|
+
const ep = settings.enabledPlugins;
|
|
165
|
+
if (ep[PLUGIN_ID] !== undefined) {
|
|
166
|
+
delete ep[PLUGIN_ID];
|
|
167
|
+
writeJsonFile(sPath, settings);
|
|
168
|
+
}
|
|
169
|
+
}
|
|
170
|
+
// Clean up cache (only if no remaining installs for this plugin)
|
|
171
|
+
const afterInstalled = readJsonFile(installedPath);
|
|
172
|
+
const afterPlugins = afterInstalled?.plugins;
|
|
173
|
+
if (!afterPlugins?.[PLUGIN_ID] || afterPlugins[PLUGIN_ID].length === 0) {
|
|
174
|
+
const cacheDir = join(PLUGINS_DIR, 'cache', MARKETPLACE_NAME);
|
|
175
|
+
if (existsSync(cacheDir)) {
|
|
176
|
+
rmSync(cacheDir, { recursive: true });
|
|
177
|
+
}
|
|
178
|
+
}
|
|
179
|
+
// Clean up marketplace entries
|
|
180
|
+
const kmPath = join(PLUGINS_DIR, 'known_marketplaces.json');
|
|
181
|
+
const km = readJsonFile(kmPath);
|
|
182
|
+
if (km?.[MARKETPLACE_NAME]) {
|
|
183
|
+
delete km[MARKETPLACE_NAME];
|
|
184
|
+
writeJsonFile(kmPath, km);
|
|
185
|
+
}
|
|
186
|
+
const extra = settings?.extraKnownMarketplaces;
|
|
187
|
+
if (extra?.[MARKETPLACE_NAME]) {
|
|
188
|
+
delete extra[MARKETPLACE_NAME];
|
|
189
|
+
if (settings)
|
|
190
|
+
writeJsonFile(sPath, settings);
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
// ---- install ----
|
|
194
|
+
pluginCommand
|
|
195
|
+
.command('install')
|
|
196
|
+
.description('Register the ctxkit plugin with Claude Code')
|
|
197
|
+
.option('--scope <scope>', 'Installation scope: user or project', 'user')
|
|
198
|
+
.option('--from <path>', 'Path to the marketplace root (git repo with .claude-plugin/marketplace.json)')
|
|
199
|
+
.action((options) => {
|
|
200
|
+
const scope = options.scope;
|
|
201
|
+
if (scope !== 'user' && scope !== 'project') {
|
|
202
|
+
console.error(`Invalid scope: ${scope}. Must be "user" or "project".`);
|
|
203
|
+
process.exit(1);
|
|
204
|
+
}
|
|
205
|
+
if (!hasClaudeCli()) {
|
|
206
|
+
console.error('claude CLI is required but not found on PATH.');
|
|
207
|
+
console.error('Install Claude Code: https://docs.anthropic.com/en/docs/claude-code');
|
|
208
|
+
process.exit(1);
|
|
209
|
+
}
|
|
210
|
+
// Try the marketplace flow first (works when in a git repo)
|
|
211
|
+
const fromPath = options.from;
|
|
212
|
+
const marketplaceRoot = fromPath ?? resolveMarketplaceRoot();
|
|
213
|
+
if (marketplaceRoot) {
|
|
214
|
+
console.log(`Found marketplace at: ${marketplaceRoot}`);
|
|
215
|
+
console.log('Registering ctxl marketplace...');
|
|
216
|
+
if (claudeExec(`plugin marketplace add "${marketplaceRoot}" --scope ${scope}`)) {
|
|
217
|
+
console.log('Installing ctxkit plugin...');
|
|
218
|
+
if (claudeExec(`plugin install ${PLUGIN_ID} --scope ${scope}`)) {
|
|
219
|
+
console.log(`Plugin ${PLUGIN_ID} installed successfully (scope: ${scope})`);
|
|
220
|
+
console.log('Start a new Claude Code session to activate the plugin.');
|
|
221
|
+
return;
|
|
222
|
+
}
|
|
223
|
+
}
|
|
224
|
+
console.log('Marketplace registration not available, using direct install...');
|
|
225
|
+
}
|
|
226
|
+
// Fallback: direct install (copy plugin to cache, write config)
|
|
227
|
+
const pluginDir = resolvePluginPkg();
|
|
228
|
+
if (!pluginDir) {
|
|
229
|
+
console.error('Could not locate @ctxkit/claude-plugin package.');
|
|
230
|
+
console.error('Make sure it is installed (npm install -g @ctxkit/claude-plugin).');
|
|
231
|
+
process.exit(1);
|
|
232
|
+
}
|
|
233
|
+
console.log(`Found plugin at: ${pluginDir}`);
|
|
234
|
+
console.log('Installing plugin directly...');
|
|
235
|
+
installPluginDirect(pluginDir, scope);
|
|
236
|
+
console.log(`Plugin ${PLUGIN_ID} installed successfully (scope: ${scope})`);
|
|
237
|
+
console.log('Start a new Claude Code session to activate the plugin.');
|
|
238
|
+
});
|
|
239
|
+
// ---- uninstall ----
|
|
240
|
+
pluginCommand
|
|
241
|
+
.command('uninstall')
|
|
242
|
+
.description('Unregister the ctxkit plugin from Claude Code')
|
|
243
|
+
.option('--scope <scope>', 'Installation scope: user or project', 'user')
|
|
244
|
+
.action((options) => {
|
|
245
|
+
const scope = options.scope;
|
|
246
|
+
if (scope !== 'user' && scope !== 'project') {
|
|
247
|
+
console.error(`Invalid scope: ${scope}. Must be "user" or "project".`);
|
|
248
|
+
process.exit(1);
|
|
249
|
+
}
|
|
250
|
+
if (hasClaudeCli()) {
|
|
251
|
+
claudeExec(`plugin uninstall ${PLUGIN_ID} --scope ${scope}`);
|
|
252
|
+
claudeExec(`plugin marketplace remove ${MARKETPLACE_NAME} --scope ${scope}`);
|
|
253
|
+
}
|
|
254
|
+
// Also clean up via direct method
|
|
255
|
+
uninstallPluginDirect(scope);
|
|
256
|
+
console.log(`Plugin ${PLUGIN_ID} uninstalled (scope: ${scope})`);
|
|
257
|
+
});
|
|
258
|
+
// ---- status ----
|
|
259
|
+
pluginCommand
|
|
260
|
+
.command('status')
|
|
261
|
+
.description('Check ctxkit plugin registration status')
|
|
262
|
+
.action(() => {
|
|
263
|
+
console.log('=== ctxkit plugin status ===\n');
|
|
264
|
+
const pluginDir = resolvePluginPkg();
|
|
265
|
+
if (pluginDir) {
|
|
266
|
+
console.log(`Plugin package: ${pluginDir}`);
|
|
267
|
+
}
|
|
268
|
+
else {
|
|
269
|
+
console.log('Plugin package: not found');
|
|
270
|
+
}
|
|
271
|
+
const marketplaceRoot = resolveMarketplaceRoot();
|
|
272
|
+
if (marketplaceRoot) {
|
|
273
|
+
console.log(`Marketplace: ${marketplaceRoot}`);
|
|
274
|
+
}
|
|
275
|
+
let mcpAvailable = false;
|
|
276
|
+
try {
|
|
277
|
+
execSync('which ctxkit-mcp', { encoding: 'utf-8', stdio: 'pipe' });
|
|
278
|
+
mcpAvailable = true;
|
|
279
|
+
}
|
|
280
|
+
catch {
|
|
281
|
+
// not on PATH
|
|
282
|
+
}
|
|
283
|
+
console.log(`ctxkit-mcp: ${mcpAvailable ? 'available on PATH' : 'not found on PATH'}`);
|
|
284
|
+
// Check installed_plugins.json
|
|
285
|
+
const installedPath = join(PLUGINS_DIR, 'installed_plugins.json');
|
|
286
|
+
const installed = readJsonFile(installedPath);
|
|
287
|
+
const installedPlugins = installed?.plugins;
|
|
288
|
+
const pluginEntries = installedPlugins?.[PLUGIN_ID];
|
|
289
|
+
console.log('');
|
|
290
|
+
if (pluginEntries && Array.isArray(pluginEntries) && pluginEntries.length > 0) {
|
|
291
|
+
console.log('Installed: yes');
|
|
292
|
+
for (const entry of pluginEntries) {
|
|
293
|
+
const e = entry;
|
|
294
|
+
console.log(` Scope: ${e.scope || 'unknown'}`);
|
|
295
|
+
console.log(` Path: ${e.installPath || 'unknown'}`);
|
|
296
|
+
console.log(` Version: ${e.version || 'unknown'}`);
|
|
297
|
+
}
|
|
298
|
+
}
|
|
299
|
+
else {
|
|
300
|
+
console.log('Installed: no');
|
|
301
|
+
}
|
|
302
|
+
// Check enabledPlugins
|
|
303
|
+
console.log('');
|
|
304
|
+
for (const scope of ['user', 'project']) {
|
|
305
|
+
const sPath = settingsFilePath(scope);
|
|
306
|
+
const settings = readJsonFile(sPath);
|
|
307
|
+
const plugins = (settings && typeof settings.enabledPlugins === 'object' && !Array.isArray(settings.enabledPlugins))
|
|
308
|
+
? settings.enabledPlugins
|
|
309
|
+
: {};
|
|
310
|
+
const enabled = plugins[PLUGIN_ID] === true;
|
|
311
|
+
console.log(`Enabled (${scope}): ${enabled ? 'yes' : 'no'}`);
|
|
312
|
+
}
|
|
313
|
+
// Check installed plugin contents
|
|
314
|
+
if (pluginEntries && Array.isArray(pluginEntries) && pluginEntries.length > 0) {
|
|
315
|
+
const installPath = pluginEntries[0].installPath;
|
|
316
|
+
if (installPath) {
|
|
317
|
+
console.log('');
|
|
318
|
+
const hasHooks = existsSync(join(installPath, 'hooks', 'hooks.json'));
|
|
319
|
+
const hasSkills = existsSync(join(installPath, 'skills'));
|
|
320
|
+
const hasMcp = existsSync(join(installPath, '.mcp.json'));
|
|
321
|
+
console.log(`Hooks: ${hasHooks ? 'yes' : 'no'}`);
|
|
322
|
+
console.log(`Skills: ${hasSkills ? 'yes' : 'no'}`);
|
|
323
|
+
console.log(`MCP: ${hasMcp ? 'yes' : 'no'}`);
|
|
324
|
+
}
|
|
325
|
+
}
|
|
326
|
+
});
|
|
327
|
+
//# sourceMappingURL=plugin.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"plugin.js","sourceRoot":"","sources":["../../src/commands/plugin.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"pr-context-cmd.d.ts","sourceRoot":"","sources":["../../src/commands/pr-context-cmd.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAGpC,eAAO,MAAM,gBAAgB,SA+IzB,CAAC"}
|