@lmzhen/dsh-evolution-curator 0.1.0-rc.61 → 0.1.0-rc.63

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/lib/index.js +16 -3
  2. package/package.json +7 -7
package/lib/index.js CHANGED
@@ -3,7 +3,7 @@ import { randomUUID } from "node:crypto";
3
3
  import { join } from "node:path";
4
4
  import { BlockAssembler, createUserMessage } from "@deepseek-ai/dsh-llm";
5
5
  import z from "@deepseek-ai/schemastery";
6
- import { CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_MIN_IDLE_HOURS, DEFAULT_STALE_AFTER_DAYS, EvolutionGateSet, SkillLibrary, buildCuratorRunReport, computeLifecycleTransitions, computeQualityScores, computeScopeView, emptyRecord, evolutionHome, evolutionIoAdapter, loadSuppressedNames, loadUsage, parseCuratorNominations, relatedSkillNames, renderCuratorReportMarkdown, saveUsage, updateSuppressedNames } from "@lmzhen/dsh-evolution-core";
6
+ import { CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_MIN_IDLE_HOURS, DEFAULT_STALE_AFTER_DAYS, EvolutionGateSet, SkillLibrary, buildCuratorRunReport, computeDedupGroups, computeLifecycleTransitions, computeQualityScores, computeScopeView, emptyRecord, evolutionHome, evolutionIoAdapter, loadSuppressedNames, loadUsage, parseCuratorNominations, relatedSkillNames, renderCuratorReportMarkdown, saveUsage, updateSuppressedNames } from "@lmzhen/dsh-evolution-core";
7
7
  //#region lib/types/index.js
8
8
  /**
9
9
  * Deterministic skill lifecycle curator with interval gate and archive.
@@ -196,7 +196,7 @@ var EvolutionCurator = class extends Service {
196
196
  const parsed = parseCuratorNominations(assembler.blocks().filter((block) => block.type === "text").map((block) => block.text).join("\n"));
197
197
  return {
198
198
  prunings: parsed.prunings.filter((name) => candidates.includes(name)),
199
- consolidations: parsed.consolidations
199
+ consolidations: parsed.consolidations.filter((item) => candidates.includes(item.from))
200
200
  };
201
201
  } catch {
202
202
  return empty;
@@ -334,6 +334,12 @@ var EvolutionCurator = class extends Service {
334
334
  suppressed: suppressedNames
335
335
  });
336
336
  const { bundledNames, treeNames } = await this.seedBaseline(usage);
337
+ const contents = /* @__PURE__ */ new Map();
338
+ for (const name of treeNames) {
339
+ const text = await this.skills.read(name);
340
+ if (text) contents.set(name, text);
341
+ }
342
+ const dedupMembers = [...new Set(computeDedupGroups({ contents }).filter((group) => group.length >= 2).flat())];
337
343
  await this.scoreTree(usage, treeNames);
338
344
  const result = computeLifecycleTransitions(usage, {
339
345
  staleAfterDays: lifecycle.staleAfterDays,
@@ -346,12 +352,14 @@ var EvolutionCurator = class extends Service {
346
352
  suppressedNames,
347
353
  referencedSkillNames: this.referencedSkillNames
348
354
  }, /* @__PURE__ */ new Date(), gates);
349
- const nominations = this.llmReview ? await this.recommend(result.markStale, { dryRun }) : {
355
+ const recommendPool = [...new Set([...result.markStale, ...dedupMembers])];
356
+ const nominations = this.llmReview ? await this.recommend(recommendPool, { dryRun }) : {
350
357
  prunings: [],
351
358
  consolidations: []
352
359
  };
353
360
  const gatedNominations = {
354
361
  ...nominations,
362
+ prunings: nominations.prunings.filter((name) => result.markStale.includes(name)),
355
363
  consolidations: gateConsolidations(nominations.consolidations, gates)
356
364
  };
357
365
  const llmNominations = gatedNominations.prunings;
@@ -365,6 +373,7 @@ var EvolutionCurator = class extends Service {
365
373
  bundledNames,
366
374
  suppressedNames,
367
375
  root,
376
+ recommendPool: new Set(recommendPool),
368
377
  failedFrom: new Map(result.transitions.filter((t) => t.to === "archived").map((t) => [t.name, t.from]))
369
378
  });
370
379
  if (!dryRun) this.lastRun = Date.now();
@@ -521,6 +530,10 @@ var EvolutionCurator = class extends Service {
521
530
  errors.push(`${nomination.from}: consolidation target or source missing from the skill tree`);
522
531
  continue;
523
532
  }
533
+ if (!input.recommendPool.has(nomination.from)) {
534
+ errors.push(`${nomination.from}: consolidation nomination outside the candidate pool — refused (advisory text has no executability authority)`);
535
+ continue;
536
+ }
524
537
  const consolidated = await this.skills.consolidate(nomination.into, [nomination.from], "background_review");
525
538
  if (!consolidated.ok) {
526
539
  errors.push(`${nomination.from}: ${consolidated.message}`);
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmzhen/dsh-evolution-curator",
3
3
  "description": "Deterministic skill lifecycle and recovery (community build)",
4
- "version": "0.1.0-rc.61",
4
+ "version": "0.1.0-rc.63",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -33,20 +33,20 @@
33
33
  "license": "MIT",
34
34
  "dependencies": {
35
35
  "@deepseek-ai/schemastery": "^3.18.1",
36
- "@lmzhen/dsh-evolution-core": "^0.1.0-rc.61"
36
+ "@lmzhen/dsh-evolution-core": "^0.1.0-rc.63"
37
37
  },
38
38
  "peerDependencies": {
39
39
  "@deepseek-ai/cordis": "^4.0.1",
40
40
  "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
41
41
  "@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
42
- "@lmzhen/dsh-evolution-io": "^0.1.0-rc.61",
43
- "@lmzhen/dsh-evolution-state": "^0.1.0-rc.61"
42
+ "@lmzhen/dsh-evolution-io": "^0.1.0-rc.63",
43
+ "@lmzhen/dsh-evolution-state": "^0.1.0-rc.63"
44
44
  },
45
45
  "devDependencies": {
46
46
  "@deepseek-ai/dsh-invariants": "^0.1.1-rc.2",
47
47
  "@deepseek-ai/dsh-llm": "^0.1.1-rc.2",
48
- "@lmzhen/dsh-evolution-core": "^0.1.0-rc.61",
49
- "@lmzhen/dsh-evolution-io": "^0.1.0-rc.61",
50
- "@lmzhen/dsh-evolution-state": "^0.1.0-rc.61"
48
+ "@lmzhen/dsh-evolution-core": "^0.1.0-rc.63",
49
+ "@lmzhen/dsh-evolution-io": "^0.1.0-rc.63",
50
+ "@lmzhen/dsh-evolution-state": "^0.1.0-rc.63"
51
51
  }
52
52
  }