@jaggerxtrm/specialists 3.6.16 → 3.6.18

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 (2) hide show
  1. package/dist/index.js +30 -13
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -20747,13 +20747,22 @@ function parseMemoriesPayload(jsonText) {
20747
20747
  return [];
20748
20748
  }
20749
20749
  function readBdMemories(cwd) {
20750
- const stdout = execSync("bd memories --json", {
20751
- cwd,
20752
- encoding: "utf8",
20753
- stdio: ["ignore", "pipe", "pipe"],
20754
- timeout: 5000
20755
- });
20756
- return parseMemoriesPayload(stdout);
20750
+ try {
20751
+ const stdout = execSync("bd memories --json", {
20752
+ cwd,
20753
+ encoding: "utf8",
20754
+ stdio: ["ignore", "pipe", "pipe"],
20755
+ timeout: 5000
20756
+ });
20757
+ return parseMemoriesPayload(stdout);
20758
+ } catch (error2) {
20759
+ const commandError = error2;
20760
+ const stderr = typeof commandError.stderr === "string" ? commandError.stderr : commandError.stderr?.toString("utf8") ?? "";
20761
+ if (/no beads database found/i.test(stderr)) {
20762
+ return [];
20763
+ }
20764
+ throw error2;
20765
+ }
20757
20766
  }
20758
20767
  function shouldRefreshCache(args) {
20759
20768
  if (args.cacheCount === null || args.cacheLastSyncAtMs === null)
@@ -24894,7 +24903,7 @@ var exports_init = {};
24894
24903
  __export(exports_init, {
24895
24904
  run: () => run6
24896
24905
  });
24897
- import { copyFileSync, cpSync, existsSync as existsSync9, lstatSync, mkdirSync as mkdirSync4, readdirSync as readdirSync3, readFileSync as readFileSync7, readlinkSync, renameSync as renameSync2, symlinkSync, writeFileSync as writeFileSync4 } from "fs";
24906
+ import { copyFileSync, cpSync, existsSync as existsSync9, lstatSync, mkdirSync as mkdirSync4, readdirSync as readdirSync3, readFileSync as readFileSync7, readlinkSync, renameSync as renameSync2, symlinkSync, unlinkSync, writeFileSync as writeFileSync4 } from "fs";
24898
24907
  import { spawnSync as spawnSync9 } from "child_process";
24899
24908
  import { basename as basename3, dirname as dirname5, join as join10, relative, resolve as resolve4 } from "path";
24900
24909
  import { fileURLToPath as fileURLToPath2 } from "url";
@@ -25072,6 +25081,7 @@ function installProjectHooks(cwd) {
25072
25081
  let copied = 0;
25073
25082
  let skippedCopies = 0;
25074
25083
  let linked = 0;
25084
+ let rewiredLinks = 0;
25075
25085
  let skippedLinks = 0;
25076
25086
  for (const file of hooks) {
25077
25087
  const src = join10(sourceDir, file);
@@ -25083,21 +25093,25 @@ function installProjectHooks(cwd) {
25083
25093
  copied++;
25084
25094
  }
25085
25095
  const claudeHookPath = join10(claudeHooksDir, file);
25096
+ const relativeTarget = `../../.xtrm/hooks/specialists/${file}`;
25086
25097
  if (existsSync9(claudeHookPath)) {
25087
25098
  const stats = lstatSync(claudeHookPath);
25088
25099
  if (!stats.isSymbolicLink()) {
25089
- skippedLinks++;
25100
+ unlinkSync(claudeHookPath);
25101
+ symlinkSync(relativeTarget, claudeHookPath);
25102
+ rewiredLinks++;
25090
25103
  continue;
25091
25104
  }
25092
25105
  const currentTarget = resolve4(dirname5(claudeHookPath), readlinkSync(claudeHookPath));
25093
25106
  if (currentTarget !== xtrmDest) {
25094
- skippedLinks++;
25107
+ unlinkSync(claudeHookPath);
25108
+ symlinkSync(relativeTarget, claudeHookPath);
25109
+ rewiredLinks++;
25095
25110
  continue;
25096
25111
  }
25097
25112
  skippedLinks++;
25098
25113
  continue;
25099
25114
  }
25100
- const relativeTarget = `../../.xtrm/hooks/specialists/${file}`;
25101
25115
  symlinkSync(relativeTarget, claudeHookPath);
25102
25116
  linked++;
25103
25117
  }
@@ -25107,6 +25121,8 @@ function installProjectHooks(cwd) {
25107
25121
  skip(`${skippedCopies} hook${skippedCopies === 1 ? "" : "s"} already exist in .xtrm/hooks/specialists/ (not overwritten)`);
25108
25122
  if (linked > 0)
25109
25123
  ok(`linked ${linked} hook${linked === 1 ? "" : "s"} in .claude/hooks/ -> .xtrm/hooks/specialists/`);
25124
+ if (rewiredLinks > 0)
25125
+ ok(`rewired ${rewiredLinks} legacy hook${rewiredLinks === 1 ? "" : "s"} in .claude/hooks/ -> .xtrm/hooks/specialists/`);
25110
25126
  if (skippedLinks > 0)
25111
25127
  skip(`${skippedLinks} hook${skippedLinks === 1 ? "" : "s"} already present in .claude/hooks/ (left unchanged)`);
25112
25128
  }
@@ -25499,8 +25515,9 @@ ${bold5("specialists init")}
25499
25515
  } else {
25500
25516
  skip("memories FTS cache sync skipped (not available)");
25501
25517
  }
25502
- } catch {
25503
- warn("memories FTS cache sync failed during init (non-fatal)");
25518
+ } catch (error2) {
25519
+ const message = error2 instanceof Error ? error2.message : String(error2);
25520
+ warn(`memories FTS cache sync failed during init (non-fatal): ${message}`);
25504
25521
  }
25505
25522
  const postconditionWarnings = validateInitPostconditions(cwd);
25506
25523
  if (postconditionWarnings.length > 0) {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaggerxtrm/specialists",
3
- "version": "3.6.16",
3
+ "version": "3.6.18",
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",