@skill-map/cli 0.16.0 → 0.16.2

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/cli.js CHANGED
@@ -617,6 +617,18 @@ function readIgnoreFileText(scopeRoot) {
617
617
  return void 0;
618
618
  }
619
619
  }
620
+ async function readIgnoreFileTextStable(scopeRoot, opts = {}) {
621
+ const pollMs = opts.pollMs ?? 50;
622
+ const maxAttempts = opts.maxAttempts ?? 10;
623
+ let prev = readIgnoreFileText(scopeRoot);
624
+ for (let i = 0; i < maxAttempts; i++) {
625
+ await new Promise((r) => setTimeout(r, pollMs));
626
+ const curr = readIgnoreFileText(scopeRoot);
627
+ if (curr === prev) return curr;
628
+ prev = curr;
629
+ }
630
+ return prev;
631
+ }
620
632
  var cachedDefaults = null;
621
633
  function loadDefaultsText() {
622
634
  if (cachedDefaults !== null) return cachedDefaults;
@@ -7362,7 +7374,7 @@ import { Command as Command8, Option as Option8 } from "clipanion";
7362
7374
  // package.json
7363
7375
  var package_default = {
7364
7376
  name: "@skill-map/cli",
7365
- version: "0.16.0",
7377
+ version: "0.16.2",
7366
7378
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
7367
7379
  license: "MIT",
7368
7380
  type: "module",
@@ -11591,11 +11603,10 @@ async function runWatchLoop(opts) {
11591
11603
  const runtimeCtx = defaultRuntimeContext();
11592
11604
  const { cwd } = runtimeCtx;
11593
11605
  const loadEffectiveConfig = () => loadConfig({ scope: "project", strict: opts.strict, ...runtimeCtx }).effective;
11594
- const buildCurrentIgnoreFilter = (cfgIn) => {
11595
- const text = readIgnoreFileText(cwd);
11606
+ const composeIgnoreFilter = (cfgIn, ignoreFileText) => {
11596
11607
  const filterOpts = {};
11597
11608
  if (cfgIn.ignore.length > 0) filterOpts.configIgnore = cfgIn.ignore;
11598
- if (text !== void 0) filterOpts.ignoreFileText = text;
11609
+ if (ignoreFileText !== void 0) filterOpts.ignoreFileText = ignoreFileText;
11599
11610
  return buildIgnoreFilter(filterOpts);
11600
11611
  };
11601
11612
  let cfg;
@@ -11606,7 +11617,7 @@ async function runWatchLoop(opts) {
11606
11617
  context.stderr.write(tx(WATCH_TEXTS.configLoadFailure, { message }));
11607
11618
  return ExitCode.Error;
11608
11619
  }
11609
- let ignoreFilter = buildCurrentIgnoreFilter(cfg);
11620
+ let ignoreFilter = composeIgnoreFilter(cfg, readIgnoreFileText(cwd));
11610
11621
  let strict = opts.strict || cfg.scan.strict === true;
11611
11622
  const debounceMs = cfg.scan.watch.debounceMs;
11612
11623
  const dbPath = defaultProjectDbPath(runtimeCtx);
@@ -11743,7 +11754,8 @@ async function runWatchLoop(opts) {
11743
11754
  if (stopRequested) return;
11744
11755
  try {
11745
11756
  cfg = loadEffectiveConfig();
11746
- ignoreFilter = buildCurrentIgnoreFilter(cfg);
11757
+ const stableText = await readIgnoreFileTextStable(cwd);
11758
+ ignoreFilter = composeIgnoreFilter(cfg, stableText);
11747
11759
  strict = opts.strict || cfg.scan.strict === true;
11748
11760
  await handleBatch();
11749
11761
  } catch (err) {
@@ -13237,15 +13249,14 @@ function createWatcherService(opts) {
13237
13249
  cwd,
13238
13250
  homedir: opts.runtimeContext.homedir
13239
13251
  }).effective;
13240
- const buildCurrentIgnoreFilter = (cfgIn) => {
13241
- const ignoreFileText = readIgnoreFileText(cwd);
13252
+ const composeIgnoreFilter = (cfgIn, ignoreFileText) => {
13242
13253
  const filterOpts = {};
13243
13254
  if (cfgIn.ignore.length > 0) filterOpts.configIgnore = cfgIn.ignore;
13244
13255
  if (ignoreFileText !== void 0) filterOpts.ignoreFileText = ignoreFileText;
13245
13256
  return buildIgnoreFilter(filterOpts);
13246
13257
  };
13247
13258
  let cfg = loadEffectiveConfig();
13248
- let ignoreFilter = buildCurrentIgnoreFilter(cfg);
13259
+ let ignoreFilter = composeIgnoreFilter(cfg, readIgnoreFileText(cwd));
13249
13260
  const debounceMs = opts.debounceMsOverride ?? cfg.scan.watch.debounceMs;
13250
13261
  const pluginRuntime = opts.options.noPlugins ? emptyPluginRuntime() : await loadPluginRuntime({ scope: opts.options.scope });
13251
13262
  for (const warn of pluginRuntime.warnings) {
@@ -13321,7 +13332,8 @@ function createWatcherService(opts) {
13321
13332
  if (stopped) return;
13322
13333
  try {
13323
13334
  cfg = loadEffectiveConfig();
13324
- ignoreFilter = buildCurrentIgnoreFilter(cfg);
13335
+ const stableText = await readIgnoreFileTextStable(cwd);
13336
+ ignoreFilter = composeIgnoreFilter(cfg, stableText);
13325
13337
  await runOneBatch();
13326
13338
  } catch (err) {
13327
13339
  const message = formatErrorMessage(err);