@jaggerxtrm/specialists 3.15.0 → 3.15.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.
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schema_version": "1.0.0",
3
- "package_version": "3.15.0",
3
+ "package_version": "3.15.1",
4
4
  "shipped_skills": [
5
5
  {
6
6
  "path": "config/skills/memory-audit-transaction/SKILL.md",
package/dist/index.js CHANGED
@@ -23262,11 +23262,14 @@ __export(exports_list_rules, {
23262
23262
  });
23263
23263
  import { existsSync as existsSync9, readFileSync as readFileSync6, readdirSync } from "fs";
23264
23264
  import { resolve as resolve5, join as join8, basename as basename3 } from "path";
23265
+ function resolvePackageDir(asset) {
23266
+ return resolveCanonicalAssetDir(asset) ?? null;
23267
+ }
23265
23268
  function discoverRuleSets(cwd) {
23266
23269
  const seen = new Map;
23267
23270
  for (const { rel, tier } of RULE_TIERS) {
23268
- const dir = resolve5(cwd, rel);
23269
- if (!existsSync9(dir))
23271
+ const dir = rel === "__package__/mandatory-rules" ? resolvePackageDir("mandatory-rules") : resolve5(cwd, rel);
23272
+ if (!dir || !existsSync9(dir))
23270
23273
  continue;
23271
23274
  let files;
23272
23275
  try {
@@ -23287,8 +23290,8 @@ function discoverRuleSets(cwd) {
23287
23290
  function discoverSpecialists(cwd) {
23288
23291
  const seen = new Map;
23289
23292
  for (const { rel, tier } of SPEC_TIERS) {
23290
- const dir = resolve5(cwd, rel);
23291
- if (!existsSync9(dir))
23293
+ const dir = rel === "__package__/specialists" ? resolvePackageDir("specialists") : resolve5(cwd, rel);
23294
+ if (!dir || !existsSync9(dir))
23292
23295
  continue;
23293
23296
  let files;
23294
23297
  try {
@@ -23391,7 +23394,8 @@ function printUsage() {
23391
23394
  "Usage: specialists list-rules [--rule <id>] [--specialist <name>] [--json]",
23392
23395
  "",
23393
23396
  "Show which mandatory rules are loaded by which specialists.",
23394
- "Walks tiers in runner-order: .specialists/ \u2192 .specialists/default/ \u2192 config/.",
23397
+ "Walks cwd tiers first, then package-canonical fallback.",
23398
+ "Priority: .specialists/ \u2192 .specialists/default/ \u2192 config/ \u2192 package-canonical.",
23395
23399
  "",
23396
23400
  "Options:",
23397
23401
  " --rule <id> Filter to one rule, list every spec that loads it",
@@ -23496,16 +23500,19 @@ Orphan rules (defined but not loaded by any specialist):`);
23496
23500
  var RULE_TIERS, SPEC_TIERS;
23497
23501
  var init_list_rules = __esm(() => {
23498
23502
  init_mandatory_rules();
23503
+ init_canonical_asset_resolver();
23499
23504
  RULE_TIERS = [
23500
23505
  { rel: ".specialists/user/mandatory-rules", tier: "user" },
23501
23506
  { rel: ".specialists/mandatory-rules", tier: "overlay" },
23502
23507
  { rel: ".specialists/default/mandatory-rules", tier: "default" },
23503
- { rel: "config/mandatory-rules", tier: "config" }
23508
+ { rel: "config/mandatory-rules", tier: "config" },
23509
+ { rel: "__package__/mandatory-rules", tier: "package-canonical" }
23504
23510
  ];
23505
23511
  SPEC_TIERS = [
23506
23512
  { rel: ".specialists/user", tier: "user" },
23507
23513
  { rel: ".specialists/default", tier: "default" },
23508
- { rel: "config/specialists", tier: "config" }
23514
+ { rel: "config/specialists", tier: "config" },
23515
+ { rel: "__package__/specialists", tier: "package-canonical" }
23509
23516
  ];
23510
23517
  });
23511
23518
 
@@ -27456,12 +27463,13 @@ ${bold5("specialists init")}
27456
27463
  }
27457
27464
  warnMissingOptionalPrerequisites();
27458
27465
  if (syncDefaults) {
27466
+ warn("--sync-defaults is deprecated. This creates drift debt; use sp pin <id> for intentional pins.");
27459
27467
  migrateLegacySpecialists(cwd, "default");
27460
27468
  copyCanonicalSpecialists(cwd);
27461
27469
  copyCanonicalMandatoryRules(cwd);
27462
27470
  copyCanonicalNodeConfigs(cwd);
27463
27471
  } else {
27464
- skip(".specialists/default/ not synced (pass --sync-defaults to write canonical specialists, mandatory-rules, and nodes)");
27472
+ skip(".specialists/default/ not synced (package canonical by default; use sp pin <id> for intentional pins)");
27465
27473
  }
27466
27474
  migrateLegacySpecialists(cwd, "user");
27467
27475
  createSpecialistsDirs(cwd);
@@ -27505,7 +27513,7 @@ ${bold5("Done!")}
27505
27513
  console.log("");
27506
27514
  console.log(` ${dim5(".specialists/ structure:")}`);
27507
27515
  console.log(` .specialists/`);
27508
- console.log(` \u251C\u2500\u2500 default/ ${dim5("# canonical specialists (from init --sync-defaults)")}`);
27516
+ console.log(` \u251C\u2500\u2500 default/ ${dim5("# intentional pins only; package canonical by default")}`);
27509
27517
  console.log(` \u251C\u2500\u2500 user/ ${dim5("# your custom specialists")}`);
27510
27518
  console.log(` \u251C\u2500\u2500 db/ ${dim5("# observability SQLite (gitignored)")}`);
27511
27519
  console.log(` \u251C\u2500\u2500 jobs/ ${dim5("# runtime (gitignored)")}`);
@@ -37811,20 +37819,65 @@ function renderBuffered(args) {
37811
37819
  return lines.join(`
37812
37820
  `);
37813
37821
  }
37822
+ function stripAnsiEscapeSequences(text) {
37823
+ return text.replace(ANSI_ESCAPE_SEQUENCE_PATTERN, "");
37824
+ }
37814
37825
  async function follow(args) {
37815
- process.stdout.write("\x1B[?25l");
37816
- process.on("exit", () => process.stdout.write("\x1B[?25h"));
37826
+ const isTTY = Boolean(process.stdout.isTTY);
37827
+ let lastFrame = "";
37828
+ let interval;
37829
+ let cleanedUp = false;
37830
+ const write = (text) => {
37831
+ process.stdout.write(text);
37832
+ };
37833
+ const enterFollowMode = () => {
37834
+ if (!isTTY)
37835
+ return;
37836
+ write(ANSI_ENTER_ALT_SCREEN);
37837
+ write(ANSI_HIDE_CURSOR);
37838
+ };
37839
+ const exitFollowMode = () => {
37840
+ if (!isTTY || cleanedUp)
37841
+ return;
37842
+ cleanedUp = true;
37843
+ write(ANSI_SHOW_CURSOR);
37844
+ write(ANSI_EXIT_ALT_SCREEN);
37845
+ };
37817
37846
  const drawFrame = () => {
37818
37847
  const frame = renderBuffered(args);
37819
- process.stdout.write(`\x1B[H\x1B[J${frame}
37848
+ if (frame === lastFrame)
37849
+ return;
37850
+ lastFrame = frame;
37851
+ if (!isTTY) {
37852
+ write(`${stripAnsiEscapeSequences(frame)}
37853
+
37820
37854
  `);
37855
+ return;
37856
+ }
37857
+ write(`${ANSI_CURSOR_HOME}${ANSI_ERASE_DOWN}${frame}
37858
+ `);
37859
+ };
37860
+ const cleanup = (exitCode) => {
37861
+ if (interval)
37862
+ clearInterval(interval);
37863
+ exitFollowMode();
37864
+ if (exitCode !== undefined)
37865
+ process.exit(exitCode);
37821
37866
  };
37822
- process.stdout.write("\x1B[2J\x1B[H");
37867
+ process.stdout.on("error", (error2) => {
37868
+ if (error2.code === "EPIPE") {
37869
+ cleanup(0);
37870
+ return;
37871
+ }
37872
+ throw error2;
37873
+ });
37874
+ process.once("SIGINT", () => cleanup(130));
37875
+ process.once("SIGTERM", () => cleanup(143));
37876
+ process.once("exit", () => cleanup());
37877
+ enterFollowMode();
37823
37878
  drawFrame();
37824
37879
  await new Promise(() => {
37825
- setInterval(() => {
37826
- drawFrame();
37827
- }, 1000);
37880
+ interval = setInterval(drawFrame, 1000);
37828
37881
  });
37829
37882
  }
37830
37883
  async function run16() {
@@ -37848,7 +37901,7 @@ async function run16() {
37848
37901
  sqliteClient?.close();
37849
37902
  }
37850
37903
  }
37851
- var ACTIVE_STATES, TERMINAL_STATES, BEAD_TITLE_CACHE, STATUS_PRIORITY;
37904
+ var ACTIVE_STATES, TERMINAL_STATES, BEAD_TITLE_CACHE, STATUS_PRIORITY, ANSI_ENTER_ALT_SCREEN = "\x1B[?1049h", ANSI_EXIT_ALT_SCREEN = "\x1B[?1049l", ANSI_HIDE_CURSOR = "\x1B[?25l", ANSI_SHOW_CURSOR = "\x1B[?25h", ANSI_CURSOR_HOME = "\x1B[H", ANSI_ERASE_DOWN = "\x1B[J", ANSI_ESCAPE_SEQUENCE_PATTERN;
37852
37905
  var init_ps = __esm(() => {
37853
37906
  init_format_helpers();
37854
37907
  init_supervisor();
@@ -37869,6 +37922,7 @@ var init_ps = __esm(() => {
37869
37922
  error: 0,
37870
37923
  cancelled: 0
37871
37924
  };
37925
+ ANSI_ESCAPE_SEQUENCE_PATTERN = /\x1B\[[0-?]*[ -/]*[@-~]/g;
37872
37926
  });
37873
37927
 
37874
37928
  // src/cli/result.ts
@@ -40448,9 +40502,9 @@ function relPath(path, base) {
40448
40502
  function makeFinding(repoRoot, kind, scope, path, canonicalPath, bytesEqual) {
40449
40503
  const rel = relPath(path, repoRoot);
40450
40504
  if (scope === "default") {
40451
- return bytesEqual ? { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "redundant-safe-to-prune", bytes_equal: true, suggested_action: `safe prune`, suggestion_command: `sp prune-stale-defaults --root ${repoRoot}` } : { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "diverged-consider-migrating-to-user", bytes_equal: false, suggested_action: `consider migrate to .specialists/user/`, suggestion_command: `cp ${rel} .specialists/user/` };
40505
+ return bytesEqual ? { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "redundant-safe-to-prune", bytes_equal: true, suggested_action: "safe prune", suggestion_command: `sp prune-stale-defaults --root ${repoRoot}` } : { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "diverged-safe-to-prune", bytes_equal: false, suggested_action: "safe prune", suggestion_command: `cp ${rel} .specialists/user/` };
40452
40506
  }
40453
- return bytesEqual ? { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "useless-override-safe-to-remove", bytes_equal: true, suggested_action: `safe remove`, suggestion_command: `rm ${rel}` } : { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "diverged-consider-removing-or-refactoring", bytes_equal: false, suggested_action: `keep if intentional override`, suggestion_command: `rm ${rel}` };
40507
+ return bytesEqual ? { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "useless-override-safe-to-remove", bytes_equal: true, suggested_action: "safe remove", suggestion_command: `rm ${rel}` } : { repo_root: repoRoot, kind, scope, path, canonical_path: canonicalPath, status: "diverged-consider-removing-or-refactoring", bytes_equal: false, suggested_action: "keep if intentional override", suggestion_command: `rm ${rel}` };
40454
40508
  }
40455
40509
  function resolveDriftAssets() {
40456
40510
  return ASSETS.map((asset) => ({ ...asset, canonicalDir: resolveCanonicalAssetDir(asset.kind) }));
@@ -40508,14 +40562,14 @@ function detectDriftUnderRoot(root) {
40508
40562
  repos: repos.length,
40509
40563
  findings: summary.length,
40510
40564
  redundant_defaults: summary.filter((f) => f.status === "redundant-safe-to-prune").length,
40511
- diverged_defaults: summary.filter((f) => f.status === "diverged-consider-migrating-to-user").length,
40565
+ diverged_defaults: summary.filter((f) => f.status === "diverged-safe-to-prune").length,
40512
40566
  useless_overrides: summary.filter((f) => f.status === "useless-override-safe-to-remove").length,
40513
40567
  diverged_overrides: summary.filter((f) => f.status === "diverged-consider-removing-or-refactoring").length
40514
40568
  }
40515
40569
  };
40516
40570
  }
40517
- function pruneStaleDefaults(repoRoot, dryRun) {
40518
- const targets = detectDriftForRepo(repoRoot).filter((f) => f.scope === "default" && f.bytes_equal === true).map((f) => f.path);
40571
+ function pruneStaleDefaults(repoRoot, dryRun, keepDiverged = false) {
40572
+ const targets = detectDriftForRepo(repoRoot).filter((f) => f.scope === "default" && (keepDiverged ? f.bytes_equal === true : true)).map((f) => f.path);
40519
40573
  if (!dryRun) {
40520
40574
  for (const target of targets)
40521
40575
  rmSync5(target, { recursive: true, force: true });
@@ -40543,12 +40597,17 @@ function parseArgs11(argv) {
40543
40597
  let dryRun = false;
40544
40598
  let root = process.cwd();
40545
40599
  let help = false;
40600
+ let keepDiverged = false;
40546
40601
  for (let i = 0;i < argv.length; i += 1) {
40547
40602
  const token = argv[i];
40548
40603
  if (token === "--dry-run") {
40549
40604
  dryRun = true;
40550
40605
  continue;
40551
40606
  }
40607
+ if (token === "--keep-diverged") {
40608
+ keepDiverged = true;
40609
+ continue;
40610
+ }
40552
40611
  if (token === "--root") {
40553
40612
  const value = argv[i + 1];
40554
40613
  if (!value || value.startsWith("--"))
@@ -40563,31 +40622,37 @@ function parseArgs11(argv) {
40563
40622
  }
40564
40623
  throw new Error(`Unknown argument: ${token}`);
40565
40624
  }
40566
- return { dryRun, root, help };
40625
+ return { dryRun, root, help, keepDiverged };
40567
40626
  }
40568
40627
  function printHelp() {
40569
- console.log("Usage: sp prune-stale-defaults [--dry-run] [--root <path>]");
40570
- console.log(" --dry-run List stale default snapshots without pruning");
40571
- console.log(" --root Repo root to scan");
40628
+ console.log("Usage: sp prune-stale-defaults [--dry-run] [--keep-diverged] [--root <path>]");
40629
+ console.log(" --dry-run List stale default snapshots without pruning");
40630
+ console.log(" --keep-diverged Preserve diverged .specialists/default entries");
40631
+ console.log(" --root Repo root to scan");
40572
40632
  }
40573
40633
  async function run27(argv = process.argv.slice(3)) {
40574
- const { dryRun, root, help } = parseArgs11(argv);
40634
+ const { dryRun, root, help, keepDiverged } = parseArgs11(argv);
40575
40635
  if (help) {
40576
40636
  printHelp();
40577
40637
  return;
40578
40638
  }
40579
- const findings = detectDriftForRepo(root).filter((f) => f.scope === "default" && f.bytes_equal === true);
40580
- if (findings.length === 0) {
40639
+ const allFindings = detectDriftForRepo(root).filter((f) => f.scope === "default");
40640
+ const divergedFindings = allFindings.filter((f) => f.bytes_equal === false);
40641
+ const findings = keepDiverged ? allFindings.filter((f) => f.bytes_equal === true) : allFindings;
40642
+ if (allFindings.length === 0) {
40581
40643
  console.log("No stale default snapshots found.");
40582
40644
  return;
40583
40645
  }
40646
+ if (divergedFindings.length > 0 && !keepDiverged) {
40647
+ console.log("Warning: prune-stale-defaults now removes diverged .specialists/default entries by default. Use --keep-diverged to keep old behavior.");
40648
+ }
40584
40649
  console.log(dryRun ? "Dry run: stale default snapshots" : "Pruning stale default snapshots");
40585
40650
  for (const finding of findings) {
40586
40651
  console.log(`- ${finding.path}`);
40587
40652
  }
40588
40653
  if (dryRun)
40589
40654
  return;
40590
- pruneStaleDefaults(root, false);
40655
+ pruneStaleDefaults(root, false, keepDiverged);
40591
40656
  console.log(`Pruned ${findings.length} stale default snapshot${findings.length === 1 ? "" : "s"}.`);
40592
40657
  }
40593
40658
  var init_prune_stale_defaults = __esm(() => {
@@ -41204,7 +41269,7 @@ function checkManagedMirror(label, canonicalRelativePath, mirrorDir, fixHint) {
41204
41269
  return true;
41205
41270
  }
41206
41271
  if (drifted.length > 0) {
41207
- fail4(`${label}: ${drifted.length} drifted file${drifted.length === 1 ? "" : "s"}`);
41272
+ fail4(`${label}: ${drifted.length} safe prune candidate${drifted.length === 1 ? "" : "s"}`);
41208
41273
  hint(`example: ${drifted.slice(0, 3).join(", ")}${drifted.length > 3 ? ", ..." : ""}`);
41209
41274
  }
41210
41275
  if (missing.length > 0) {
@@ -41220,9 +41285,9 @@ function checkManagedMirror(label, canonicalRelativePath, mirrorDir, fixHint) {
41220
41285
  }
41221
41286
  function checkManagedAssetMirrors() {
41222
41287
  section3("Category B xtrm-managed asset mirrors");
41223
- const specialistsOk = checkManagedMirror("specialists", "specialists", DEFAULT_SPECIALISTS_DIR, "specialists init --sync-defaults");
41224
- const rulesOk = checkManagedMirror("mandatory-rules", "mandatory-rules", join33(DEFAULT_SPECIALISTS_DIR, "mandatory-rules"), "specialists init --sync-defaults");
41225
- const nodesOk = checkManagedMirror("nodes", "nodes", join33(DEFAULT_SPECIALISTS_DIR, "nodes"), "specialists init --sync-defaults");
41288
+ const specialistsOk = checkManagedMirror("specialists", "specialists", DEFAULT_SPECIALISTS_DIR, "sp prune-stale-defaults --apply");
41289
+ const rulesOk = checkManagedMirror("mandatory-rules", "mandatory-rules", join33(DEFAULT_SPECIALISTS_DIR, "mandatory-rules"), "sp prune-stale-defaults --apply");
41290
+ const nodesOk = checkManagedMirror("nodes", "nodes", join33(DEFAULT_SPECIALISTS_DIR, "nodes"), "sp prune-stale-defaults --apply");
41226
41291
  return specialistsOk && rulesOk && nodesOk;
41227
41292
  }
41228
41293
  function checkUserOverlayDrift() {
@@ -41624,7 +41689,7 @@ ${bold13("specialists doctor")}
41624
41689
  console.log(` ${green15("\u2713")} ${bold13("All checks passed")} \u2014 specialists is healthy`);
41625
41690
  } else {
41626
41691
  console.log(` ${yellow12("\u25CB")} ${bold13("Some checks failed")} \u2014 follow the fix hints above`);
41627
- console.log(` ${dim14("specialists init fixes hook + MCP registration; specialists init --sync-skills fixes skill drift/symlink issues; specialists init --sync-defaults fixes managed mirrors.")}`);
41692
+ console.log(` ${dim14("specialists init fixes hook + MCP registration; specialists init --sync-skills fixes skill drift/symlink issues; sp prune-stale-defaults --apply removes stale default mirrors; --sync-defaults is deprecated.")}`);
41628
41693
  }
41629
41694
  console.log("");
41630
41695
  }
@@ -42438,7 +42503,7 @@ var init_help = __esm(() => {
42438
42503
  ["status", "Show health, MCP state, and active jobs"],
42439
42504
  ["ps", "Show actionable dashboard (active + unresolved terminal problems); --json, --all, --follow, --active, --health, --include-terminal, --include-cleaned"],
42440
42505
  ["doctor", "Diagnose installation/runtime problems; --check-drift reports stale .specialists/default/ snapshots"],
42441
- ["prune-stale-defaults", "Prune redundant .specialists/default/ snapshots (byte-identical to package canonical); --dry-run, --root <path>"],
42506
+ ["prune-stale-defaults", "Prune stale .specialists/default snapshots; default removes diverged mirrors too; --dry-run, --keep-diverged, --root <path>"],
42442
42507
  ["quickstart", "Full getting-started guide"],
42443
42508
  ["help", "Show this help"]
42444
42509
  ];
@@ -50502,7 +50567,7 @@ async function run34() {
50502
50567
  "Options:",
50503
50568
  " --json Structured JSON output with trees[].children[] schema",
50504
50569
  " --all Include every row, including cleaned/dead/terminal history",
50505
- " --follow, -f Live-refresh view with spinner animation",
50570
+ " --follow, -f Live dashboard; TTY repaints in-place, pipes append ANSI-free snapshots",
50506
50571
  " --health Show detailed process health tables (default is aggregate only)",
50507
50572
  " --active Show active jobs only; hide unresolved terminal problems",
50508
50573
  " --include-terminal Include terminal history that has not been cleaned",
@@ -1,5 +1,5 @@
1
1
  export interface InitOptions {
2
- /** When true, copy canonical specialists to .specialists/default/ and migrate legacy layouts. */
2
+ /** Deprecated alias: keep only for intentional pin/bootstrap compatibility. */
3
3
  syncDefaults?: boolean;
4
4
  /** When true, overwrite canonical skills in .xtrm/skills/default/ and refresh active symlinks only. */
5
5
  syncSkills?: boolean;
@@ -1 +1 @@
1
- {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/init.ts"],"names":[],"mappings":"AAi2BA,MAAM,WAAW,WAAW;IAC1B,iGAAiG;IACjG,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uGAAuG;IACvG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,GAAG,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAwG/D"}
1
+ {"version":3,"file":"init.d.ts","sourceRoot":"","sources":["../../../src/cli/init.ts"],"names":[],"mappings":"AAi2BA,MAAM,WAAW,WAAW;IAC1B,+EAA+E;IAC/E,YAAY,CAAC,EAAE,OAAO,CAAC;IACvB,uGAAuG;IACvG,UAAU,CAAC,EAAE,OAAO,CAAC;IACrB,2EAA2E;IAC3E,WAAW,CAAC,EAAE,OAAO,CAAC;CACvB;AAED,wBAAsB,GAAG,CAAC,IAAI,GAAE,WAAgB,GAAG,OAAO,CAAC,IAAI,CAAC,CAyG/D"}
@@ -1 +1 @@
1
- {"version":3,"file":"list-rules.d.ts","sourceRoot":"","sources":["../../../src/cli/list-rules.ts"],"names":[],"mappings":"AA6LA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAgFzC"}
1
+ {"version":3,"file":"list-rules.d.ts","sourceRoot":"","sources":["../../../src/cli/list-rules.ts"],"names":[],"mappings":"AAqMA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAgFzC"}
@@ -1 +1 @@
1
- {"version":3,"file":"prune-stale-defaults.d.ts","sourceRoot":"","sources":["../../../src/cli/prune-stale-defaults.ts"],"names":[],"mappings":"AAmCA,wBAAsB,GAAG,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CAkBxF"}
1
+ {"version":3,"file":"prune-stale-defaults.d.ts","sourceRoot":"","sources":["../../../src/cli/prune-stale-defaults.ts"],"names":[],"mappings":"AAyCA,wBAAsB,GAAG,CAAC,IAAI,GAAE,SAAS,MAAM,EAA0B,GAAG,OAAO,CAAC,IAAI,CAAC,CA2BxF"}
@@ -1 +1 @@
1
- {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../../src/cli/ps.ts"],"names":[],"mappings":"AAgnCA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzC"}
1
+ {"version":3,"file":"ps.d.ts","sourceRoot":"","sources":["../../../src/cli/ps.ts"],"names":[],"mappings":"AAsqCA,wBAAsB,GAAG,IAAI,OAAO,CAAC,IAAI,CAAC,CAqBzC"}
@@ -1,5 +1,5 @@
1
1
  export type DriftScope = 'default' | 'user';
2
- export type DriftStatus = 'redundant-safe-to-prune' | 'diverged-consider-migrating-to-user' | 'useless-override-safe-to-remove' | 'diverged-consider-removing-or-refactoring';
2
+ export type DriftStatus = 'redundant-safe-to-prune' | 'diverged-safe-to-prune' | 'useless-override-safe-to-remove' | 'diverged-consider-removing-or-refactoring';
3
3
  export interface DriftAssetKind {
4
4
  kind: 'specialists' | 'mandatory-rules' | 'catalog' | 'nodes';
5
5
  managedDir: string;
@@ -35,5 +35,5 @@ export interface DriftReport {
35
35
  export declare function resolveDriftAssets(): DriftAssetKind[];
36
36
  export declare function detectDriftForRepo(repoRoot: string): DriftFinding[];
37
37
  export declare function detectDriftUnderRoot(root: string): DriftReport;
38
- export declare function pruneStaleDefaults(repoRoot: string, dryRun: boolean): string[];
38
+ export declare function pruneStaleDefaults(repoRoot: string, dryRun: boolean, keepDiverged?: boolean): string[];
39
39
  //# sourceMappingURL=drift-detector.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"drift-detector.d.ts","sourceRoot":"","sources":["../../../src/specialist/drift-detector.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,WAAW,GACnB,yBAAyB,GACzB,qCAAqC,GACrC,iCAAiC,GACjC,2CAA2C,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACzD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AA0CD,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAoBnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA+B9D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,GAAG,MAAM,EAAE,CAQ9E"}
1
+ {"version":3,"file":"drift-detector.d.ts","sourceRoot":"","sources":["../../../src/specialist/drift-detector.ts"],"names":[],"mappings":"AAIA,MAAM,MAAM,UAAU,GAAG,SAAS,GAAG,MAAM,CAAC;AAC5C,MAAM,MAAM,WAAW,GACnB,yBAAyB,GACzB,wBAAwB,GACxB,iCAAiC,GACjC,2CAA2C,CAAC;AAEhD,MAAM,WAAW,cAAc;IAC7B,IAAI,EAAE,aAAa,GAAG,iBAAiB,GAAG,SAAS,GAAG,OAAO,CAAC;IAC9D,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,GAAG,IAAI,CAAC;IAC5B,YAAY,EAAE,MAAM,CAAC;CACtB;AAED,MAAM,WAAW,YAAY;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,IAAI,EAAE,cAAc,CAAC,MAAM,CAAC,CAAC;IAC7B,KAAK,EAAE,UAAU,CAAC;IAClB,IAAI,EAAE,MAAM,CAAC;IACb,cAAc,EAAE,MAAM,GAAG,IAAI,CAAC;IAC9B,MAAM,EAAE,WAAW,CAAC;IACpB,WAAW,EAAE,OAAO,GAAG,IAAI,CAAC;IAC5B,gBAAgB,EAAE,MAAM,CAAC;IACzB,kBAAkB,EAAE,MAAM,CAAC;CAC5B;AAED,MAAM,WAAW,WAAW;IAC1B,IAAI,EAAE,MAAM,CAAC;IACb,KAAK,EAAE,KAAK,CAAC;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,YAAY,EAAE,CAAA;KAAE,CAAC,CAAC;IACzD,OAAO,EAAE;QACP,KAAK,EAAE,MAAM,CAAC;QACd,QAAQ,EAAE,MAAM,CAAC;QACjB,kBAAkB,EAAE,MAAM,CAAC;QAC3B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,iBAAiB,EAAE,MAAM,CAAC;QAC1B,kBAAkB,EAAE,MAAM,CAAC;KAC5B,CAAC;CACH;AA0CD,wBAAgB,kBAAkB,IAAI,cAAc,EAAE,CAErD;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,GAAG,YAAY,EAAE,CAoBnE;AAED,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,WAAW,CA+B9D;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,YAAY,UAAQ,GAAG,MAAM,EAAE,CAQpG"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@jaggerxtrm/specialists",
3
- "version": "3.15.0",
3
+ "version": "3.15.1",
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
  "types": "dist/types/lib.d.ts",