@dzhechkov/keysarium 1.0.0 → 1.0.1
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 +15 -15
- package/package.json +1 -1
- package/src/cli.js +5 -5
- package/src/commands/doctor.js +13 -13
- package/src/commands/init.js +2 -2
- package/src/commands/list.js +3 -3
- package/src/commands/remove.js +2 -2
- package/src/commands/update.js +2 -2
package/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# @
|
|
1
|
+
# @dzhechkov/keysarium
|
|
2
2
|
|
|
3
3
|
**AI Case Research Toolkit for Claude Code**
|
|
4
4
|
|
|
@@ -10,10 +10,10 @@ Full 7-phase pipeline for AI case studies, hackathons, and casariums. Provides s
|
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
# One-command install via npx (no global install needed)
|
|
13
|
-
npx @
|
|
13
|
+
npx @dzhechkov/keysarium
|
|
14
14
|
|
|
15
15
|
# Or install globally
|
|
16
|
-
npm install -g @
|
|
16
|
+
npm install -g @dzhechkov/keysarium
|
|
17
17
|
keysarium init
|
|
18
18
|
|
|
19
19
|
# Or without npm (standalone)
|
|
@@ -65,22 +65,22 @@ Each phase produces concrete artifacts (Markdown documents, Mermaid diagrams, JS
|
|
|
65
65
|
## CLI Commands
|
|
66
66
|
|
|
67
67
|
```bash
|
|
68
|
-
npx @
|
|
69
|
-
npx @
|
|
70
|
-
npx @
|
|
71
|
-
npx @
|
|
72
|
-
npx @
|
|
73
|
-
npx @
|
|
74
|
-
npx @
|
|
75
|
-
npx @
|
|
76
|
-
npx @
|
|
77
|
-
npx @
|
|
68
|
+
npx @dzhechkov/keysarium # Full install (interactive, same as init)
|
|
69
|
+
npx @dzhechkov/keysarium init # Install all components
|
|
70
|
+
npx @dzhechkov/keysarium init --minimal # Only .claude/ (no docs, no lib)
|
|
71
|
+
npx @dzhechkov/keysarium init --with-docs # Include documentation
|
|
72
|
+
npx @dzhechkov/keysarium init --force # Overwrite existing files
|
|
73
|
+
npx @dzhechkov/keysarium init --dry-run # Preview without making changes
|
|
74
|
+
npx @dzhechkov/keysarium update # Update to latest version
|
|
75
|
+
npx @dzhechkov/keysarium remove # Clean uninstall
|
|
76
|
+
npx @dzhechkov/keysarium list # Show installed components
|
|
77
|
+
npx @dzhechkov/keysarium doctor # Health check
|
|
78
78
|
```
|
|
79
79
|
|
|
80
80
|
Flags can be combined:
|
|
81
81
|
|
|
82
82
|
```bash
|
|
83
|
-
npx @
|
|
83
|
+
npx @dzhechkov/keysarium init --minimal --force --dry-run
|
|
84
84
|
```
|
|
85
85
|
|
|
86
86
|
---
|
|
@@ -286,4 +286,4 @@ The harvester reviews completed projects, identifies universal patterns, deconte
|
|
|
286
286
|
|
|
287
287
|
- **GitHub:** [https://github.com/dzhechko/product-keysarium-2026](https://github.com/dzhechko/product-keysarium-2026)
|
|
288
288
|
- **Issues:** [https://github.com/dzhechko/product-keysarium-2026/issues](https://github.com/dzhechko/product-keysarium-2026/issues)
|
|
289
|
-
- **npm:** [https://www.npmjs.com/package/@
|
|
289
|
+
- **npm:** [https://www.npmjs.com/package/@dzhechkov/keysarium](https://www.npmjs.com/package/@dzhechkov/keysarium)
|
package/package.json
CHANGED
package/src/cli.js
CHANGED
|
@@ -27,7 +27,7 @@ function getVersion() {
|
|
|
27
27
|
// Help
|
|
28
28
|
// ---------------------------------------------------------------------------
|
|
29
29
|
function showHelp() {
|
|
30
|
-
console.log(bold('Usage:') + ' npx @
|
|
30
|
+
console.log(bold('Usage:') + ' npx @dzhechkov/keysarium ' + cyan('<command>') + dim(' [options]'));
|
|
31
31
|
console.log('');
|
|
32
32
|
console.log(bold('Commands:'));
|
|
33
33
|
console.log(' ' + green('init') + ' Install toolkit into current project ' + dim('(default)'));
|
|
@@ -45,10 +45,10 @@ function showHelp() {
|
|
|
45
45
|
console.log(' ' + yellow('--version, -v') + ' Show version number');
|
|
46
46
|
console.log('');
|
|
47
47
|
console.log(bold('Examples:'));
|
|
48
|
-
console.log(dim(' $ ') + 'npx @
|
|
49
|
-
console.log(dim(' $ ') + 'npx @
|
|
50
|
-
console.log(dim(' $ ') + 'npx @
|
|
51
|
-
console.log(dim(' $ ') + 'npx @
|
|
48
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium init');
|
|
49
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium init --minimal --force');
|
|
50
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium update --dry-run');
|
|
51
|
+
console.log(dim(' $ ') + 'npx @dzhechkov/keysarium doctor');
|
|
52
52
|
console.log('');
|
|
53
53
|
}
|
|
54
54
|
|
package/src/commands/doctor.js
CHANGED
|
@@ -60,7 +60,7 @@ function checkFilesExist(manifest, targetDir) {
|
|
|
60
60
|
return {
|
|
61
61
|
passed: false,
|
|
62
62
|
detail: `${missing.length} file(s) missing: ${missing.slice(0, 5).join(', ')}${missing.length > 5 ? '...' : ''}`,
|
|
63
|
-
fix: `Run ${cyan('@
|
|
63
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing files.`,
|
|
64
64
|
};
|
|
65
65
|
});
|
|
66
66
|
}
|
|
@@ -76,7 +76,7 @@ function checkClaudeMd(targetDir) {
|
|
|
76
76
|
return {
|
|
77
77
|
passed: false,
|
|
78
78
|
detail: 'CLAUDE.md not found',
|
|
79
|
-
fix: `Run ${cyan('@
|
|
79
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} or ${cyan('@dzhechkov/keysarium init --force')} to restore.`,
|
|
80
80
|
};
|
|
81
81
|
}
|
|
82
82
|
|
|
@@ -117,7 +117,7 @@ function checkSkillsComplete(targetDir) {
|
|
|
117
117
|
return {
|
|
118
118
|
passed: false,
|
|
119
119
|
detail: '.claude/skills/ directory not found',
|
|
120
|
-
fix: `Run ${cyan('@
|
|
120
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore skills.`,
|
|
121
121
|
};
|
|
122
122
|
}
|
|
123
123
|
|
|
@@ -188,7 +188,7 @@ function checkCommandsPresent(targetDir) {
|
|
|
188
188
|
return {
|
|
189
189
|
passed: false,
|
|
190
190
|
detail: '.claude/commands/ directory not found',
|
|
191
|
-
fix: `Run ${cyan('@
|
|
191
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore commands.`,
|
|
192
192
|
};
|
|
193
193
|
}
|
|
194
194
|
|
|
@@ -209,7 +209,7 @@ function checkCommandsPresent(targetDir) {
|
|
|
209
209
|
return {
|
|
210
210
|
passed: false,
|
|
211
211
|
detail: `Missing ${missing.length} command(s): ${missing.join(', ')}`,
|
|
212
|
-
fix: `Run ${cyan('@
|
|
212
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing commands.`,
|
|
213
213
|
};
|
|
214
214
|
});
|
|
215
215
|
}
|
|
@@ -234,7 +234,7 @@ function checkRulesPresent(targetDir) {
|
|
|
234
234
|
return {
|
|
235
235
|
passed: false,
|
|
236
236
|
detail: '.claude/rules/ directory not found',
|
|
237
|
-
fix: `Run ${cyan('@
|
|
237
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore rules.`,
|
|
238
238
|
};
|
|
239
239
|
}
|
|
240
240
|
|
|
@@ -255,7 +255,7 @@ function checkRulesPresent(targetDir) {
|
|
|
255
255
|
return {
|
|
256
256
|
passed: false,
|
|
257
257
|
detail: `Missing ${missing.length} rule(s): ${missing.join(', ')}`,
|
|
258
|
-
fix: `Run ${cyan('@
|
|
258
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing rules.`,
|
|
259
259
|
};
|
|
260
260
|
});
|
|
261
261
|
}
|
|
@@ -271,7 +271,7 @@ function checkAgentsPresent(targetDir) {
|
|
|
271
271
|
return {
|
|
272
272
|
passed: false,
|
|
273
273
|
detail: '.claude/agents/ directory not found',
|
|
274
|
-
fix: `Run ${cyan('@
|
|
274
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore agents.`,
|
|
275
275
|
};
|
|
276
276
|
}
|
|
277
277
|
|
|
@@ -298,7 +298,7 @@ function checkAgentsPresent(targetDir) {
|
|
|
298
298
|
return {
|
|
299
299
|
passed: false,
|
|
300
300
|
detail: `Only ${mdFiles.length}/5 agent files found`,
|
|
301
|
-
fix: `Run ${cyan('@
|
|
301
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore missing agent templates.`,
|
|
302
302
|
};
|
|
303
303
|
});
|
|
304
304
|
}
|
|
@@ -314,7 +314,7 @@ function checkSettingsValid(targetDir) {
|
|
|
314
314
|
return {
|
|
315
315
|
passed: false,
|
|
316
316
|
detail: '.claude/settings.json not found',
|
|
317
|
-
fix: `Run ${cyan('@
|
|
317
|
+
fix: `Run ${cyan('@dzhechkov/keysarium update')} to restore settings.`,
|
|
318
318
|
};
|
|
319
319
|
}
|
|
320
320
|
|
|
@@ -378,7 +378,7 @@ function checkResearchDir(targetDir) {
|
|
|
378
378
|
// ---------------------------------------------------------------------------
|
|
379
379
|
|
|
380
380
|
/**
|
|
381
|
-
* `@
|
|
381
|
+
* `@dzhechkov/keysarium doctor` — Health check for the toolkit installation.
|
|
382
382
|
*
|
|
383
383
|
* @param {object} options
|
|
384
384
|
* @param {string} options.targetDir — Project root directory
|
|
@@ -390,7 +390,7 @@ async function run(options) {
|
|
|
390
390
|
// ── a) Check manifest exists ───────────────────────────────────────────
|
|
391
391
|
if (!fileExists(manifestPath)) {
|
|
392
392
|
logError('Keysarium is not installed in this directory.');
|
|
393
|
-
info(`Run ${cyan('@
|
|
393
|
+
info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
|
|
394
394
|
process.exit(1);
|
|
395
395
|
}
|
|
396
396
|
|
|
@@ -401,7 +401,7 @@ async function run(options) {
|
|
|
401
401
|
}
|
|
402
402
|
|
|
403
403
|
console.log('');
|
|
404
|
-
info(bold(`Running health checks for @
|
|
404
|
+
info(bold(`Running health checks for @dzhechkov/keysarium v${manifest.version}...`));
|
|
405
405
|
console.log('');
|
|
406
406
|
|
|
407
407
|
// ── b) Run all checks ─────────────────────────────────────────────────
|
package/src/commands/init.js
CHANGED
|
@@ -65,7 +65,7 @@ function installComponent(comp, templatesDir, targetDir) {
|
|
|
65
65
|
// ---------------------------------------------------------------------------
|
|
66
66
|
|
|
67
67
|
/**
|
|
68
|
-
* `@
|
|
68
|
+
* `@dzhechkov/keysarium init` — Install the toolkit into the target project.
|
|
69
69
|
*
|
|
70
70
|
* @param {object} options
|
|
71
71
|
* @param {boolean} options.minimal — Install only core (no lib)
|
|
@@ -82,7 +82,7 @@ async function run(options) {
|
|
|
82
82
|
if (fileExists(manifestPath)) {
|
|
83
83
|
if (!force) {
|
|
84
84
|
warn('Keysarium is already installed in this directory.');
|
|
85
|
-
info(`Run ${cyan('@
|
|
85
|
+
info(`Run ${cyan('@dzhechkov/keysarium update')} to update, or use ${yellow('--force')} to overwrite.`);
|
|
86
86
|
process.exit(1);
|
|
87
87
|
}
|
|
88
88
|
warn('Existing installation found — overwriting (--force).');
|
package/src/commands/list.js
CHANGED
|
@@ -53,7 +53,7 @@ function padRight(str, width) {
|
|
|
53
53
|
// ---------------------------------------------------------------------------
|
|
54
54
|
|
|
55
55
|
/**
|
|
56
|
-
* `@
|
|
56
|
+
* `@dzhechkov/keysarium list` — Show installed components and their status.
|
|
57
57
|
*
|
|
58
58
|
* @param {object} options
|
|
59
59
|
* @param {string} options.targetDir — Project root directory
|
|
@@ -65,7 +65,7 @@ async function run(options) {
|
|
|
65
65
|
// ── a) Read manifest ───────────────────────────────────────────────────
|
|
66
66
|
if (!fileExists(manifestPath)) {
|
|
67
67
|
warn('Keysarium is not installed in this directory.');
|
|
68
|
-
info(`Run ${cyan('@
|
|
68
|
+
info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
|
|
69
69
|
process.exit(1);
|
|
70
70
|
}
|
|
71
71
|
|
|
@@ -79,7 +79,7 @@ async function run(options) {
|
|
|
79
79
|
|
|
80
80
|
// ── Header ─────────────────────────────────────────────────────────────
|
|
81
81
|
console.log('');
|
|
82
|
-
console.log(bold(`@
|
|
82
|
+
console.log(bold(`@dzhechkov/keysarium v${manifest.version}`));
|
|
83
83
|
console.log(`Installed: ${manifest.installedAt ? manifest.installedAt.split('T')[0] : 'unknown'}`);
|
|
84
84
|
if (manifest.updatedAt) {
|
|
85
85
|
console.log(`Updated: ${manifest.updatedAt.split('T')[0]}`);
|
package/src/commands/remove.js
CHANGED
|
@@ -82,7 +82,7 @@ function removeEmptyDirs(dirPath, stopDir) {
|
|
|
82
82
|
// ---------------------------------------------------------------------------
|
|
83
83
|
|
|
84
84
|
/**
|
|
85
|
-
* `@
|
|
85
|
+
* `@dzhechkov/keysarium remove` — Clean uninstall of the toolkit.
|
|
86
86
|
*
|
|
87
87
|
* @param {object} options
|
|
88
88
|
* @param {boolean} options.force — Skip confirmation prompt
|
|
@@ -187,7 +187,7 @@ async function run(options) {
|
|
|
187
187
|
console.log(` ${dim('-')} ${skippedCount} file(s) already missing (skipped)`);
|
|
188
188
|
}
|
|
189
189
|
console.log('');
|
|
190
|
-
info(`To reinstall, run: ${cyan('@
|
|
190
|
+
info(`To reinstall, run: ${cyan('@dzhechkov/keysarium init')}`);
|
|
191
191
|
console.log('');
|
|
192
192
|
|
|
193
193
|
process.exit(0);
|
package/src/commands/update.js
CHANGED
|
@@ -16,7 +16,7 @@ const {
|
|
|
16
16
|
// ---------------------------------------------------------------------------
|
|
17
17
|
|
|
18
18
|
/**
|
|
19
|
-
* `@
|
|
19
|
+
* `@dzhechkov/keysarium update` — Update an existing toolkit installation.
|
|
20
20
|
*
|
|
21
21
|
* @param {object} options
|
|
22
22
|
* @param {boolean} options.dryRun — Preview without writing anything
|
|
@@ -30,7 +30,7 @@ async function run(options) {
|
|
|
30
30
|
// ── a) Read existing manifest ───────────────────────────────────────────
|
|
31
31
|
if (!fileExists(manifestPath)) {
|
|
32
32
|
logError('Keysarium is not installed in this directory.');
|
|
33
|
-
info(`Run ${cyan('@
|
|
33
|
+
info(`Run ${cyan('@dzhechkov/keysarium init')} to install.`);
|
|
34
34
|
process.exit(1);
|
|
35
35
|
}
|
|
36
36
|
|