@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.
Files changed (85) hide show
  1. package/dist/commands/apply.d.ts +3 -0
  2. package/dist/commands/apply.d.ts.map +1 -0
  3. package/dist/commands/apply.js +45 -0
  4. package/dist/commands/apply.js.map +1 -0
  5. package/dist/commands/bootstrap-cmd.d.ts +3 -0
  6. package/dist/commands/bootstrap-cmd.d.ts.map +1 -0
  7. package/dist/commands/bootstrap-cmd.js +104 -0
  8. package/dist/commands/bootstrap-cmd.js.map +1 -0
  9. package/dist/commands/codex.d.ts +3 -0
  10. package/dist/commands/codex.d.ts.map +1 -0
  11. package/dist/commands/codex.js +64 -0
  12. package/dist/commands/codex.js.map +1 -0
  13. package/dist/commands/conflicts-cmd.d.ts +3 -0
  14. package/dist/commands/conflicts-cmd.d.ts.map +1 -0
  15. package/dist/commands/conflicts-cmd.js +178 -0
  16. package/dist/commands/conflicts-cmd.js.map +1 -0
  17. package/dist/commands/daemon.d.ts +4 -0
  18. package/dist/commands/daemon.d.ts.map +1 -0
  19. package/dist/commands/daemon.js +107 -0
  20. package/dist/commands/daemon.js.map +1 -0
  21. package/dist/commands/drift.d.ts +3 -0
  22. package/dist/commands/drift.d.ts.map +1 -0
  23. package/dist/commands/drift.js +65 -0
  24. package/dist/commands/drift.js.map +1 -0
  25. package/dist/commands/history-cmd.d.ts +3 -0
  26. package/dist/commands/history-cmd.d.ts.map +1 -0
  27. package/dist/commands/history-cmd.js +100 -0
  28. package/dist/commands/history-cmd.js.map +1 -0
  29. package/dist/commands/hooks-cmd.d.ts +3 -0
  30. package/dist/commands/hooks-cmd.d.ts.map +1 -0
  31. package/dist/commands/hooks-cmd.js +98 -0
  32. package/dist/commands/hooks-cmd.js.map +1 -0
  33. package/dist/commands/index-cmd.d.ts +3 -0
  34. package/dist/commands/index-cmd.d.ts.map +1 -0
  35. package/dist/commands/index-cmd.js +112 -0
  36. package/dist/commands/index-cmd.js.map +1 -0
  37. package/dist/commands/init.d.ts +3 -0
  38. package/dist/commands/init.d.ts.map +1 -0
  39. package/dist/commands/init.js +158 -0
  40. package/dist/commands/init.js.map +1 -0
  41. package/dist/commands/inject.d.ts +3 -0
  42. package/dist/commands/inject.d.ts.map +1 -0
  43. package/dist/commands/inject.js +68 -0
  44. package/dist/commands/inject.js.map +1 -0
  45. package/dist/commands/migrate-cmd.d.ts +3 -0
  46. package/dist/commands/migrate-cmd.d.ts.map +1 -0
  47. package/dist/commands/migrate-cmd.js +132 -0
  48. package/dist/commands/migrate-cmd.js.map +1 -0
  49. package/dist/commands/plugin.d.ts +3 -0
  50. package/dist/commands/plugin.d.ts.map +1 -0
  51. package/dist/commands/plugin.js +327 -0
  52. package/dist/commands/plugin.js.map +1 -0
  53. package/dist/commands/pr-context-cmd.d.ts +3 -0
  54. package/dist/commands/pr-context-cmd.d.ts.map +1 -0
  55. package/dist/commands/pr-context-cmd.js +128 -0
  56. package/dist/commands/pr-context-cmd.js.map +1 -0
  57. package/dist/commands/propose.d.ts +3 -0
  58. package/dist/commands/propose.d.ts.map +1 -0
  59. package/dist/commands/propose.js +109 -0
  60. package/dist/commands/propose.js.map +1 -0
  61. package/dist/commands/run.d.ts +3 -0
  62. package/dist/commands/run.d.ts.map +1 -0
  63. package/dist/commands/run.js +133 -0
  64. package/dist/commands/run.js.map +1 -0
  65. package/dist/commands/sessions.d.ts +3 -0
  66. package/dist/commands/sessions.d.ts.map +1 -0
  67. package/dist/commands/sessions.js +93 -0
  68. package/dist/commands/sessions.js.map +1 -0
  69. package/dist/commands/speckit-cmd.d.ts +3 -0
  70. package/dist/commands/speckit-cmd.d.ts.map +1 -0
  71. package/dist/commands/speckit-cmd.js +196 -0
  72. package/dist/commands/speckit-cmd.js.map +1 -0
  73. package/dist/commands/validate.d.ts +3 -0
  74. package/dist/commands/validate.d.ts.map +1 -0
  75. package/dist/commands/validate.js +75 -0
  76. package/dist/commands/validate.js.map +1 -0
  77. package/dist/index.d.ts +3 -0
  78. package/dist/index.d.ts.map +1 -0
  79. package/dist/index.js +49 -0
  80. package/dist/index.js.map +1 -0
  81. package/dist/services/agents-md.d.ts +34 -0
  82. package/dist/services/agents-md.d.ts.map +1 -0
  83. package/dist/services/agents-md.js +248 -0
  84. package/dist/services/agents-md.js.map +1 -0
  85. 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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const migrateCommand: Command;
3
+ //# sourceMappingURL=migrate-cmd.d.ts.map
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const pluginCommand: Command;
3
+ //# sourceMappingURL=plugin.d.ts.map
@@ -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,3 @@
1
+ import { Command } from 'commander';
2
+ export declare const prContextCommand: Command;
3
+ //# sourceMappingURL=pr-context-cmd.d.ts.map
@@ -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"}