@eltonssouza/development-utility-kit 0.13.0 → 0.14.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 +9 -0
- package/README.npm.md +9 -0
- package/README.repo.md +11 -0
- package/bin/cli.js +64 -16
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -24,6 +24,15 @@ npx @eltonssouza/development-utility-kit install
|
|
|
24
24
|
|
|
25
25
|
> Run `npx … install` from inside a project folder — not from a drive root.
|
|
26
26
|
|
|
27
|
+
## Recommended companions
|
|
28
|
+
|
|
29
|
+
Stands on the best community skills & plugins — recommended, not bundled (the installer prints this too):
|
|
30
|
+
|
|
31
|
+
- **Impeccable** (frontend design gate) — `npx impeccable skills install`
|
|
32
|
+
- **Caveman** (token-saving output) — `npm install -g @juliusbrussee/caveman-code`
|
|
33
|
+
- **RTK** (token-killer CLI proxy) — `brew install rtk` *(macOS)*
|
|
34
|
+
- **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills`
|
|
35
|
+
|
|
27
36
|
## What you get
|
|
28
37
|
|
|
29
38
|
- **18 keyword-triggered skills** + **21 stack-agnostic agents** + stack knowledge packs (Java/Spring, TypeScript/Angular, and more)
|
package/README.npm.md
CHANGED
|
@@ -24,6 +24,15 @@ npx @eltonssouza/development-utility-kit install
|
|
|
24
24
|
|
|
25
25
|
> Run `npx … install` from inside a project folder — not from a drive root.
|
|
26
26
|
|
|
27
|
+
## Recommended companions
|
|
28
|
+
|
|
29
|
+
Stands on the best community skills & plugins — recommended, not bundled (the installer prints this too):
|
|
30
|
+
|
|
31
|
+
- **Impeccable** (frontend design gate) — `npx impeccable skills install`
|
|
32
|
+
- **Caveman** (token-saving output) — `npm install -g @juliusbrussee/caveman-code`
|
|
33
|
+
- **RTK** (token-killer CLI proxy) — `brew install rtk` *(macOS)*
|
|
34
|
+
- **Grill-me** (discovery interview) — `npx skills@latest add mattpocock/skills`
|
|
35
|
+
|
|
27
36
|
## What you get
|
|
28
37
|
|
|
29
38
|
- **18 keyword-triggered skills** + **21 stack-agnostic agents** + stack knowledge packs (Java/Spring, TypeScript/Angular, and more)
|
package/README.repo.md
CHANGED
|
@@ -27,6 +27,17 @@ CLI binary: `duk` · Node `>=18` · License: MIT
|
|
|
27
27
|
npx @eltonssouza/development-utility-kit install
|
|
28
28
|
```
|
|
29
29
|
|
|
30
|
+
### Recommended companions
|
|
31
|
+
|
|
32
|
+
development-utility-kit stands on the best community skills & plugins. They are **recommended, not bundled** — install the ones you want separately (the npx installer prints this list too). We use them, credit them ([§Acknowledgements](#acknowledgements)), and never re-distribute them.
|
|
33
|
+
|
|
34
|
+
| Companion | What it adds | Install |
|
|
35
|
+
|---|---|---|
|
|
36
|
+
| **Impeccable** | frontend design gate (polish / audit / critique) — wired into `project-manager` §6.6 | `npx impeccable skills install` |
|
|
37
|
+
| **Caveman** | token-saving telegraphic output (~75% fewer tokens) | `npm install -g @juliusbrussee/caveman-code` |
|
|
38
|
+
| **RTK** | Rust Token Killer CLI proxy (60–90% savings) — powers the dashboard widget | `brew install rtk` *(macOS; see RTK repo for Windows/Linux)* |
|
|
39
|
+
| **Grill-me** | relentless discovery interview (opens the delivery pipeline) | `npx skills@latest add mattpocock/skills` |
|
|
40
|
+
|
|
30
41
|
---
|
|
31
42
|
|
|
32
43
|
## What it is
|
package/bin/cli.js
CHANGED
|
@@ -267,6 +267,31 @@ function harnessVersion() {
|
|
|
267
267
|
}
|
|
268
268
|
}
|
|
269
269
|
|
|
270
|
+
// ─── spawn helpers (DEP0190-safe) ─────────────────────────────────────────────
|
|
271
|
+
|
|
272
|
+
/**
|
|
273
|
+
* Whether a binary resolves on PATH — cross-platform, no shell (so no DEP0190).
|
|
274
|
+
* @param {string} bin
|
|
275
|
+
* @returns {boolean}
|
|
276
|
+
*/
|
|
277
|
+
function isOnPath(bin) {
|
|
278
|
+
const probe = process.platform === 'win32' ? 'where' : 'which';
|
|
279
|
+
const r = spawnSync(probe, [bin], { stdio: 'ignore' });
|
|
280
|
+
return r.status === 0;
|
|
281
|
+
}
|
|
282
|
+
|
|
283
|
+
/**
|
|
284
|
+
* Run a TRUSTED, static command line. A shell is needed on Windows to resolve
|
|
285
|
+
* `.cmd`/`.bat` shims (npm, git, rtk). Passing the command as a SINGLE string
|
|
286
|
+
* (not args[] + shell:true) avoids Node's DEP0190 warning. Never pass untrusted
|
|
287
|
+
* input — quote path arguments at the call site.
|
|
288
|
+
* @param {string} cmd
|
|
289
|
+
* @param {object} [opts]
|
|
290
|
+
*/
|
|
291
|
+
function runShell(cmd, opts = {}) {
|
|
292
|
+
return spawnSync(cmd, { shell: true, ...opts });
|
|
293
|
+
}
|
|
294
|
+
|
|
270
295
|
// ─── adoptProject (install / update) ──────────────────────────────────────────
|
|
271
296
|
|
|
272
297
|
/**
|
|
@@ -432,17 +457,11 @@ function adoptProject(opts) {
|
|
|
432
457
|
process.stdout.write('Written : CLAUDE.md\n');
|
|
433
458
|
|
|
434
459
|
// Auto-install duk globally when running via npx (duk not yet in PATH).
|
|
435
|
-
|
|
436
|
-
shell: process.platform === 'win32',
|
|
437
|
-
stdio: 'ignore',
|
|
438
|
-
});
|
|
439
|
-
if (dukCheck.error) {
|
|
460
|
+
if (!isOnPath('duk')) {
|
|
440
461
|
process.stdout.write('\nInstalling duk CLI globally...\n');
|
|
441
|
-
const globalInstall =
|
|
442
|
-
'
|
|
443
|
-
|
|
444
|
-
{ stdio: 'inherit', shell: process.platform === 'win32' }
|
|
445
|
-
);
|
|
462
|
+
const globalInstall = runShell('npm install -g @eltonssouza/development-utility-kit', {
|
|
463
|
+
stdio: 'inherit',
|
|
464
|
+
});
|
|
446
465
|
if (globalInstall.status === 0) {
|
|
447
466
|
process.stdout.write('duk installed globally. Run: duk help\n');
|
|
448
467
|
} else {
|
|
@@ -450,6 +469,38 @@ function adoptProject(opts) {
|
|
|
450
469
|
process.stdout.write(' npm install -g @eltonssouza/development-utility-kit\n');
|
|
451
470
|
}
|
|
452
471
|
}
|
|
472
|
+
|
|
473
|
+
printCompanionsNotice();
|
|
474
|
+
}
|
|
475
|
+
|
|
476
|
+
// ─── companion skills/plugins notice ──────────────────────────────────────────
|
|
477
|
+
|
|
478
|
+
/**
|
|
479
|
+
* The community skills/plugins the harness builds on. Recommended, not bundled —
|
|
480
|
+
* each is installed separately by the user (per ADR-010 / Acknowledgements).
|
|
481
|
+
*/
|
|
482
|
+
const COMPANIONS = [
|
|
483
|
+
{ name: 'Impeccable', what: 'frontend design gate (polish / audit / critique)', cmd: 'npx impeccable skills install' },
|
|
484
|
+
{ name: 'Caveman', what: 'token-saving telegraphic output (~75% fewer tokens)', cmd: 'npm install -g @juliusbrussee/caveman-code' },
|
|
485
|
+
{ name: 'RTK', what: 'Rust Token Killer CLI proxy (60-90% savings)', cmd: 'brew install rtk', note: 'macOS; see the RTK repo for Windows/Linux' },
|
|
486
|
+
{ name: 'Grill-me', what: 'relentless discovery interview', cmd: 'npx skills@latest add mattpocock/skills' },
|
|
487
|
+
];
|
|
488
|
+
|
|
489
|
+
/**
|
|
490
|
+
* Print the recommended-companions notice after an install. Recommendation
|
|
491
|
+
* only — never auto-installs (commands span npx / npm -g / brew and are
|
|
492
|
+
* platform-specific). Credits live in README §Acknowledgements.
|
|
493
|
+
*/
|
|
494
|
+
function printCompanionsNotice() {
|
|
495
|
+
process.stdout.write('\n' + '─'.repeat(70) + '\n');
|
|
496
|
+
process.stdout.write('development-utility-kit stands on the best community skills & plugins.\n');
|
|
497
|
+
process.stdout.write('Recommended companions (install separately, when you want them):\n\n');
|
|
498
|
+
for (const c of COMPANIONS) {
|
|
499
|
+
process.stdout.write(` • ${c.name} — ${c.what}\n`);
|
|
500
|
+
process.stdout.write(` ${c.cmd}${c.note ? ` (${c.note})` : ''}\n`);
|
|
501
|
+
}
|
|
502
|
+
process.stdout.write('\nWe use them, credit them, and never re-distribute them. See README §Acknowledgements.\n');
|
|
503
|
+
process.stdout.write('─'.repeat(70) + '\n');
|
|
453
504
|
}
|
|
454
505
|
|
|
455
506
|
// ─── newProject (duk new <name>) ──────────────────────────────────────────────
|
|
@@ -498,10 +549,9 @@ function newProject(name, options) {
|
|
|
498
549
|
fs.mkdirSync(target, { recursive: true });
|
|
499
550
|
|
|
500
551
|
// 2. git init (non-fatal if git not installed; warn and continue)
|
|
501
|
-
const gitResult =
|
|
552
|
+
const gitResult = runShell('git init -q', {
|
|
502
553
|
cwd: target,
|
|
503
554
|
stdio: 'inherit',
|
|
504
|
-
shell: process.platform === 'win32',
|
|
505
555
|
});
|
|
506
556
|
if (gitResult.status !== 0) {
|
|
507
557
|
process.stdout.write('Warning: "git init" failed or git is not in PATH. Continuing without git repo.\n');
|
|
@@ -675,9 +725,8 @@ function dashboard(passthroughArgs) {
|
|
|
675
725
|
|
|
676
726
|
if (!fs.existsSync(nodeModulesDir)) {
|
|
677
727
|
process.stdout.write('Installing dashboard dependencies (first run)...\n');
|
|
678
|
-
const result =
|
|
728
|
+
const result = runShell(`npm install --prefix "${dashboardDir}"`, {
|
|
679
729
|
stdio: 'inherit',
|
|
680
|
-
shell: process.platform === 'win32',
|
|
681
730
|
});
|
|
682
731
|
if (result.status !== 0) {
|
|
683
732
|
process.stderr.write('Error: npm install failed for dashboard dependencies.\n');
|
|
@@ -686,8 +735,7 @@ function dashboard(passthroughArgs) {
|
|
|
686
735
|
}
|
|
687
736
|
|
|
688
737
|
// FR-008: print rtk gain output before starting the server
|
|
689
|
-
const rtkResult =
|
|
690
|
-
shell: process.platform === 'win32',
|
|
738
|
+
const rtkResult = runShell('rtk gain', {
|
|
691
739
|
stdio: ['ignore', 'pipe', 'ignore'],
|
|
692
740
|
});
|
|
693
741
|
if (rtkResult.status === 0 && rtkResult.stdout && rtkResult.stdout.length > 0) {
|