@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.
- package/lib/index.js +16 -3
- 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
|
|
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.
|
|
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.
|
|
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.
|
|
43
|
-
"@lmzhen/dsh-evolution-state": "^0.1.0-rc.
|
|
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.
|
|
49
|
-
"@lmzhen/dsh-evolution-io": "^0.1.0-rc.
|
|
50
|
-
"@lmzhen/dsh-evolution-state": "^0.1.0-rc.
|
|
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
|
}
|