@lmzhen/dsh-evolution-curator 0.22.0 → 0.23.0

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 CHANGED
@@ -3,7 +3,8 @@ 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_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MIN_IDLE_HOURS, DEFAULT_SKILL_LIMITS, DEFAULT_STALE_AFTER_DAYS, EvolutionGateSet, INSTANCE_KEYS, MAX_TIMER_DELAY_MS, PROMPT_BUNDLE, SKILL_NAME_RE, buildCuratorRunReport, claimInstance, clampOnce, clampedNumber, computeDedupGroups, computeLifecycleTransitions, computePrefixClusters, computeQualityScores, computeScopeView, contentHash, emptyRecord, entryTarget, evolutionHome, evolutionIoAdapter, foldCuratorFields, isPresent, isUnknown, liveBool, loadSuppressedNames, loadUsage, markerEntryName, mutateUsage, newSkillLibrary, paramRowId, parseCuratorNominations, parseFrontmatter, pickWithPolicy, policyStageLimits, probeList, probeText, readNumberParam, relatedSkillNames, releaseInstance, renderCuratorReportMarkdown, reportTime, reportsSweepLockTarget, sessionLastEventTime, sweepReports, transactIo, unwrapLive, updateSuppressedNames, usageObserved, userSetKeys, verifyPromptBundle } from "@lmzhen/dsh-evolution-core";
6
+ import { preferProvider } from "@lmzhen/dsh-evolution-io";
7
+ import { CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_CURATOR_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MIN_IDLE_HOURS, DEFAULT_REVIEW_TIMEOUT_MS, DEFAULT_SKILL_LIMITS, DEFAULT_STALE_AFTER_DAYS, EvolutionGateSet, INSTANCE_KEYS, MAX_TIMER_DELAY_MS, PROMPT_BUNDLE, SKILL_NAME_RE, buildCuratorRunReport, claimInstance, clampOnce, clampedNumber, computeDedupGroups, computeLifecycleTransitions, computePrefixClusters, computeQualityScores, computeScopeView, contentHash, emptyRecord, entryTarget, evolutionHome, evolutionIoAdapter, foldCuratorFields, isPresent, isUnknown, liveBool, loadSuppressedNames, loadUsage, markerEntryName, mutateUsage, newSkillLibrary, paramRowId, parseCuratorNominations, parseFrontmatter, pickWithPolicy, policyStageLimits, probeList, probeText, readNumberParam, relatedSkillNames, releaseInstance, renderCuratorReportMarkdown, reportTime, reportsSweepLockTarget, sessionLastEventTime, sweepReports, transactIo, unwrapLive, updateSuppressedNames, usageObserved, userSetKeys, verifyPromptBundle } from "@lmzhen/dsh-evolution-core";
7
8
  //#region lib/types/index.js
8
9
  /**
9
10
  * Deterministic skill lifecycle curator with interval gate and archive.
@@ -11,12 +12,6 @@ import { CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEFAULT_ARCHIVE_AFTER_DAYS, DEF
11
12
  */
12
13
  /** Quality-warned skills may turn stale after this many idle days (package-private tunable, P2-8). */
13
14
  const DEFAULT_QUALITY_WARN_STALE_AFTER_DAYS = 7;
