@jaggerxtrm/specialists 2.1.12 → 2.1.13
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/index.js +114 -9
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -18539,26 +18539,127 @@ var init_run = __esm(() => {
|
|
|
18539
18539
|
init_beads();
|
|
18540
18540
|
});
|
|
18541
18541
|
|
|
18542
|
+
// src/cli/status.ts
|
|
18543
|
+
var exports_status = {};
|
|
18544
|
+
__export(exports_status, {
|
|
18545
|
+
run: () => run7
|
|
18546
|
+
});
|
|
18547
|
+
import { spawnSync as spawnSync3 } from "node:child_process";
|
|
18548
|
+
import { existsSync as existsSync4 } from "node:fs";
|
|
18549
|
+
import { join as join7 } from "node:path";
|
|
18550
|
+
function ok2(msg) {
|
|
18551
|
+
console.log(` ${green4("✓")} ${msg}`);
|
|
18552
|
+
}
|
|
18553
|
+
function warn(msg) {
|
|
18554
|
+
console.log(` ${yellow4("○")} ${msg}`);
|
|
18555
|
+
}
|
|
18556
|
+
function fail(msg) {
|
|
18557
|
+
console.log(` ${red("✗")} ${msg}`);
|
|
18558
|
+
}
|
|
18559
|
+
function info(msg) {
|
|
18560
|
+
console.log(` ${dim5(msg)}`);
|
|
18561
|
+
}
|
|
18562
|
+
function section(label) {
|
|
18563
|
+
const line = "─".repeat(Math.max(0, 38 - label.length));
|
|
18564
|
+
console.log(`
|
|
18565
|
+
${bold5(`── ${label} ${line}`)}`);
|
|
18566
|
+
}
|
|
18567
|
+
function cmd(bin, args) {
|
|
18568
|
+
const r = spawnSync3(bin, args, {
|
|
18569
|
+
encoding: "utf8",
|
|
18570
|
+
stdio: "pipe",
|
|
18571
|
+
timeout: 5000
|
|
18572
|
+
});
|
|
18573
|
+
return { ok: r.status === 0 && !r.error, stdout: (r.stdout ?? "").trim() };
|
|
18574
|
+
}
|
|
18575
|
+
function isInstalled(bin) {
|
|
18576
|
+
return spawnSync3("which", [bin], { encoding: "utf8", timeout: 2000 }).status === 0;
|
|
18577
|
+
}
|
|
18578
|
+
async function run7() {
|
|
18579
|
+
console.log(`
|
|
18580
|
+
${bold5("specialists status")}
|
|
18581
|
+
`);
|
|
18582
|
+
section("Specialists");
|
|
18583
|
+
const loader = new SpecialistLoader;
|
|
18584
|
+
const all = await loader.list();
|
|
18585
|
+
if (all.length === 0) {
|
|
18586
|
+
warn(`no specialists found — run ${yellow4("specialists init")} to scaffold`);
|
|
18587
|
+
} else {
|
|
18588
|
+
const byScope = all.reduce((acc, s) => {
|
|
18589
|
+
acc[s.scope] = (acc[s.scope] ?? 0) + 1;
|
|
18590
|
+
return acc;
|
|
18591
|
+
}, {});
|
|
18592
|
+
const scopeSummary = Object.entries(byScope).map(([scope, n]) => `${n} ${scope}`).join(", ");
|
|
18593
|
+
ok2(`${all.length} found ${dim5(`(${scopeSummary})`)}`);
|
|
18594
|
+
for (const s of all) {
|
|
18595
|
+
const staleness = await checkStaleness(s);
|
|
18596
|
+
if (staleness === "AGED") {
|
|
18597
|
+
warn(`${s.name} ${red("AGED")} ${dim5(s.scope)}`);
|
|
18598
|
+
} else if (staleness === "STALE") {
|
|
18599
|
+
warn(`${s.name} ${yellow4("STALE")} ${dim5(s.scope)}`);
|
|
18600
|
+
}
|
|
18601
|
+
}
|
|
18602
|
+
}
|
|
18603
|
+
section("pi (coding agent runtime)");
|
|
18604
|
+
if (!isInstalled("pi")) {
|
|
18605
|
+
fail(`pi not installed — run ${yellow4("specialists install")}`);
|
|
18606
|
+
} else {
|
|
18607
|
+
const version2 = cmd("pi", ["--version"]);
|
|
18608
|
+
const models = cmd("pi", ["--list-models"]);
|
|
18609
|
+
const providers = new Set(models.stdout.split(`
|
|
18610
|
+
`).slice(1).map((line) => line.split(/\s+/)[0]).filter(Boolean));
|
|
18611
|
+
const vStr = version2.ok ? `v${version2.stdout}` : "unknown version";
|
|
18612
|
+
const pStr = providers.size > 0 ? `${providers.size} provider${providers.size > 1 ? "s" : ""} active ${dim5(`(${[...providers].join(", ")})`)} ` : yellow4("no providers configured — run pi config");
|
|
18613
|
+
ok2(`${vStr} — ${pStr}`);
|
|
18614
|
+
}
|
|
18615
|
+
section("beads (issue tracker)");
|
|
18616
|
+
if (!isInstalled("bd")) {
|
|
18617
|
+
fail(`bd not installed — run ${yellow4("specialists install")}`);
|
|
18618
|
+
} else {
|
|
18619
|
+
const bdVersion = cmd("bd", ["--version"]);
|
|
18620
|
+
ok2(`bd installed${bdVersion.ok ? ` ${dim5(bdVersion.stdout)}` : ""}`);
|
|
18621
|
+
if (existsSync4(join7(process.cwd(), ".beads"))) {
|
|
18622
|
+
ok2(".beads/ present in project");
|
|
18623
|
+
} else {
|
|
18624
|
+
warn(`.beads/ not found — run ${yellow4("bd init")} to enable issue tracking`);
|
|
18625
|
+
}
|
|
18626
|
+
}
|
|
18627
|
+
section("MCP");
|
|
18628
|
+
const specialistsBin = cmd("which", ["specialists"]);
|
|
18629
|
+
if (!specialistsBin.ok) {
|
|
18630
|
+
fail(`specialists not installed globally — run ${yellow4("npm install -g @jaggerxtrm/specialists")}`);
|
|
18631
|
+
} else {
|
|
18632
|
+
ok2(`specialists binary installed ${dim5(specialistsBin.stdout)}`);
|
|
18633
|
+
info(`verify registration: claude mcp get specialists`);
|
|
18634
|
+
info(`re-register: specialists install`);
|
|
18635
|
+
}
|
|
18636
|
+
console.log();
|
|
18637
|
+
}
|
|
18638
|
+
var bold5 = (s) => `\x1B[1m${s}\x1B[0m`, dim5 = (s) => `\x1B[2m${s}\x1B[0m`, green4 = (s) => `\x1B[32m${s}\x1B[0m`, yellow4 = (s) => `\x1B[33m${s}\x1B[0m`, red = (s) => `\x1B[31m${s}\x1B[0m`;
|
|
18639
|
+
var init_status = __esm(() => {
|
|
18640
|
+
init_loader();
|
|
18641
|
+
});
|
|
18642
|
+
|
|
18542
18643
|
// src/cli/help.ts
|
|
18543
18644
|
var exports_help = {};
|
|
18544
18645
|
__export(exports_help, {
|
|
18545
|
-
run: () =>
|
|
18646
|
+
run: () => run8
|
|
18546
18647
|
});
|
|
18547
|
-
async function
|
|
18648
|
+
async function run8() {
|
|
18548
18649
|
const lines = [
|
|
18549
18650
|
"",
|
|
18550
|
-
|
|
18651
|
+
bold6("specialists <command>"),
|
|
18551
18652
|
"",
|
|
18552
18653
|
"Commands:",
|
|
18553
|
-
...COMMANDS.map(([
|
|
18654
|
+
...COMMANDS.map(([cmd2, desc]) => ` ${cmd2.padEnd(COL_WIDTH)} ${dim6(desc)}`),
|
|
18554
18655
|
"",
|
|
18555
|
-
|
|
18656
|
+
dim6("Run 'specialists <command> --help' for command-specific options."),
|
|
18556
18657
|
""
|
|
18557
18658
|
];
|
|
18558
18659
|
console.log(lines.join(`
|
|
18559
18660
|
`));
|
|
18560
18661
|
}
|
|
18561
|
-
var
|
|
18662
|
+
var bold6 = (s) => `\x1B[1m${s}\x1B[0m`, dim6 = (s) => `\x1B[2m${s}\x1B[0m`, COMMANDS, COL_WIDTH;
|
|
18562
18663
|
var init_help = __esm(() => {
|
|
18563
18664
|
COMMANDS = [
|
|
18564
18665
|
["install", "Full-stack installer: pi, beads, dolt, MCP registration, hooks"],
|
|
@@ -18570,7 +18671,7 @@ var init_help = __esm(() => {
|
|
|
18570
18671
|
["status", "Show system health (pi, beads, MCP)"],
|
|
18571
18672
|
["help", "Show this help message"]
|
|
18572
18673
|
];
|
|
18573
|
-
COL_WIDTH = Math.max(...COMMANDS.map(([
|
|
18674
|
+
COL_WIDTH = Math.max(...COMMANDS.map(([cmd2]) => cmd2.length));
|
|
18574
18675
|
});
|
|
18575
18676
|
|
|
18576
18677
|
// node_modules/zod/v4/core/core.js
|
|
@@ -26315,7 +26416,7 @@ class SpecialistsServer {
|
|
|
26315
26416
|
|
|
26316
26417
|
// src/index.ts
|
|
26317
26418
|
var sub = process.argv[2];
|
|
26318
|
-
async function
|
|
26419
|
+
async function run9() {
|
|
26319
26420
|
if (sub === "install") {
|
|
26320
26421
|
const { run: handler } = await Promise.resolve().then(() => (init_install(), exports_install));
|
|
26321
26422
|
return handler();
|
|
@@ -26340,6 +26441,10 @@ async function run8() {
|
|
|
26340
26441
|
const { run: handler } = await Promise.resolve().then(() => (init_run(), exports_run));
|
|
26341
26442
|
return handler();
|
|
26342
26443
|
}
|
|
26444
|
+
if (sub === "status") {
|
|
26445
|
+
const { run: handler } = await Promise.resolve().then(() => (init_status(), exports_status));
|
|
26446
|
+
return handler();
|
|
26447
|
+
}
|
|
26343
26448
|
if (sub === "help" || sub === "--help" || sub === "-h") {
|
|
26344
26449
|
const { run: handler } = await Promise.resolve().then(() => (init_help(), exports_help));
|
|
26345
26450
|
return handler();
|
|
@@ -26348,7 +26453,7 @@ async function run8() {
|
|
|
26348
26453
|
const server = new SpecialistsServer;
|
|
26349
26454
|
await server.start();
|
|
26350
26455
|
}
|
|
26351
|
-
|
|
26456
|
+
run9().catch((error2) => {
|
|
26352
26457
|
logger.error(`Fatal error: ${error2}`);
|
|
26353
26458
|
process.exit(1);
|
|
26354
26459
|
});
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@jaggerxtrm/specialists",
|
|
3
|
-
"version": "2.1.
|
|
3
|
+
"version": "2.1.13",
|
|
4
4
|
"description": "OmniSpecialist — 7-tool MCP orchestration layer powered by the Specialist System. Discover and execute .specialist.yaml files across project/user/system scopes via pi.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"type": "module",
|