14
- /** B-10 (v18): the optional LLM nomination pass gets its own timeout so a
15
- * hung/unresponsive provider cannot hold the control-plane mutex forever
16
- * (`run()` never returns; `restore()`/`consolidate()` queue behind it).
17
- * 120s matches the review subagent default; the 32-bit ceiling is Node's
18
- * timer-delay limit (`AbortSignal.timeout` throws above it). */
19
- const DEFAULT_CURATOR_REVIEW_TIMEOUT_MS = 12e4;
20
15
  /**
21
16
  * The cross-field rule the schema cannot express (A2-17): an archive threshold
22
17
  * below the stale threshold makes the engine reactivate stale records instead of
@@ -59,7 +54,7 @@ var EvolutionCurator = class extends Service {
59
54
  autoStart: z.boolean().default(true),
60
55
  bootGraceSeconds: z.number().min(0).default(DEFAULT_CURATOR_BOOT_GRACE_SECONDS),
61
56
  curatorReviewMaxTokens: z.number().min(1).default(DEFAULT_CURATOR_REVIEW_MAX_TOKENS).volatile(),
62
- curatorReviewTimeoutMs: z.number().min(1).max(MAX_TIMER_DELAY_MS).default(DEFAULT_CURATOR_REVIEW_TIMEOUT_MS).volatile(),
57
+ curatorReviewTimeoutMs: z.number().min(1).max(MAX_TIMER_DELAY_MS).default(DEFAULT_REVIEW_TIMEOUT_MS).volatile(),
63
58
  healthSoftBodyChars: z.number().min(1).default(DEFAULT_HEALTH_THRESHOLDS.softBodyChars).volatile(),
64
59
  healthStampDensityPerKb: z.number().min(1).default(DEFAULT_HEALTH_THRESHOLDS.stampDensityPerKb).volatile(),
65
60
  healthChurnMinPatches: z.number().min(1).default(DEFAULT_HEALTH_THRESHOLDS.churnMinPatches).volatile()
@@ -121,7 +116,7 @@ var EvolutionCurator = class extends Service {
121
116
  if (typeof disposer === "function") ctx.effect(() => disposer, "evolution-curator: settings presentation");
122
117
  });
123
118
  if (!verifyPromptBundle(PROMPT_BUNDLE)) throw new Error("dsh-evolution prompt bundle integrity check failed; refusing to run the curator");
124
- this.io = evolutionIoAdapter(() => ctx.evolutionIo.provider());
119
+ this.io = evolutionIoAdapter(() => preferProvider(ctx.evolutionIo, ["fs"]));
125
120
  this.skills = newSkillLibrary({
126
121
  config,
127
122
  io: this.io,
@@ -230,7 +225,7 @@ var EvolutionCurator = class extends Service {
230
225
  minIdleFailOpen: this.rowBoolean("minIdleFailOpen", true),
231
226
  llmReview: this.rowBoolean("llmReview", false),
232
227
  curatorReviewMaxTokens: number("curatorReviewMaxTokens", DEFAULT_CURATOR_REVIEW_MAX_TOKENS, 1),
233
- curatorReviewTimeoutMs: number("curatorReviewTimeoutMs", DEFAULT_CURATOR_REVIEW_TIMEOUT_MS, 1, MAX_TIMER_DELAY_MS),
228
+ curatorReviewTimeoutMs: number("curatorReviewTimeoutMs", DEFAULT_REVIEW_TIMEOUT_MS, 1, MAX_TIMER_DELAY_MS),
234
229
  healthSoftBodyChars: number("healthSoftBodyChars", DEFAULT_HEALTH_THRESHOLDS.softBodyChars, 1),
235
230
  healthStampDensityPerKb: number("healthStampDensityPerKb", DEFAULT_HEALTH_THRESHOLDS.stampDensityPerKb, 1),
236
231
  healthChurnMinPatches: number("healthChurnMinPatches", DEFAULT_HEALTH_THRESHOLDS.churnMinPatches, 1)
@@ -17,6 +17,11 @@ import { EvolutionGateSet, type SkillLibrary } from '@lmzhen/dsh-evolution-core'
17
17
  import { type CuratorConsolidation, type CuratorNominations, type CuratorRunReport, type ScopeView, type SkillActionResult, type SkillHealthVerdict } from '@lmzhen/dsh-evolution-core';
18
18
  import type { SkillVersion } from '@lmzhen/dsh-evolution-core';
19
19
  import type { CuratorStateRecord } from '@lmzhen/dsh-evolution-state';
20
+ /** B-10 (v18): the optional LLM nomination pass gets its own timeout so a
21
+ * hung/unresponsive provider cannot hold the control-plane mutex forever
22
+ * (`run()` never returns; `restore()`/`consolidate()` queue behind it).
23
+ * 120s matches the review subagent default; the 32-bit ceiling is Node's
24
+ * timer-delay limit (`AbortSignal.timeout` throws above it). */
20
25
  declare module '@deepseek-ai/cordis' {
21
26
  interface Context {
22
27
  evolutionCurator: EvolutionCurator;
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.22.0",
4
+ "version": "0.23.0",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },
@@ -27,20 +27,20 @@
27
27
  "license": "MIT",
28
28
  "dependencies": {
29
29
  "@deepseek-ai/schemastery": "^3.18.4",
30
- "@lmzhen/dsh-evolution-core": "^0.22.0"
30
+ "@lmzhen/dsh-evolution-core": "^0.23.0"
31
31
  },
32
32
  "peerDependencies": {
33
33
  "@deepseek-ai/cordis": "^4.0.1",
34
34
  "@deepseek-ai/dsh-llm": "^0.2.0-rc.1",
35
35
  "@deepseek-ai/dsh-session": "^0.2.0-rc.1",
36
- "@lmzhen/dsh-evolution-io": "^0.22.0",
37
- "@lmzhen/dsh-evolution-state": "^0.22.0"
36
+ "@lmzhen/dsh-evolution-io": "^0.23.0",
37
+ "@lmzhen/dsh-evolution-state": "^0.23.0"
38
38
  },
39
39
  "devDependencies": {
40
40
  "@deepseek-ai/dsh-llm": "^0.2.0-rc.1",
41
41
  "@deepseek-ai/dsh-session": "^0.2.0-rc.1",
42
- "@lmzhen/dsh-evolution-core": "^0.22.0",
43
- "@lmzhen/dsh-evolution-io": "^0.22.0",
44
- "@lmzhen/dsh-evolution-state": "^0.22.0"
42
+ "@lmzhen/dsh-evolution-core": "^0.23.0",
43
+ "@lmzhen/dsh-evolution-io": "^0.23.0",
44
+ "@lmzhen/dsh-evolution-state": "^0.23.0"
45
45
  }
46
46
  }