@lmzhen/dsh-evolution-core 0.20.0 → 0.22.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
@@ -3485,35 +3485,6 @@ function clampedNumber(value, fallback, opts) {
3485
3485
  if (max !== void 0 && value > max) return fallback;
3486
3486
  return value;
3487
3487
  }
3488
- /**
3489
- * Clamp one numeric knob and warn ONCE per key.
3490
- *
3491
- * S2.9 (T3-10): `evolution-review` and `evolution-curator` each carried their own copy of this
3492
- * helper — their own once-per-key set and their own message — so the two settings readers of ONE
3493
- * policy row could drift apart. The logic lives here; each caller passes its own sink (and its own
3494
- * package prefix). A live field is read at every use, so the warning cannot be per-read.
3495
- *
3496
- * @param warned - the keys this caller already warned about.
3497
- * @param warn - the warning sink (each package prefixes its own name).
3498
- * @param name - the config key, for the warning.
3499
- * @param value - the value as supplied, or its volatile reference.
3500
- * @param fallback - the package default a corrected value falls back to.
3501
- * @param min - the smallest value the engine can act on.
3502
- * @param max - the largest value the carrier can hold, when bounded.
3503
- * @returns the value the engine may use.
3504
- */
3505
- function clampOnce(warned, warn, name, value, fallback, min, max) {
3506
- const current = typeof value === "object" ? value.get() : value;
3507
- const result = clampedNumber(current, fallback, max === void 0 ? { min } : {
3508
- min,
3509
- max
3510
- });
3511
- if (current !== void 0 && result !== current && !warned.has(name)) {
3512
- warned.add(name);
3513
- warn(`${name} provided an invalid value; falling back to the default`);
3514
- }
3515
- return result;
3516
- }
3517
3488
  //#endregion
3518
3489
  //#region lib/types/threats.js
3519
3490
  /**
@@ -6697,10 +6668,24 @@ const SERIALIZATIONS = [
6697
6668
  ];
6698
6669
  /** Parse + validate the table. A malformed table throws at import: a table the
6699
6670
  * gate cannot read must never degrade into "no declared write sites". */
6700
- function parseSites(raw) {
6701
- if (!Array.isArray(raw)) throw new Error("evolution-core: persisted-write-inventory.json must be an array of sites");
6671
+ function parseTable(raw) {
6672
+ if (raw === null || typeof raw !== "object" || Array.isArray(raw)) throw new Error("evolution-core: persisted-write-inventory.json must be an object with { symbols, sites }");
6673
+ const table = raw;
6674
+ if (table.symbols === null || typeof table.symbols !== "object" || Array.isArray(table.symbols)) throw new Error("evolution-core: persisted-write-inventory.json needs a symbols legend (the roots every path is written against)");
6675
+ for (const [symbol, entry] of Object.entries(table.symbols)) {
6676
+ const problems = [];
6677
+ if (!symbol.startsWith("<") || !symbol.endsWith(">")) problems.push("symbol name (must be <name>)");
6678
+ if (entry === null || typeof entry !== "object") problems.push("entry");
6679
+ else {
6680
+ const symbolEntry = entry;
6681
+ if (typeof symbolEntry.resolver !== "string" || symbolEntry.resolver === "") problems.push("resolver");
6682
+ if (symbolEntry.segments !== void 0 && (!Array.isArray(symbolEntry.segments) || symbolEntry.segments.some((segment) => typeof segment !== "string"))) problems.push("segments");
6683
+ }
6684
+ if (problems.length > 0) throw new Error(`evolution-core: persisted-write-inventory.json symbol ${symbol} is malformed (missing/invalid: ${problems.join(", ")})`);
6685
+ }
6686
+ if (!Array.isArray(table.sites)) throw new Error("evolution-core: persisted-write-inventory.json needs a sites array");
6702
6687
  const sites = [];
6703
- for (const [index, entry] of raw.entries()) {
6688
+ for (const [index, entry] of table.sites.entries()) {
6704
6689
  const site = entry;
6705
6690
  const problems = [];
6706
6691
  if (typeof site.id !== "string" || site.id === "") problems.push("id");
@@ -6723,7 +6708,10 @@ function parseSites(raw) {
6723
6708
  });
6724
6709
  }
6725
6710
  if (new Set(sites.map((site) => site.id)).size !== sites.length) throw new Error("evolution-core: persisted-write-inventory.json declares duplicate site ids");
6726
- return sites;
6711
+ return {
6712
+ symbols: table.symbols,
6713
+ sites
6714
+ };
6727
6715
  }
6728
6716
  /** Instance keys held by writer services — the single source shared by the
6729
6717
  * claim site and the inventory row that declares it (rule N20 checks the row's
@@ -6732,6 +6720,7 @@ const INSTANCE_KEYS = {
6732
6720
  /** The per-home curator: report writing + the retention sweep. */
6733
6721
  curator: "evolution-curator" };
6734
6722
  let cachedSites;
6723
+ let cachedSymbols;
6735
6724
  /**
6736
6725
  * The declared persisted write sites, in file order.
6737
6726
  *
@@ -6755,8 +6744,17 @@ function persistedWriteSites() {
6755
6744
  const cause = error instanceof Error ? error.message : String(error);
6756
6745
  throw new Error(`evolution-core: persisted-write-inventory.json is unreadable (${cause}) — the package asset is missing or was not shipped; the write-inventory rules cannot be evaluated without it`);
6757
6746
  }
6758
- cachedSites = parseSites(JSON.parse(raw));
6759
- return cachedSites;
6747
+ const table = parseTable(JSON.parse(raw));
6748
+ cachedSites = table.sites;
6749
+ cachedSymbols = table.symbols;
6750
+ return table.sites;
6751
+ }
6752
+ /** The inventory's symbol legend — the roots every declared path is written against, with the
6753
+ * segments the gate checks against the resolver's source.
6754
+ * @internal no production caller — the gates read the JSON asset directly. */
6755
+ function writePathSymbols() {
6756
+ persistedWriteSites();
6757
+ return cachedSymbols ?? {};
6760
6758
  }
6761
6759
  /** Sites serialized by the per-home instance claim, with their instance keys.
6762
6760
  * @internal S2.4 (PLAN 2026-09-16): no production caller — the arch guard
@@ -11860,7 +11858,8 @@ const PARAM_EXPOSURE = Object.freeze([
11860
11858
  hint: "每累计多少次工具调用检查一次技能:一轮按该轮工具调用数累加(一轮没有工具调用也算 1 次),本轮本身用到技能则只算 1 次。",
11861
11859
  control: "number",
11862
11860
  unit: "次",
11863
- values: ""
11861
+ values: "",
11862
+ card: "evolution-review"
11864
11863
  },
11865
11864
  {
11866
11865
  id: "reviewMemoryInterval",
@@ -11875,7 +11874,8 @@ const PARAM_EXPOSURE = Object.freeze([
11875
11874
  hint: "每累计多少次工具调用检查一次记忆:一轮按该轮工具调用数累加(一轮没有工具调用也算 1 次),本轮本身用到记忆则只算 1 次。",
11876
11875
  control: "number",
11877
11876
  unit: "次",
11878
- values: ""
11877
+ values: "",
11878
+ card: "evolution-review"
11879
11879
  },
11880
11880
  {
11881
11881
  id: "skillReviewTrigger",
@@ -11891,7 +11891,8 @@ const PARAM_EXPOSURE = Object.freeze([
11891
11891
  control: "select",
11892
11892
  unit: "",
11893
11893
  values: "cadence|completion|both",
11894
- valueLabels: "按间隔|按任务完成|两者"
11894
+ valueLabels: "按间隔|按任务完成|两者",
11895
+ card: "evolution-review"
11895
11896
  },
11896
11897
  {
11897
11898
  id: "skillReviewCompletionMinToolCalls",
@@ -11906,7 +11907,8 @@ const PARAM_EXPOSURE = Object.freeze([
11906
11907
  hint: "选「按任务完成」时,任务至少用了几次工具才检查。",
11907
11908
  control: "number",
11908
11909
  unit: "次",
11909
- values: ""
11910
+ values: "",
11911
+ card: "evolution-review"
11910
11912
  },
11911
11913
  {
11912
11914
  id: "reviewEnabled",
@@ -11921,7 +11923,8 @@ const PARAM_EXPOSURE = Object.freeze([
11921
11923
  hint: "关闭后不再自动回顾会话。",
11922
11924
  control: "switch",
11923
11925
  unit: "",
11924
- values: ""
11926
+ values: "",
11927
+ card: "evolution-review"
11925
11928
  },
11926
11929
  {
11927
11930
  id: "reviewMode",
@@ -11937,7 +11940,8 @@ const PARAM_EXPOSURE = Object.freeze([
11937
11940
  control: "select",
11938
11941
  unit: "",
11939
11942
  values: "subagent|inject",
11940
- valueLabels: "交给子代理|在当前会话里"
11943
+ valueLabels: "交给子代理|在当前会话里",
11944
+ card: "evolution-review"
11941
11945
  },
11942
11946
  {
11943
11947
  id: "reviewWakeInject",
@@ -11952,7 +11956,8 @@ const PARAM_EXPOSURE = Object.freeze([
11952
11956
  hint: "会话空闲时,把延后的检查结果作为一条提醒发给你。",
11953
11957
  control: "switch",
11954
11958
  unit: "",
11955
- values: ""
11959
+ values: "",
11960
+ card: "evolution-review"
11956
11961
  },
11957
11962
  {
11958
11963
  id: "reviewProvider",
@@ -11962,7 +11967,8 @@ const PARAM_EXPOSURE = Object.freeze([
11962
11967
  owner: "evolution-review",
11963
11968
  applies: "none",
11964
11969
  docAnchor: "PARAMETERS.md#review",
11965
- summary: "LLM provider for review subagents (deployment identity)."
11970
+ summary: "LLM provider for review subagents (deployment identity).",
11971
+ why: "identity"
11966
11972
  },
11967
11973
  {
11968
11974
  id: "reviewTimeoutMs",
@@ -11972,7 +11978,8 @@ const PARAM_EXPOSURE = Object.freeze([
11972
11978
  owner: "evolution-review",
11973
11979
  applies: "none",
11974
11980
  docAnchor: "PARAMETERS.md#review",
11975
- summary: "Bound on one review subagent run and its write leg."
11981
+ summary: "Bound on one review subagent run and its write leg.",
11982
+ why: "internal"
11976
11983
  },
11977
11984
  {
11978
11985
  id: "reviewContextMessages",
@@ -11982,7 +11989,8 @@ const PARAM_EXPOSURE = Object.freeze([
11982
11989
  owner: "evolution-review",
11983
11990
  applies: "none",
11984
11991
  docAnchor: "PARAMETERS.md#review",
11985
- summary: "Messages of context handed to a review subagent."
11992
+ summary: "Messages of context handed to a review subagent.",
11993
+ why: "internal"
11986
11994
  },
11987
11995
  {
11988
11996
  id: "reviewMessageChars",
@@ -11992,7 +12000,8 @@ const PARAM_EXPOSURE = Object.freeze([
11992
12000
  owner: "evolution-review",
11993
12001
  applies: "none",
11994
12002
  docAnchor: "PARAMETERS.md#review",
11995
- summary: "Per-message character budget of the review context."
12003
+ summary: "Per-message character budget of the review context.",
12004
+ why: "internal"
11996
12005
  },
11997
12006
  {
11998
12007
  id: "reviewMaxDepth",
@@ -12002,7 +12011,8 @@ const PARAM_EXPOSURE = Object.freeze([
12002
12011
  owner: "evolution-review",
12003
12012
  applies: "none",
12004
12013
  docAnchor: "PARAMETERS.md#review",
12005
- summary: "Absolute delegation-depth cap of the review subagent."
12014
+ summary: "Absolute delegation-depth cap of the review subagent.",
12015
+ why: "internal"
12006
12016
  },
12007
12017
  {
12008
12018
  id: "reviewToolAllow",
@@ -12012,7 +12022,8 @@ const PARAM_EXPOSURE = Object.freeze([
12012
12022
  owner: "evolution-review",
12013
12023
  applies: "none",
12014
12024
  docAnchor: "PARAMETERS.md#review",
12015
- summary: "Tools the review subagent may use (safety surface)."
12025
+ summary: "Tools the review subagent may use (safety surface).",
12026
+ why: "security"
12016
12027
  },
12017
12028
  {
12018
12029
  id: "skillContentChars",
@@ -12027,7 +12038,8 @@ const PARAM_EXPOSURE = Object.freeze([
12027
12038
  hint: "技能 Markdown 正文最多多少字符(只能调小)。",
12028
12039
  control: "number",
12029
12040
  unit: "字符",
12030
- values: ""
12041
+ values: "",
12042
+ card: "tool-skill-manage"
12031
12043
  },
12032
12044
  {
12033
12045
  id: "maxSkillFileBytes",
@@ -12042,7 +12054,8 @@ const PARAM_EXPOSURE = Object.freeze([
12042
12054
  hint: "技能附带文件单个最大多少字节(只能调小)。",
12043
12055
  control: "number",
12044
12056
  unit: "字节",
12045
- values: ""
12057
+ values: "",
12058
+ card: "tool-skill-manage"
12046
12059
  },
12047
12060
  {
12048
12061
  id: "maxSkillNameLength",
@@ -12057,7 +12070,8 @@ const PARAM_EXPOSURE = Object.freeze([
12057
12070
  hint: "技能名最多多少字符(只能调小)。",
12058
12071
  control: "number",
12059
12072
  unit: "字符",
12060
- values: ""
12073
+ values: "",
12074
+ card: "tool-skill-manage"
12061
12075
  },
12062
12076
  {
12063
12077
  id: "maxDescriptionLength",
@@ -12072,7 +12086,8 @@ const PARAM_EXPOSURE = Object.freeze([
12072
12086
  hint: "技能描述最多多少字符(只能调小)。",
12073
12087
  control: "number",
12074
12088
  unit: "字符",
12075
- values: ""
12089
+ values: "",
12090
+ card: "tool-skill-manage"
12076
12091
  },
12077
12092
  {
12078
12093
  id: "descriptionStrict",
@@ -12087,7 +12102,8 @@ const PARAM_EXPOSURE = Object.freeze([
12087
12102
  hint: "描述不符合要求时直接拒绝写入(默认只提醒)。",
12088
12103
  control: "switch",
12089
12104
  unit: "",
12090
- values: ""
12105
+ values: "",
12106
+ card: "tool-skill-manage"
12091
12107
  },
12092
12108
  {
12093
12109
  id: "strictCrossSource",
@@ -12102,7 +12118,8 @@ const PARAM_EXPOSURE = Object.freeze([
12102
12118
  hint: "技能引用了本插件之外的文件时拒绝写入。",
12103
12119
  control: "switch",
12104
12120
  unit: "",
12105
- values: ""
12121
+ values: "",
12122
+ card: "tool-skill-manage"
12106
12123
  },
12107
12124
  {
12108
12125
  id: "citationPolicy",
@@ -12118,7 +12135,8 @@ const PARAM_EXPOSURE = Object.freeze([
12118
12135
  control: "select",
12119
12136
  unit: "",
12120
12137
  values: "verify|refuse",
12121
- valueLabels: "先检查|直接拒绝"
12138
+ valueLabels: "先检查|直接拒绝",
12139
+ card: "tool-skill-manage"
12122
12140
  },
12123
12141
  {
12124
12142
  id: "referenceRewrite",
@@ -12128,7 +12146,8 @@ const PARAM_EXPOSURE = Object.freeze([
12128
12146
  owner: "tool-skill-manage",
12129
12147
  applies: "none",
12130
12148
  docAnchor: "PARAMETERS.md#write-caps",
12131
- summary: "Re-home support files and rewrite references during a merge (plan or apply)."
12149
+ summary: "Re-home support files and rewrite references during a merge (plan or apply).",
12150
+ why: "internal"
12132
12151
  },
12133
12152
  {
12134
12153
  id: "archiveRetention",
@@ -12138,7 +12157,8 @@ const PARAM_EXPOSURE = Object.freeze([
12138
12157
  owner: "tool-skill-manage",
12139
12158
  applies: "none",
12140
12159
  docAnchor: "PARAMETERS.md#write-caps",
12141
- summary: "Report expired archives, or prune them."
12160
+ summary: "Report expired archives, or prune them.",
12161
+ why: "internal"
12142
12162
  },
12143
12163
  {
12144
12164
  id: "skillVersionKeep",
@@ -12148,7 +12168,8 @@ const PARAM_EXPOSURE = Object.freeze([
12148
12168
  owner: "tool-skill-manage",
12149
12169
  applies: "none",
12150
12170
  docAnchor: "PARAMETERS.md#write-caps",
12151
- summary: "Content versions retained per skill; older ones leave the index. Their stored blobs stay on disk — no automatic sweep exists yet, so a long-lived library grows by the distinct bodies it has written."
12171
+ summary: "Content versions retained per skill; older ones leave the index. Their stored blobs stay on disk — no automatic sweep exists yet, so a long-lived library grows by the distinct bodies it has written.",
12172
+ why: "internal"
12152
12173
  },
12153
12174
  {
12154
12175
  id: "supportFileCharPolicy",
@@ -12164,7 +12185,8 @@ const PARAM_EXPOSURE = Object.freeze([
12164
12185
  control: "select",
12165
12186
  unit: "",
12166
12187
  values: "report|enforce",
12167
- valueLabels: "只提醒|拒绝写入"
12188
+ valueLabels: "只提醒|拒绝写入",
12189
+ card: "tool-skill-manage"
12168
12190
  },
12169
12191
  {
12170
12192
  id: "skillWriteConfirm",
@@ -12180,7 +12202,8 @@ const PARAM_EXPOSURE = Object.freeze([
12180
12202
  control: "select",
12181
12203
  unit: "",
12182
12204
  values: "auto|ask|timeout",
12183
- valueLabels: "不弹窗直接写入|一直等待回答|超时自动取消"
12205
+ valueLabels: "不弹窗直接写入|一直等待回答|超时自动取消",
12206
+ card: "tool-skill-manage"
12184
12207
  },
12185
12208
  {
12186
12209
  id: "skillWriteConfirmTimeoutSeconds",
@@ -12195,7 +12218,8 @@ const PARAM_EXPOSURE = Object.freeze([
12195
12218
  hint: "选「超时自动取消」时,等多少秒没人回答就取消这次写入。",
12196
12219
  control: "number",
12197
12220
  unit: "秒",
12198
- values: ""
12221
+ values: "",
12222
+ card: "tool-skill-manage"
12199
12223
  },
12200
12224
  {
12201
12225
  id: "memoryChars",
@@ -12210,7 +12234,8 @@ const PARAM_EXPOSURE = Object.freeze([
12210
12234
  hint: "长期记忆文件(MEMORY.md)最多多少字符。",
12211
12235
  control: "number",
12212
12236
  unit: "字符",
12213
- values: ""
12237
+ values: "",
12238
+ card: "memory-files"
12214
12239
  },
12215
12240
  {
12216
12241
  id: "userChars",
@@ -12225,7 +12250,8 @@ const PARAM_EXPOSURE = Object.freeze([
12225
12250
  hint: "用户画像文件(USER.md)最多多少字符。",
12226
12251
  control: "number",
12227
12252
  unit: "字符",
12228
- values: ""
12253
+ values: "",
12254
+ card: "memory-files"
12229
12255
  },
12230
12256
  {
12231
12257
  id: "memoryEnabled",
@@ -12235,7 +12261,8 @@ const PARAM_EXPOSURE = Object.freeze([
12235
12261
  owner: "tool-memory",
12236
12262
  applies: "none",
12237
12263
  docAnchor: "PARAMETERS.md#memory",
12238
- summary: "Register the memory tool and its prompt section at all (deployment switch)."
12264
+ summary: "Register the memory tool and its prompt section at all (deployment switch).",
12265
+ why: "deployment"
12239
12266
  },
12240
12267
  {
12241
12268
  id: "entryPreviewChars",
@@ -12250,7 +12277,8 @@ const PARAM_EXPOSURE = Object.freeze([
12250
12277
  hint: "列表里每条记忆最多显示多少字符。",
12251
12278
  control: "number",
12252
12279
  unit: "字符",
12253
- values: ""
12280
+ values: "",
12281
+ card: "tool-memory"
12254
12282
  },
12255
12283
  {
12256
12284
  id: "addDatePrefix",
@@ -12265,7 +12293,8 @@ const PARAM_EXPOSURE = Object.freeze([
12265
12293
  hint: "写入时在条目开头加上日期。",
12266
12294
  control: "switch",
12267
12295
  unit: "",
12268
- values: ""
12296
+ values: "",
12297
+ card: "memory-files"
12269
12298
  },
12270
12299
  {
12271
12300
  id: "maxConsolidationFailures",
@@ -12280,7 +12309,8 @@ const PARAM_EXPOSURE = Object.freeze([
12280
12309
  hint: "合并记忆连续失败多少次后停止。",
12281
12310
  control: "number",
12282
12311
  unit: "次",
12283
- values: ""
12312
+ values: "",
12313
+ card: "memory-files"
12284
12314
  },
12285
12315
  {
12286
12316
  id: "curatorIntervalHours",
@@ -12295,7 +12325,8 @@ const PARAM_EXPOSURE = Object.freeze([
12295
12325
  hint: "两次自动整理之间至少间隔多少小时。",
12296
12326
  control: "number",
12297
12327
  unit: "小时",
12298
- values: ""
12328
+ values: "",
12329
+ card: "evolution-curator"
12299
12330
  },
12300
12331
  {
12301
12332
  id: "staleAfterDays",
@@ -12310,7 +12341,8 @@ const PARAM_EXPOSURE = Object.freeze([
12310
12341
  hint: "技能连续多少天没被用到就算过时。",
12311
12342
  control: "number",
12312
12343
  unit: "天",
12313
- values: ""
12344
+ values: "",
12345
+ card: "evolution-curator"
12314
12346
  },
12315
12347
  {
12316
12348
  id: "archiveAfterDays",
@@ -12325,22 +12357,19 @@ const PARAM_EXPOSURE = Object.freeze([
12325
12357
  hint: "过时技能再过多少天移入归档(不能小于上一项)。",
12326
12358
  control: "number",
12327
12359
  unit: "天",
12328
- values: ""
12360
+ values: "",
12361
+ card: "evolution-curator"
12329
12362
  },
12330
12363
  {
12331
12364
  id: "qualityWarnStaleAfterDays",
12332
12365
  group: "curator",
12333
- tier: "E3",
12366
+ tier: "E2",
12334
12367
  authority: "cordis",
12335
12368
  owner: "evolution-curator",
12336
- applies: "live",
12369
+ applies: "none",
12337
12370
  docAnchor: "PARAMETERS.md#curator",
12338
- summary: "Age at which a low quality score starts warning.",
12339
- label: "质量偏低提醒",
12340
- hint: "质量评分偏低时,从多少天开始提醒。",
12341
- control: "number",
12342
- unit: "天",
12343
- values: ""
12371
+ summary: "Age at which a low quality score starts warning (the pair of evolution-feedback.qualityWarnThreshold; both live on the deployment face so one bar is not half user-set).",
12372
+ why: "internal"
12344
12373
  },
12345
12374
  {
12346
12375
  id: "minIdleHours",
@@ -12355,7 +12384,8 @@ const PARAM_EXPOSURE = Object.freeze([
12355
12384
  hint: "你至少多少小时没用,才运行自动整理。",
12356
12385
  control: "number",
12357
12386
  unit: "小时",
12358
- values: ""
12387
+ values: "",
12388
+ card: "evolution-curator"
12359
12389
  },
12360
12390
  {
12361
12391
  id: "minIdleFailOpen",
@@ -12370,7 +12400,8 @@ const PARAM_EXPOSURE = Object.freeze([
12370
12400
  hint: "无法判断你是否空闲时,仍然运行自动整理。",
12371
12401
  control: "switch",
12372
12402
  unit: "",
12373
- values: ""
12403
+ values: "",
12404
+ card: "evolution-curator"
12374
12405
  },
12375
12406
  {
12376
12407
  id: "llmReview",
@@ -12385,7 +12416,8 @@ const PARAM_EXPOSURE = Object.freeze([
12385
12416
  hint: "在固定规则之外,再用模型挑一遍候选项。",
12386
12417
  control: "switch",
12387
12418
  unit: "",
12388
- values: ""
12419
+ values: "",
12420
+ card: "evolution-curator"
12389
12421
  },
12390
12422
  {
12391
12423
  id: "curatorReviewMaxTokens",
@@ -12400,7 +12432,8 @@ const PARAM_EXPOSURE = Object.freeze([
12400
12432
  hint: "每次用模型挑选时最多消耗多少 token。",
12401
12433
  control: "number",
12402
12434
  unit: "token",
12403
- values: ""
12435
+ values: "",
12436
+ card: "evolution-curator"
12404
12437
  },
12405
12438
  {
12406
12439
  id: "curatorReviewTimeoutMs",
@@ -12415,7 +12448,8 @@ const PARAM_EXPOSURE = Object.freeze([
12415
12448
  hint: "一次模型挑选最长允许运行多久。",
12416
12449
  control: "number",
12417
12450
  unit: "毫秒",
12418
- values: ""
12451
+ values: "",
12452
+ card: "evolution-curator"
12419
12453
  },
12420
12454
  {
12421
12455
  id: "healthSoftBodyChars",
@@ -12430,7 +12464,8 @@ const PARAM_EXPOSURE = Object.freeze([
12430
12464
  hint: "技能正文超过多少字符算偏长(只用于健康提示)。",
12431
12465
  control: "number",
12432
12466
  unit: "字符",
12433
- values: ""
12467
+ values: "",
12468
+ card: "evolution-curator"
12434
12469
  },
12435
12470
  {
12436
12471
  id: "healthStampDensityPerKb",
@@ -12445,7 +12480,8 @@ const PARAM_EXPOSURE = Object.freeze([
12445
12480
  hint: "每 KB 出现多少个时间标记,就判为「像日志」。",
12446
12481
  control: "number",
12447
12482
  unit: "处/KB",
12448
- values: ""
12483
+ values: "",
12484
+ card: "evolution-curator"
12449
12485
  },
12450
12486
  {
12451
12487
  id: "healthChurnMinPatches",
@@ -12460,7 +12496,8 @@ const PARAM_EXPOSURE = Object.freeze([
12460
12496
  hint: "连续多少次改动都没有被读取,就判为「只写不读」。",
12461
12497
  control: "number",
12462
12498
  unit: "处",
12463
- values: ""
12499
+ values: "",
12500
+ card: "evolution-curator"
12464
12501
  },
12465
12502
  {
12466
12503
  id: "evolution-curator.enabled",
@@ -12470,7 +12507,8 @@ const PARAM_EXPOSURE = Object.freeze([
12470
12507
  owner: "evolution-curator",
12471
12508
  applies: "none",
12472
12509
  docAnchor: "PARAMETERS.md#curator",
12473
- summary: "Mount the curator plugin at all."
12510
+ summary: "Mount the curator plugin at all.",
12511
+ why: "deployment"
12474
12512
  },
12475
12513
  {
12476
12514
  id: "autoStart",
@@ -12480,7 +12518,8 @@ const PARAM_EXPOSURE = Object.freeze([
12480
12518
  owner: "evolution-curator",
12481
12519
  applies: "none",
12482
12520
  docAnchor: "PARAMETERS.md#curator",
12483
- summary: "Arm the hourly due-ness tick with the plugin."
12521
+ summary: "Arm the hourly due-ness tick with the plugin — the STARTUP default only; at runtime /evolution curator pause or resume overrides it (the override is persisted in curation state and wins until cleared). Off keeps curation manual.",
12522
+ why: "deployment"
12484
12523
  },
12485
12524
  {
12486
12525
  id: "bootGraceSeconds",
@@ -12490,7 +12529,8 @@ const PARAM_EXPOSURE = Object.freeze([
12490
12529
  owner: "evolution-curator",
12491
12530
  applies: "none",
12492
12531
  docAnchor: "PARAMETERS.md#curator",
12493
- summary: "Grace period before the first automatic pass after a restart."
12532
+ summary: "Grace period before the first automatic pass after a restart.",
12533
+ why: "internal"
12494
12534
  },
12495
12535
  {
12496
12536
  id: "curatorProvider",
@@ -12500,7 +12540,8 @@ const PARAM_EXPOSURE = Object.freeze([
12500
12540
  owner: "evolution-curator",
12501
12541
  applies: "none",
12502
12542
  docAnchor: "PARAMETERS.md#curator",
12503
- summary: "LLM provider for curator reviews (deployment identity)."
12543
+ summary: "LLM provider for curator reviews (deployment identity).",
12544
+ why: "identity"
12504
12545
  },
12505
12546
  {
12506
12547
  id: "curatorModel",
@@ -12510,7 +12551,8 @@ const PARAM_EXPOSURE = Object.freeze([
12510
12551
  owner: "evolution-curator",
12511
12552
  applies: "none",
12512
12553
  docAnchor: "PARAMETERS.md#curator",
12513
- summary: "Model for curator reviews (deployment identity)."
12554
+ summary: "Model for curator reviews (deployment identity).",
12555
+ why: "identity"
12514
12556
  },
12515
12557
  {
12516
12558
  id: "protectedSkillNames",
@@ -12520,7 +12562,8 @@ const PARAM_EXPOSURE = Object.freeze([
12520
12562
  owner: "evolution-curator",
12521
12563
  applies: "none",
12522
12564
  docAnchor: "PARAMETERS.md#library",
12523
- summary: "Skills the lifecycle never archives or rewrites."
12565
+ summary: "Skills the lifecycle never archives or rewrites.",
12566
+ why: "deployment"
12524
12567
  },
12525
12568
  {
12526
12569
  id: "manageUnmanaged",
@@ -12530,7 +12573,8 @@ const PARAM_EXPOSURE = Object.freeze([
12530
12573
  owner: "evolution-curator",
12531
12574
  applies: "none",
12532
12575
  docAnchor: "PARAMETERS.md#library",
12533
- summary: "Let curation touch skills with no family metadata."
12576
+ summary: "Let curation touch skills with no family metadata.",
12577
+ why: "deployment"
12534
12578
  },
12535
12579
  {
12536
12580
  id: "pruneBuiltins",
@@ -12540,7 +12584,8 @@ const PARAM_EXPOSURE = Object.freeze([
12540
12584
  owner: "evolution-curator",
12541
12585
  applies: "none",
12542
12586
  docAnchor: "PARAMETERS.md#library",
12543
- summary: "Let curation nominate bundled skills for pruning."
12587
+ summary: "Let curation nominate bundled skills for pruning.",
12588
+ why: "deployment"
12544
12589
  },
12545
12590
  {
12546
12591
  id: "referencedSkillNames",
@@ -12550,7 +12595,8 @@ const PARAM_EXPOSURE = Object.freeze([
12550
12595
  owner: "evolution-curator",
12551
12596
  applies: "none",
12552
12597
  docAnchor: "PARAMETERS.md#library",
12553
- summary: "Names treated as referenced by external docs (never retired)."
12598
+ summary: "Names treated as referenced by external docs (never retired).",
12599
+ why: "deployment"
12554
12600
  },
12555
12601
  {
12556
12602
  id: "includeSkillNames",
@@ -12560,7 +12606,8 @@ const PARAM_EXPOSURE = Object.freeze([
12560
12606
  owner: "evolution-skill-catalog",
12561
12607
  applies: "none",
12562
12608
  docAnchor: "PARAMETERS.md#library",
12563
- summary: "Allow-list of skills the catalog exposes."
12609
+ summary: "Allow-list of skills the catalog exposes.",
12610
+ why: "deployment"
12564
12611
  },
12565
12612
  {
12566
12613
  id: "skill-catalog.excludeSkillNames",
@@ -12570,7 +12617,8 @@ const PARAM_EXPOSURE = Object.freeze([
12570
12617
  owner: "evolution-skill-catalog",
12571
12618
  applies: "none",
12572
12619
  docAnchor: "PARAMETERS.md#library",
12573
- summary: "Deny-list of skills the catalog hides (row-local name; see the collision note)."
12620
+ summary: "Deny-list of skills the catalog hides (row-local name; see the collision note).",
12621
+ why: "deployment"
12574
12622
  },
12575
12623
  {
12576
12624
  id: "modelInvocable",
@@ -12580,7 +12628,8 @@ const PARAM_EXPOSURE = Object.freeze([
12580
12628
  owner: "evolution-skill-catalog",
12581
12629
  applies: "none",
12582
12630
  docAnchor: "PARAMETERS.md#library",
12583
- summary: "Default for whether the model may invoke a catalog skill."
12631
+ summary: "Default for whether the model may invoke a catalog skill.",
12632
+ why: "deployment"
12584
12633
  },
12585
12634
  {
12586
12635
  id: "userInvocable",
@@ -12590,7 +12639,8 @@ const PARAM_EXPOSURE = Object.freeze([
12590
12639
  owner: "evolution-skill-catalog",
12591
12640
  applies: "none",
12592
12641
  docAnchor: "PARAMETERS.md#library",
12593
- summary: "Default for whether the user may invoke a catalog skill."
12642
+ summary: "Default for whether the user may invoke a catalog skill.",
12643
+ why: "deployment"
12594
12644
  },
12595
12645
  {
12596
12646
  id: "maxItems",
@@ -12600,7 +12650,8 @@ const PARAM_EXPOSURE = Object.freeze([
12600
12650
  owner: "evolution-activity",
12601
12651
  applies: "none",
12602
12652
  docAnchor: "PARAMETERS.md#library",
12603
- summary: "Entries kept in the activity sidecar window."
12653
+ summary: "Entries kept in the activity sidecar window.",
12654
+ why: "internal"
12604
12655
  },
12605
12656
  {
12606
12657
  id: "sessionScoped",
@@ -12610,7 +12661,8 @@ const PARAM_EXPOSURE = Object.freeze([
12610
12661
  owner: "evolution-review",
12611
12662
  applies: "none",
12612
12663
  docAnchor: "PARAMETERS.md#library",
12613
- summary: "Act only on sessions carrying the family model tools."
12664
+ summary: "Act only on sessions carrying the family model tools.",
12665
+ why: "deployment"
12614
12666
  },
12615
12667
  {
12616
12668
  id: "skill-usage.sessionScoped",
@@ -12620,7 +12672,8 @@ const PARAM_EXPOSURE = Object.freeze([
12620
12672
  owner: "skill-usage",
12621
12673
  applies: "none",
12622
12674
  docAnchor: "PARAMETERS.md#library",
12623
- summary: "Keep the usage sidecar scoped per session (row-local name)."
12675
+ summary: "Keep the usage sidecar scoped per session (row-local name).",
12676
+ why: "deployment"
12624
12677
  },
12625
12678
  {
12626
12679
  id: "evolution-review.root",
@@ -12630,7 +12683,8 @@ const PARAM_EXPOSURE = Object.freeze([
12630
12683
  owner: "evolution-review",
12631
12684
  applies: "none",
12632
12685
  docAnchor: "PARAMETERS.md#deployment",
12633
- summary: "Skill-tree root for review-created skills (empty = shared default)."
12686
+ summary: "Skill-tree root for review-created skills (empty = shared default).",
12687
+ why: "path"
12634
12688
  },
12635
12689
  {
12636
12690
  id: "evolution-review.skillsRoot",
@@ -12640,7 +12694,8 @@ const PARAM_EXPOSURE = Object.freeze([
12640
12694
  owner: "evolution-review",
12641
12695
  applies: "none",
12642
12696
  docAnchor: "PARAMETERS.md#deployment",
12643
- summary: "Retired alias of root; a value here fails the load (V27 G2.4)."
12697
+ summary: "Retired alias of root; a value here fails the load (V27 G2.4).",
12698
+ why: "path"
12644
12699
  },
12645
12700
  {
12646
12701
  id: "evolution-curator.root",
@@ -12650,7 +12705,8 @@ const PARAM_EXPOSURE = Object.freeze([
12650
12705
  owner: "evolution-curator",
12651
12706
  applies: "none",
12652
12707
  docAnchor: "PARAMETERS.md#deployment",
12653
- summary: "Skill-tree root for curator scope, snapshot and archive."
12708
+ summary: "Skill-tree root for curator scope, snapshot and archive.",
12709
+ why: "path"
12654
12710
  },
12655
12711
  {
12656
12712
  id: "evolution-commands.root",
@@ -12660,7 +12716,8 @@ const PARAM_EXPOSURE = Object.freeze([
12660
12716
  owner: "evolution-commands",
12661
12717
  applies: "none",
12662
12718
  docAnchor: "PARAMETERS.md#deployment",
12663
- summary: "Skill-tree root the command surface writes through."
12719
+ summary: "Skill-tree root the command surface writes through.",
12720
+ why: "path"
12664
12721
  },
12665
12722
  {
12666
12723
  id: "evolution-commands.skillsRoot",
@@ -12670,7 +12727,8 @@ const PARAM_EXPOSURE = Object.freeze([
12670
12727
  owner: "evolution-commands",
12671
12728
  applies: "none",
12672
12729
  docAnchor: "PARAMETERS.md#deployment",
12673
- summary: "Retired alias of the commands root; a value here fails the load."
12730
+ summary: "Retired alias of the commands root; a value here fails the load.",
12731
+ why: "path"
12674
12732
  },
12675
12733
  {
12676
12734
  id: "evolution-maintenance.root",
@@ -12680,7 +12738,8 @@ const PARAM_EXPOSURE = Object.freeze([
12680
12738
  owner: "evolution-maintenance",
12681
12739
  applies: "none",
12682
12740
  docAnchor: "PARAMETERS.md#deployment",
12683
- summary: "Skill-tree root the maintenance probe scans."
12741
+ summary: "Skill-tree root the maintenance probe scans.",
12742
+ why: "path"
12684
12743
  },
12685
12744
  {
12686
12745
  id: "evolution-maintenance.skillsRoot",
@@ -12690,7 +12749,8 @@ const PARAM_EXPOSURE = Object.freeze([
12690
12749
  owner: "evolution-maintenance",
12691
12750
  applies: "none",
12692
12751
  docAnchor: "PARAMETERS.md#deployment",
12693
- summary: "Accepted skill-root spelling for the maintenance row."
12752
+ summary: "Accepted skill-root spelling for the maintenance row.",
12753
+ why: "path"
12694
12754
  },
12695
12755
  {
12696
12756
  id: "evolution-skill-catalog.root",
@@ -12700,7 +12760,8 @@ const PARAM_EXPOSURE = Object.freeze([
12700
12760
  owner: "evolution-skill-catalog",
12701
12761
  applies: "none",
12702
12762
  docAnchor: "PARAMETERS.md#deployment",
12703
- summary: "Skill-tree root the catalog lists."
12763
+ summary: "Skill-tree root the catalog lists.",
12764
+ why: "path"
12704
12765
  },
12705
12766
  {
12706
12767
  id: "evolution-learning-graph.root",
@@ -12710,7 +12771,8 @@ const PARAM_EXPOSURE = Object.freeze([
12710
12771
  owner: "evolution-learning-graph",
12711
12772
  applies: "none",
12712
12773
  docAnchor: "PARAMETERS.md#deployment",
12713
- summary: "Skill-tree root the learning graph reads."
12774
+ summary: "Skill-tree root the learning graph reads.",
12775
+ why: "path"
12714
12776
  },
12715
12777
  {
12716
12778
  id: "skill-usage.root",
@@ -12720,7 +12782,8 @@ const PARAM_EXPOSURE = Object.freeze([
12720
12782
  owner: "skill-usage",
12721
12783
  applies: "none",
12722
12784
  docAnchor: "PARAMETERS.md#deployment",
12723
- summary: "Skill-tree root the usage store observes."
12785
+ summary: "Skill-tree root the usage store observes.",
12786
+ why: "path"
12724
12787
  },
12725
12788
  {
12726
12789
  id: "skill-usage.eventsHome",
@@ -12730,7 +12793,8 @@ const PARAM_EXPOSURE = Object.freeze([
12730
12793
  owner: "skill-usage",
12731
12794
  applies: "none",
12732
12795
  docAnchor: "PARAMETERS.md#deployment",
12733
- summary: "Directory holding the family event log the usage store reads."
12796
+ summary: "Directory holding the family event log the usage store reads.",
12797
+ why: "path"
12734
12798
  },
12735
12799
  {
12736
12800
  id: "evolution-state-json.root",
@@ -12740,7 +12804,8 @@ const PARAM_EXPOSURE = Object.freeze([
12740
12804
  owner: "evolution-state-json",
12741
12805
  applies: "none",
12742
12806
  docAnchor: "PARAMETERS.md#deployment",
12743
- summary: "Directory holding the JSON state store."
12807
+ summary: "Directory holding the JSON state store.",
12808
+ why: "path"
12744
12809
  },
12745
12810
  {
12746
12811
  id: "memory-files.root",
@@ -12750,7 +12815,8 @@ const PARAM_EXPOSURE = Object.freeze([
12750
12815
  owner: "memory-files",
12751
12816
  applies: "none",
12752
12817
  docAnchor: "PARAMETERS.md#deployment",
12753
- summary: "Directory holding MEMORY.md and USER.md (empty = $DSH_HOME/memories)."
12818
+ summary: "Directory holding MEMORY.md and USER.md (empty = $DSH_HOME/memories).",
12819
+ why: "path"
12754
12820
  },
12755
12821
  {
12756
12822
  id: "evolution-feedback.path",
@@ -12760,7 +12826,8 @@ const PARAM_EXPOSURE = Object.freeze([
12760
12826
  owner: "evolution-feedback",
12761
12827
  applies: "none",
12762
12828
  docAnchor: "PARAMETERS.md#deployment",
12763
- summary: "Event log the feedback scorer reads (empty = family events file)."
12829
+ summary: "Event log the feedback scorer reads (empty = family events file).",
12830
+ why: "path"
12764
12831
  },
12765
12832
  {
12766
12833
  id: "evolution-state.provider",
@@ -12770,7 +12837,8 @@ const PARAM_EXPOSURE = Object.freeze([
12770
12837
  owner: "evolution-state",
12771
12838
  applies: "none",
12772
12839
  docAnchor: "PARAMETERS.md#deployment",
12773
- summary: "Registered state-store provider name."
12840
+ summary: "Registered state-store provider name.",
12841
+ why: "identity"
12774
12842
  },
12775
12843
  {
12776
12844
  id: "memory.provider",
@@ -12780,7 +12848,8 @@ const PARAM_EXPOSURE = Object.freeze([
12780
12848
  owner: "memory",
12781
12849
  applies: "none",
12782
12850
  docAnchor: "PARAMETERS.md#deployment",
12783
- summary: "Registered memory provider name."
12851
+ summary: "Registered memory provider name.",
12852
+ why: "identity"
12784
12853
  },
12785
12854
  {
12786
12855
  id: "memory-files.providerName",
@@ -12790,7 +12859,8 @@ const PARAM_EXPOSURE = Object.freeze([
12790
12859
  owner: "memory-files",
12791
12860
  applies: "none",
12792
12861
  docAnchor: "PARAMETERS.md#deployment",
12793
- summary: "Name this package registers as the memory provider."
12862
+ summary: "Name this package registers as the memory provider.",
12863
+ why: "identity"
12794
12864
  },
12795
12865
  {
12796
12866
  id: "memoryReviewModel",
@@ -12800,7 +12870,8 @@ const PARAM_EXPOSURE = Object.freeze([
12800
12870
  owner: "evolution-review",
12801
12871
  applies: "none",
12802
12872
  docAnchor: "PARAMETERS.md#deployment",
12803
- summary: "Model for the memory review channel (deployment identity)."
12873
+ summary: "Model for the memory review channel (deployment identity).",
12874
+ why: "identity"
12804
12875
  },
12805
12876
  {
12806
12877
  id: "skillReviewModel",
@@ -12810,7 +12881,8 @@ const PARAM_EXPOSURE = Object.freeze([
12810
12881
  owner: "evolution-review",
12811
12882
  applies: "none",
12812
12883
  docAnchor: "PARAMETERS.md#deployment",
12813
- summary: "Model for the skill review channel (deployment identity)."
12884
+ summary: "Model for the skill review channel (deployment identity).",
12885
+ why: "identity"
12814
12886
  },
12815
12887
  {
12816
12888
  id: "maxOpsPerPlan",
@@ -12820,7 +12892,8 @@ const PARAM_EXPOSURE = Object.freeze([
12820
12892
  owner: "evolution-plan-validator",
12821
12893
  applies: "none",
12822
12894
  docAnchor: "PARAMETERS.md#deployment",
12823
- summary: "Operation cap one staged plan may carry."
12895
+ summary: "Operation cap one staged plan may carry.",
12896
+ why: "internal"
12824
12897
  },
12825
12898
  {
12826
12899
  id: "substantiveMinToolCalls",
@@ -12830,7 +12903,8 @@ const PARAM_EXPOSURE = Object.freeze([
12830
12903
  owner: "evolution-review",
12831
12904
  applies: "none",
12832
12905
  docAnchor: "PARAMETERS.md#deployment",
12833
- summary: "Tool calls that make a turn count as substantive."
12906
+ summary: "Tool calls that make a turn count as substantive.",
12907
+ why: "internal"
12834
12908
  },
12835
12909
  {
12836
12910
  id: "substantiveMinUserChars",
@@ -12840,7 +12914,8 @@ const PARAM_EXPOSURE = Object.freeze([
12840
12914
  owner: "evolution-review",
12841
12915
  applies: "none",
12842
12916
  docAnchor: "PARAMETERS.md#deployment",
12843
- summary: "User characters that make a turn count as substantive."
12917
+ summary: "User characters that make a turn count as substantive.",
12918
+ why: "internal"
12844
12919
  },
12845
12920
  {
12846
12921
  id: "substantiveMinAgentChars",
@@ -12850,7 +12925,8 @@ const PARAM_EXPOSURE = Object.freeze([
12850
12925
  owner: "evolution-review",
12851
12926
  applies: "none",
12852
12927
  docAnchor: "PARAMETERS.md#deployment",
12853
- summary: "Assistant characters that make a turn count as substantive."
12928
+ summary: "Assistant characters that make a turn count as substantive.",
12929
+ why: "internal"
12854
12930
  },
12855
12931
  {
12856
12932
  id: "threatExemptLabels",
@@ -12860,7 +12936,8 @@ const PARAM_EXPOSURE = Object.freeze([
12860
12936
  owner: "evolution-threat",
12861
12937
  applies: "none",
12862
12938
  docAnchor: "PARAMETERS.md#deployment",
12863
- summary: "Threat labels the deployment declares benign (safety surface, never user-writable)."
12939
+ summary: "Threat labels the deployment declares benign (safety surface, never user-writable).",
12940
+ why: "security"
12864
12941
  },
12865
12942
  {
12866
12943
  id: "evolution-threat.enabled",
@@ -12870,7 +12947,8 @@ const PARAM_EXPOSURE = Object.freeze([
12870
12947
  owner: "evolution-threat",
12871
12948
  applies: "none",
12872
12949
  docAnchor: "PARAMETERS.md#deployment",
12873
- summary: "Mount the write-time threat guard at all."
12950
+ summary: "Mount the write-time threat guard at all.",
12951
+ why: "security"
12874
12952
  },
12875
12953
  {
12876
12954
  id: "evolution-threat.maxScanChars",
@@ -12880,7 +12958,8 @@ const PARAM_EXPOSURE = Object.freeze([
12880
12958
  owner: "evolution-threat",
12881
12959
  applies: "none",
12882
12960
  docAnchor: "PARAMETERS.md#deployment",
12883
- summary: "Scan window size of the threat guard."
12961
+ summary: "Scan window size of the threat guard.",
12962
+ why: "security"
12884
12963
  },
12885
12964
  {
12886
12965
  id: "evolution-approval.enabled",
@@ -12890,7 +12969,8 @@ const PARAM_EXPOSURE = Object.freeze([
12890
12969
  owner: "evolution-approval",
12891
12970
  applies: "none",
12892
12971
  docAnchor: "PARAMETERS.md#deployment",
12893
- summary: "Require approval before a staged write executes."
12972
+ summary: "Require approval before a staged write executes.",
12973
+ why: "security"
12894
12974
  },
12895
12975
  {
12896
12976
  id: "evolution-approval.stageForeground",
@@ -12900,7 +12980,8 @@ const PARAM_EXPOSURE = Object.freeze([
12900
12980
  owner: "evolution-approval",
12901
12981
  applies: "none",
12902
12982
  docAnchor: "PARAMETERS.md#deployment",
12903
- summary: "Stage foreground agent writes for approval too."
12983
+ summary: "Stage foreground agent writes for approval too.",
12984
+ why: "security"
12904
12985
  },
12905
12986
  {
12906
12987
  id: "evolution-approval.pendingTtlMs",
@@ -12915,7 +12996,8 @@ const PARAM_EXPOSURE = Object.freeze([
12915
12996
  hint: "一条待批写入最多等多久:超时就按「拒绝」关掉(不会执行,写效果不会落地);0 = 永不过期(默认)。",
12916
12997
  control: "number",
12917
12998
  unit: "毫秒",
12918
- values: ""
12999
+ values: "",
13000
+ card: "evolution-approval"
12919
13001
  },
12920
13002
  {
12921
13003
  id: "qualityWarnThreshold",
@@ -12925,7 +13007,8 @@ const PARAM_EXPOSURE = Object.freeze([
12925
13007
  owner: "evolution-feedback",
12926
13008
  applies: "none",
12927
13009
  docAnchor: "PARAMETERS.md#deployment",
12928
- summary: "Feedback score below which a skill carries a warning."
13010
+ summary: "Feedback score below which a skill carries a warning.",
13011
+ why: "internal"
12929
13012
  },
12930
13013
  {
12931
13014
  id: "replay.maxPlans",
@@ -12935,7 +13018,8 @@ const PARAM_EXPOSURE = Object.freeze([
12935
13018
  owner: "evolution-replay",
12936
13019
  applies: "none",
12937
13020
  docAnchor: "PARAMETERS.md#deployment",
12938
- summary: "Plans compared in one replay report."
13021
+ summary: "Plans compared in one replay report.",
13022
+ why: "internal"
12939
13023
  },
12940
13024
  {
12941
13025
  id: "replay.weights",
@@ -12945,7 +13029,8 @@ const PARAM_EXPOSURE = Object.freeze([
12945
13029
  owner: "evolution-replay",
12946
13030
  applies: "none",
12947
13031
  docAnchor: "PARAMETERS.md#deployment",
12948
- summary: "Scoring weights of the replay comparison."
13032
+ summary: "Scoring weights of the replay comparison.",
13033
+ why: "internal"
12949
13034
  },
12950
13035
  {
12951
13036
  id: "evolution-commands.maintainCooldownMs",
@@ -12955,17 +13040,24 @@ const PARAM_EXPOSURE = Object.freeze([
12955
13040
  owner: "evolution-commands",
12956
13041
  applies: "none",
12957
13042
  docAnchor: "PARAMETERS.md#deployment",
12958
- summary: "Cooldown between maintenance runs from the command surface."
13043
+ summary: "Cooldown between maintenance runs from the command surface.",
13044
+ why: "internal"
12959
13045
  },
12960
13046
  {
12961
13047
  id: "evolution-commands.maintainHandoffOnSettle",
12962
13048
  group: "deployment",
12963
- tier: "E2",
13049
+ tier: "E3",
12964
13050
  authority: "cordis",
12965
13051
  owner: "evolution-commands",
12966
- applies: "none",
13052
+ applies: "live",
12967
13053
  docAnchor: "PARAMETERS.md#deployment",
12968
- summary: "Hand the maintenance report to the model automatically once a scan settles successfully (the same injection as maintain handoff); off by default — enabling it costs one extra model call per successful run."
13054
+ summary: "Hand the maintenance report to the model automatically once a scan settles successfully (the same injection as maintain handoff); off by default — enabling it costs one extra model call per successful run.",
13055
+ label: "扫描完成后自动交接",
13056
+ hint: "维护扫描成功结束后,自动把报告交给模型(等同 maintain handoff);默认关闭,每次成功扫描会多花一次模型调用。",
13057
+ control: "switch",
13058
+ unit: "",
13059
+ values: "",
13060
+ card: "evolution-commands"
12969
13061
  },
12970
13062
  {
12971
13063
  id: "evolution-commands.maintainTimeoutMs",
@@ -12975,7 +13067,8 @@ const PARAM_EXPOSURE = Object.freeze([
12975
13067
  owner: "evolution-commands",
12976
13068
  applies: "none",
12977
13069
  docAnchor: "PARAMETERS.md#deployment",
12978
- summary: "Timeout of one maintenance run started from the command surface."
13070
+ summary: "Timeout of one maintenance run started from the command surface.",
13071
+ why: "internal"
12979
13072
  },
12980
13073
  {
12981
13074
  id: "evolution-maintenance.probeTimeoutMs",
@@ -12985,7 +13078,8 @@ const PARAM_EXPOSURE = Object.freeze([
12985
13078
  owner: "evolution-maintenance",
12986
13079
  applies: "none",
12987
13080
  docAnchor: "PARAMETERS.md#deployment",
12988
- summary: "Model-facing budget of one maintenance_probe call — a hang guard, not a latency budget."
13081
+ summary: "Model-facing budget of one maintenance_probe call — a hang guard, not a latency budget.",
13082
+ why: "internal"
12989
13083
  },
12990
13084
  {
12991
13085
  id: "skill-usage.supportReadToolNames",
@@ -12995,7 +13089,8 @@ const PARAM_EXPOSURE = Object.freeze([
12995
13089
  owner: "skill-usage",
12996
13090
  applies: "none",
12997
13091
  docAnchor: "PARAMETERS.md#deployment",
12998
- summary: "Tool names whose file reads are attributed to support files."
13092
+ summary: "Tool names whose file reads are attributed to support files.",
13093
+ why: "internal"
12999
13094
  },
13000
13095
  {
13001
13096
  id: "install.mode",
@@ -13005,7 +13100,8 @@ const PARAM_EXPOSURE = Object.freeze([
13005
13100
  owner: "scripts",
13006
13101
  applies: "restart",
13007
13102
  docAnchor: "PARAMETERS.md#deployment",
13008
- summary: "Install target plane (values host / agent / layered / oneclick; the `layered` form uses the generated preset, the others mount the bundle at profile root)."
13103
+ summary: "Install target plane (values host / agent / layered / oneclick; the `layered` form uses the generated preset, the others mount the bundle at profile root).",
13104
+ why: "install"
13009
13105
  },
13010
13106
  {
13011
13107
  id: "install.basePreset",
@@ -13015,7 +13111,8 @@ const PARAM_EXPOSURE = Object.freeze([
13015
13111
  owner: "scripts",
13016
13112
  applies: "restart",
13017
13113
  docAnchor: "PARAMETERS.md#deployment",
13018
- summary: "Agent-preset base the layered install composes from (--base)."
13114
+ summary: "Agent-preset base the layered install composes from (--base).",
13115
+ why: "install"
13019
13116
  },
13020
13117
  {
13021
13118
  id: "install.home",
@@ -13025,7 +13122,8 @@ const PARAM_EXPOSURE = Object.freeze([
13025
13122
  owner: "scripts",
13026
13123
  applies: "restart",
13027
13124
  docAnchor: "PARAMETERS.md#deployment",
13028
- summary: "Harness home the installer writes into (--home)."
13125
+ summary: "Harness home the installer writes into (--home).",
13126
+ why: "install"
13029
13127
  },
13030
13128
  {
13031
13129
  id: "install.presetRowOverrides",
@@ -13035,7 +13133,8 @@ const PARAM_EXPOSURE = Object.freeze([
13035
13133
  owner: "scripts",
13036
13134
  applies: "restart",
13037
13135
  docAnchor: "PARAMETERS.md#deployment",
13038
- summary: "Preset row overrides the installer injects (row-overrides.json)."
13136
+ summary: "Preset row overrides the installer injects (row-overrides.json).",
13137
+ why: "install"
13039
13138
  }
13040
13139
  ]);
13041
13140
  /** The settings namespace each OWNER PACKAGE registers (design §7.2).
@@ -13050,7 +13149,9 @@ const PARAM_NAMESPACES = Object.freeze({
13050
13149
  "memory-files": "evolution-memory",
13051
13150
  "tool-memory": "evolution-tool-memory",
13052
13151
  "evolution-curator": "evolution-curator",
13053
- "tool-skill-manage": "evolution-skills"
13152
+ "tool-skill-manage": "evolution-skills",
13153
+ "evolution-approval": "evolution-approval",
13154
+ "evolution-commands": "evolution-commands"
13054
13155
  });
13055
13156
  /**
13056
13157
  * The rows whose settings namespace CHANGED with the platform-line move (G3): the
@@ -13340,6 +13441,114 @@ async function applyNamespaceMigration(plan, deps) {
13340
13441
  };
13341
13442
  }
13342
13443
  //#endregion
13444
+ //#region lib/types/live.js
13445
+ /**
13446
+ * The family's ONE live-config reader.
13447
+ *
13448
+ * A config field reaches a plugin in two shapes: the platform's schema parser turns a
13449
+ * `.volatile()` declaration into a live reference (`{ get() }`, routed through cosmokit's
13450
+ * `createVolatile`), while a hand-built or pre-parse config carries the plain value. Reading a
13451
+ * live reference as if it were a value is SILENT (a boolean compare is simply never true, a
13452
+ * number folds as NaN) — so the two shapes are unwrapped in exactly one place here, and every
13453
+ * reader below goes through it.
13454
+ *
13455
+ * This module owns no policy: clamping semantics stay in `clampedNumber` (numeric.ts), and the
13456
+ * once-per-key warning text/rhythm is the one `clampOnce` has always had (it moved here so the
13457
+ * read happens in one place; callers import it from the package barrel, so the move is invisible).
13458
+ *
13459
+ * @module @lmzhen/dsh-evolution-core
13460
+ */
13461
+ /**
13462
+ * Unwrap a live reference; return a plain value unchanged. The ONLY place that decides the shape.
13463
+ *
13464
+ * The discriminant is `typeof get === 'function'` rather than a bare `typeof value === 'object'`: a
13465
+ * config field may legitimately carry an object (a policy record), and calling `.get()` on that
13466
+ * used to throw where a plain read was meant.
13467
+ *
13468
+ * @param value - the field as supplied: live reference, plain value, or absent.
13469
+ * @returns the plain value, or `undefined` when the reference/field is absent.
13470
+ */
13471
+ function unwrapLive(value) {
13472
+ const raw = value;
13473
+ if (typeof raw !== "object" || raw === null) return raw === void 0 ? void 0 : raw;
13474
+ const candidate = raw;
13475
+ return typeof candidate.get === "function" ? candidate.get.call(raw) : raw;
13476
+ }
13477
+ /**
13478
+ * Read a numeric knob (live or plain) and clamp it, warning ONCE per key.
13479
+ *
13480
+ * @param value - the field as supplied: live reference, plain value, or absent.
13481
+ * @param fallback - the package default an invalid value falls back to.
13482
+ * @param opts - bounds plus the optional warning triple.
13483
+ * @returns the value the engine may use.
13484
+ */
13485
+ function liveNumber(value, fallback, opts = {}) {
13486
+ const current = unwrapLive(value);
13487
+ const { min, max } = opts;
13488
+ const result = clampedNumber(current, fallback, min === void 0 ? max === void 0 ? void 0 : { max } : max === void 0 ? { min } : {
13489
+ min,
13490
+ max
13491
+ });
13492
+ const name = opts.name;
13493
+ if (current !== void 0 && result !== current && name !== void 0 && opts.warn !== void 0) {
13494
+ const warned = opts.warned ?? /* @__PURE__ */ new Set();
13495
+ if (!warned.has(name)) {
13496
+ warned.add(name);
13497
+ opts.warn(`${name} provided an invalid value; falling back to the default`);
13498
+ }
13499
+ }
13500
+ return result;
13501
+ }
13502
+ /**
13503
+ * Clamp one numeric knob and warn ONCE per key — the pre-0.22 signature, kept as a thin adapter so
13504
+ * existing callers migrate one at a time instead of in one commit.
13505
+ *
13506
+ * @param warned - the keys this caller already warned about.
13507
+ * @param warn - the warning sink (each package prefixes its own name).
13508
+ * @param name - the config key, for the warning.
13509
+ * @param value - the value as supplied, or its live reference.
13510
+ * @param fallback - the package default a corrected value falls back to.
13511
+ * @param min - the smallest value the engine can act on.
13512
+ * @param max - the largest value the carrier can hold, when bounded.
13513
+ * @returns the value the engine may use.
13514
+ */
13515
+ function clampOnce(warned, warn, name, value, fallback, min, max) {
13516
+ return liveNumber(value, fallback, {
13517
+ min,
13518
+ ...max === void 0 ? {} : { max },
13519
+ warned,
13520
+ warn,
13521
+ name
13522
+ });
13523
+ }
13524
+ /**
13525
+ * Read a boolean flag (live or plain). Absent ⇒ `fallback` (default `false`).
13526
+ *
13527
+ * The boolean counterpart of {@link liveNumber}: `value === true` is never true for a live
13528
+ * reference, which is the silent failure this reader exists to prevent.
13529
+ */
13530
+ function liveBool(value, fallback = false) {
13531
+ return unwrapLive(value) ?? fallback;
13532
+ }
13533
+ /**
13534
+ * Read a string (live or plain). Blank/whitespace counts as unset — the same rule `evolutionRoot` uses
13535
+ * for `DSH_HOME`.
13536
+ */
13537
+ function liveString(value, fallback) {
13538
+ const current = unwrapLive(value)?.trim();
13539
+ return current === void 0 || current.length === 0 ? fallback : current;
13540
+ }
13541
+ /**
13542
+ * Read an enumerated string (live or plain); a value outside `allowed` falls back.
13543
+ *
13544
+ * Used for the mode-like knobs (review mode, trigger, citation policy, write-confirm mode) where a
13545
+ * bare `?? default` would accept a typo the schema never saw.
13546
+ */
13547
+ function liveEnum(value, allowed, fallback) {
13548
+ const current = unwrapLive(value);
13549
+ return current !== void 0 && allowed.includes(current) ? current : fallback;
13550
+ }
13551
+ //#endregion
13343
13552
  //#region lib/types/opt-in.js
13344
13553
  /**
13345
13554
  * Tool names only a session that mounted the family's MODEL rows can see.
@@ -13480,4 +13689,4 @@ function foldUntrustedLines(text, limit) {
13480
13689
  return limit > 0 ? marked.slice(0, limit) : marked;
13481
13690
  }
13482
13691
  //#endregion
13483
- export { AGENT_PRESET_PACKAGE, AGENT_PRESET_ROOT_HINT, ALIVE_LOCK_TAKEOVER_MS, AUTHORING_DESCRIPTION_BAR, AUTHORING_SPLIT_LINE_CHARS, BASELINE_ACTION, CITATION_SUPPORT_DIRS, COMBINED_REVIEW_PLAN_PROMPT, COMBINED_REVIEW_PROMPT, COMPLETION_SKILL_REVIEW_PROMPT, CONTENT_SPLIT_HINT, COST_ASCII_TOKEN_HIGH, COST_ASCII_TOKEN_LOW, COST_CJK_TOKEN_HIGH, COST_CJK_TOKEN_LOW, CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEAD_LOCK_TAKEOVER_MS, DEDUP_MAX_PAIR_COMPARISONS, DEDUP_SIMILARITY_THRESHOLD, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_ARCHIVE_RETENTION_POLICY, DEFAULT_CITATION_POLICY, DEFAULT_CITATION_REF_BUDGET, DEFAULT_CONSOLIDATION_FAILURES, DEFAULT_CURATOR_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MAX_OPS_PER_PLAN, DEFAULT_MEMORY_CHAR_LIMIT, DEFAULT_MEMORY_REVIEW_MODEL, DEFAULT_MIN_IDLE_HOURS, DEFAULT_MUTATION_CAP, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_REFERENCE_REWRITE_POLICY, DEFAULT_REVIEW_CONTEXT_MESSAGES, DEFAULT_REVIEW_MEMORY_INTERVAL, DEFAULT_REVIEW_MESSAGE_CHARS, DEFAULT_REVIEW_SKILL_INTERVAL, DEFAULT_REVIEW_TIMEOUT_MS, DEFAULT_RUN_RECORDS, DEFAULT_SKILL_CONTENT_CHARS, DEFAULT_SKILL_LIMITS, DEFAULT_SKILL_REVIEW_COMPLETION_MIN_TOOL_CALLS, DEFAULT_SKILL_REVIEW_MODEL, DEFAULT_SKILL_REVIEW_TRIGGER, DEFAULT_SKILL_VERSION_KEEP, DEFAULT_STALE_AFTER_DAYS, DEFAULT_SUBSTANTIVE_MIN_AGENT_CHARS, DEFAULT_SUBSTANTIVE_MIN_TOOL_CALLS, DEFAULT_SUBSTANTIVE_MIN_USER_CHARS, DEFAULT_SUPPORT_FILE_CHAR_POLICY, DEFAULT_SUPPORT_READ_TOOL_NAMES, DEFAULT_THREAT_MAX_SCAN_CHARS, DEFAULT_USER_CHAR_LIMIT, DISPATCH_EVENT_TYPES, DRIFT_MAX_LINE_CHARS, DRIFT_SIGNALS_VERSION, DRIFT_SIGNAL_NOUNS, DSH_AUTHORING_STANDARDS, EMPTY_LOCK_TAKEOVER_MS, EMPTY_PATCH_SEED, ENTRY_DELIMITER, EVENT_ARCHIVE_PREFIX, EVENT_LOG_RETAIN_ARCHIVES, EVENT_LOG_ROTATE_AT, EVENT_LOG_VERSION, EVOLUTION_ERRORS, EVOLUTION_WRITE_TOOLS, EvolutionGateSet, FAMILY_SESSION_TOOL_NAMES, FORBIDDEN_CONTROL_KEYS, FUZZY_MAX_PATTERN_CHARS, FUZZY_MAX_WORK, HEALTH_STAMP_RE, HISTORY_DIR, HISTORY_INDEX_VERSION, HOOK_LINE_RE, INSTANCE_KEYS, KEEP_LINE_RE, LOCK_BODY_RE, LOCK_SUFFIX, LOCK_TEAR_TAKEOVER_MS, LONG_RUNS, LOW_QUALITY_THRESHOLD, LostWriteLock, MAINTAIN_OUTPUT_INSTRUCTION, MAINTAIN_PROMPT, MAX_DESCRIPTION_LENGTH, MAX_REQUEST_BODY_BYTES, MAX_RESTRUCTURE_MOVES, MAX_SKILL_CONTENT_CHARS, MAX_SKILL_FILE_BYTES, MAX_SKILL_NAME_LENGTH, MAX_SUPPORT_READ_PATHS, MAX_TIMER_DELAY_MS, MEMORY_GUIDANCE_SECTION_ORDER, MEMORY_REVIEW_PROMPT, MIN_STAMP_BODY_CHARS, MUTATIONS_FILE_VERSION, MemoryStore, NAMESPACE_MIGRATIONS, NATIVE_CALL_EVENT, NATIVE_RESULT_EVENT, PARAM_ALIASES, PARAM_EXPOSURE, PARAM_GROUP_LABELS, PARAM_NAMESPACES, PATTERN_OVERLAP, PLATFORM_CATALOG_DESCRIPTION_DEFAULT, PLATFORM_ESTIMATE_CHARS_PER_TOKEN, PLATFORM_SERVICE_PROBES, POLICY_STAGE_DEFAULTS, PROMPT_BUNDLE, PROMPT_BUNDLE_ID, PROMPT_BUNDLE_VERSION, PROTECTED_BUILTIN_SKILLS, PTC_DISPATCH_EVENT, PTC_DISPATCH_START_EVENT, QUALITY_WEIGHTS, READ_REQUIRED_ACTIONS, RESTRUCTURE_TARGET_RE, RETENTION_FEEDBACK_KEEP_RATIO, RETENTION_FEEDBACK_MIN_CHARS, RUNS_SCHEMA_VERSION, SKILLS_GUIDANCE, SKILLS_GUIDANCE_SECTION_ORDER, SKILL_ACTION_REQUIRED_FIELDS, SKILL_NAME_RE, SKILL_REVIEW_PLAN_PROMPT, SKILL_REVIEW_PROMPT, SNAPSHOT_EXTRA_NAME_RE, SUMMARY_DUPLICATE_HINT_THRESHOLD, SUPPORT_DIRS, SUPPRESSED_FILE_VERSION, SkillLibrary, TEXT_DIFF_MAX_CHARS, TEXT_DIFF_MAX_LINES, THREAT_EXEMPTION_HINT, TOKEN_ASCII_WEIGHT, TOKEN_CJK_WEIGHT, ToolDispatchNormalizer, ToolDispatchPayloadError, UNTRUSTED_LINE_BREAK, UNTRUSTED_LINE_MARK, UPSTREAM_LIMIT_CHARS_PER_TOKEN, VERSION_SUMMARY_MAX_CHARS, absentHostServices, advanceReview, affinity, ageCopyKey, allowRowCollisions, anchorVerdict, appendEvolutionEvent, applyCuratorLifecycleFields, applyCuratorMetaFields, applyNamespaceMigration, applyReferenceRewrite, assertDispatchPayload, assertSkillsRootAliasRetired, assessStructureHealth, authoringFeedback, basePresetPlugins, blobPath, bodyCost, buildCuratorRunReport, buildLearnPrompt, bumpPatch, bumpSupportRead, bumpUse, bumpView, callingScope, canonicalWriteId, claimInstance, clampOnce, clampedNumber, classifyNamespaceMigration, clearReviewChannel, collectReadSkillNames, composePresetComposition, composePresetEntry, composePresetInsert, composePresetRow, computeDedupGroups, computeDriftSignals, computeLifecycleTransitions, computePrefixClusters, computeQualityScores, computeScopeView, contentHash, contentRetentionFeedback, countDispatches, createGateSet, daysSinceIso, decideTakeover, declaredReportStamp, describeReferenceRewrite, dispatchKeyOf, dispatchStepOf, displayBodyOf, duplicateHeadings, elapsedSince, emptyRecord, entryTarget, errorText, evaluateThreat, eventsFile, evidenceKindIndex, evolutionActivityProjection, evolutionEventPayloadIssue, evolutionEvidenceProjection, evolutionHome, evolutionIoAdapter, evolutionReadsProjection, evolutionRoot, evolutionSignalsProjection, filterUnreadSkillOps, findDriftSignal, foldCuratorFields, foldToolDispatches, foldTurnEvent, foldTurnEvents, foldUntrustedLines, frontmatterBlock, frontmatterCatalogInvalid, fuzzyPatch, getRecord, historyIndexFile, historyRoot, identity, idleDays, initialTurnFold, installEvolutionProjections, instanceClaimKey, instanceClaimedWriteSites, instanceHolder, isAbsent, isBookkeepingFrame, isCommittedWarning, isDeprecatedParamId, isFileShapedPath, isLoopbackRequest, isMissingPath, isPresent, isProcessAlive, isProgramToolName, isReviewChannelSession, isSkillReadToolName, isSkillToolName, isUnknown, isUnreadWrite, latestActivityAt, latestVersionAt, lifecycleCandidate, listEventArchives, loadMutations, loadRowOverrides, loadSuppressedNames, loadUsage, loadVersionContent, loadVersions, makeSerialQueue, mapProbe, markAgentCreated, markReviewChannel, markerEntryName, memoryRoot, mergePresetRow, missingSupportPointers, mutateUsage, mutationsFile, narrowNameMatches, nearDuplicateSummaries, neutralizePromptVariables, newRunRegistry, newSkillLibrary, nextHistoryIndex, nodeEvolutionIo, normalizeFrontmatter, normalizeUsageRecord, normalizeVersionSummary, observeEvent, orderVersions, overlongLines, paramNamespace, paramRowId, paramSettingsId, parseCuratorNominations, parseEvolutionEvents, parseFrontmatter, parseHistoryIndex, parseLockBody, partitionVersions, payloadText, pendingSelfCleanup, persistedWriteSite, persistedWriteSites, pickWithPolicy, planNamespaceMigration, planReferenceRewrite, planRehoming, policyStageLimits, presetPatchText, presetRowBlock, presetRowBody, presetRowId, probeAbsent, probeList, probeMtime, probePresent, probeReason, probeText, probeUnknown, projectionText, readDispatchSignal, readEvolutionEvents, readEvolutionTimeline, readHistoryIndex, readJsonBody, readJsonObject, readNumberParam, readParam, readingStats, recordMutation, recordVersions, redactSecrets, relatedSkillNames, releaseInstance, removePresetRow, renameWithRetry, renderCuratorReportMarkdown, renderLongRunTable, reportTime, reportsSweepLockTarget, resolveBasePresetPatch, resolveCitations, resolveExecOrigins, resolveOrigins, resolveParamId, resolveRootConfig, resolveSkillsRoot, retainEventArchives, retirementReport, reviewPrompt, runsFile, saveSuppressedNames, saveUsage, scanBodyHooks, scanContentThreats, scanMemoryThreats, scanThreats, scopedProbeReport, sessionAudited, sessionEvidenceIndex, sessionLastEventTime, sessionReadNames, sessionReadSkillNames, sessionSeesFamilyTools, sessionTurnSignals, skillReadNameOf, skillRowCells, skillStateKey, skillsRoot, supportFileReadOf, suppressedFile, sweepReports, sweepReviewChannelSessions, textDiffFacts, tokenLineFor, transactIo, transactTaskGuard, trimPatternBoundaries, unhookedSupportPointers, updateSuppressedNames, usageFile, usageObserved, userSetKeys, validateFrontmatter, validateRestructureTarget, valueOr, verifyPromptBundle, versionActionKind, versionRowCells, versionSummaryPrompt, versionTarget, vocabulary, writeDurableTmp, writeJson, yamlPlainScalarNeedsQuotes };
13692
+ export { AGENT_PRESET_PACKAGE, AGENT_PRESET_ROOT_HINT, ALIVE_LOCK_TAKEOVER_MS, AUTHORING_DESCRIPTION_BAR, AUTHORING_SPLIT_LINE_CHARS, BASELINE_ACTION, CITATION_SUPPORT_DIRS, COMBINED_REVIEW_PLAN_PROMPT, COMBINED_REVIEW_PROMPT, COMPLETION_SKILL_REVIEW_PROMPT, CONTENT_SPLIT_HINT, COST_ASCII_TOKEN_HIGH, COST_ASCII_TOKEN_LOW, COST_CJK_TOKEN_HIGH, COST_CJK_TOKEN_LOW, CURATOR_DRY_RUN_BANNER, CURATOR_PROMPT, DEAD_LOCK_TAKEOVER_MS, DEDUP_MAX_PAIR_COMPARISONS, DEDUP_SIMILARITY_THRESHOLD, DEFAULT_ARCHIVE_AFTER_DAYS, DEFAULT_ARCHIVE_RETENTION_POLICY, DEFAULT_CITATION_POLICY, DEFAULT_CITATION_REF_BUDGET, DEFAULT_CONSOLIDATION_FAILURES, DEFAULT_CURATOR_BOOT_GRACE_SECONDS, DEFAULT_CURATOR_INTERVAL_HOURS, DEFAULT_CURATOR_MODEL, DEFAULT_CURATOR_REVIEW_MAX_TOKENS, DEFAULT_HEALTH_THRESHOLDS, DEFAULT_MAX_OPS_PER_PLAN, DEFAULT_MEMORY_CHAR_LIMIT, DEFAULT_MEMORY_REVIEW_MODEL, DEFAULT_MIN_IDLE_HOURS, DEFAULT_MUTATION_CAP, DEFAULT_PROBE_TIMEOUT_MS, DEFAULT_REFERENCE_REWRITE_POLICY, DEFAULT_REVIEW_CONTEXT_MESSAGES, DEFAULT_REVIEW_MEMORY_INTERVAL, DEFAULT_REVIEW_MESSAGE_CHARS, DEFAULT_REVIEW_SKILL_INTERVAL, DEFAULT_REVIEW_TIMEOUT_MS, DEFAULT_RUN_RECORDS, DEFAULT_SKILL_CONTENT_CHARS, DEFAULT_SKILL_LIMITS, DEFAULT_SKILL_REVIEW_COMPLETION_MIN_TOOL_CALLS, DEFAULT_SKILL_REVIEW_MODEL, DEFAULT_SKILL_REVIEW_TRIGGER, DEFAULT_SKILL_VERSION_KEEP, DEFAULT_STALE_AFTER_DAYS, DEFAULT_SUBSTANTIVE_MIN_AGENT_CHARS, DEFAULT_SUBSTANTIVE_MIN_TOOL_CALLS, DEFAULT_SUBSTANTIVE_MIN_USER_CHARS, DEFAULT_SUPPORT_FILE_CHAR_POLICY, DEFAULT_SUPPORT_READ_TOOL_NAMES, DEFAULT_THREAT_MAX_SCAN_CHARS, DEFAULT_USER_CHAR_LIMIT, DISPATCH_EVENT_TYPES, DRIFT_MAX_LINE_CHARS, DRIFT_SIGNALS_VERSION, DRIFT_SIGNAL_NOUNS, DSH_AUTHORING_STANDARDS, EMPTY_LOCK_TAKEOVER_MS, EMPTY_PATCH_SEED, ENTRY_DELIMITER, EVENT_ARCHIVE_PREFIX, EVENT_LOG_RETAIN_ARCHIVES, EVENT_LOG_ROTATE_AT, EVENT_LOG_VERSION, EVOLUTION_ERRORS, EVOLUTION_WRITE_TOOLS, EvolutionGateSet, FAMILY_SESSION_TOOL_NAMES, FORBIDDEN_CONTROL_KEYS, FUZZY_MAX_PATTERN_CHARS, FUZZY_MAX_WORK, HEALTH_STAMP_RE, HISTORY_DIR, HISTORY_INDEX_VERSION, HOOK_LINE_RE, INSTANCE_KEYS, KEEP_LINE_RE, LOCK_BODY_RE, LOCK_SUFFIX, LOCK_TEAR_TAKEOVER_MS, LONG_RUNS, LOW_QUALITY_THRESHOLD, LostWriteLock, MAINTAIN_OUTPUT_INSTRUCTION, MAINTAIN_PROMPT, MAX_DESCRIPTION_LENGTH, MAX_REQUEST_BODY_BYTES, MAX_RESTRUCTURE_MOVES, MAX_SKILL_CONTENT_CHARS, MAX_SKILL_FILE_BYTES, MAX_SKILL_NAME_LENGTH, MAX_SUPPORT_READ_PATHS, MAX_TIMER_DELAY_MS, MEMORY_GUIDANCE_SECTION_ORDER, MEMORY_REVIEW_PROMPT, MIN_STAMP_BODY_CHARS, MUTATIONS_FILE_VERSION, MemoryStore, NAMESPACE_MIGRATIONS, NATIVE_CALL_EVENT, NATIVE_RESULT_EVENT, PARAM_ALIASES, PARAM_EXPOSURE, PARAM_GROUP_LABELS, PARAM_NAMESPACES, PATTERN_OVERLAP, PLATFORM_CATALOG_DESCRIPTION_DEFAULT, PLATFORM_ESTIMATE_CHARS_PER_TOKEN, PLATFORM_SERVICE_PROBES, POLICY_STAGE_DEFAULTS, PROMPT_BUNDLE, PROMPT_BUNDLE_ID, PROMPT_BUNDLE_VERSION, PROTECTED_BUILTIN_SKILLS, PTC_DISPATCH_EVENT, PTC_DISPATCH_START_EVENT, QUALITY_WEIGHTS, READ_REQUIRED_ACTIONS, RESTRUCTURE_TARGET_RE, RETENTION_FEEDBACK_KEEP_RATIO, RETENTION_FEEDBACK_MIN_CHARS, RUNS_SCHEMA_VERSION, SKILLS_GUIDANCE, SKILLS_GUIDANCE_SECTION_ORDER, SKILL_ACTION_REQUIRED_FIELDS, SKILL_NAME_RE, SKILL_REVIEW_PLAN_PROMPT, SKILL_REVIEW_PROMPT, SNAPSHOT_EXTRA_NAME_RE, SUMMARY_DUPLICATE_HINT_THRESHOLD, SUPPORT_DIRS, SUPPRESSED_FILE_VERSION, SkillLibrary, TEXT_DIFF_MAX_CHARS, TEXT_DIFF_MAX_LINES, THREAT_EXEMPTION_HINT, TOKEN_ASCII_WEIGHT, TOKEN_CJK_WEIGHT, ToolDispatchNormalizer, ToolDispatchPayloadError, UNTRUSTED_LINE_BREAK, UNTRUSTED_LINE_MARK, UPSTREAM_LIMIT_CHARS_PER_TOKEN, VERSION_SUMMARY_MAX_CHARS, absentHostServices, advanceReview, affinity, ageCopyKey, allowRowCollisions, anchorVerdict, appendEvolutionEvent, applyCuratorLifecycleFields, applyCuratorMetaFields, applyNamespaceMigration, applyReferenceRewrite, assertDispatchPayload, assertSkillsRootAliasRetired, assessStructureHealth, authoringFeedback, basePresetPlugins, blobPath, bodyCost, buildCuratorRunReport, buildLearnPrompt, bumpPatch, bumpSupportRead, bumpUse, bumpView, callingScope, canonicalWriteId, claimInstance, clampOnce, clampedNumber, classifyNamespaceMigration, clearReviewChannel, collectReadSkillNames, composePresetComposition, composePresetEntry, composePresetInsert, composePresetRow, computeDedupGroups, computeDriftSignals, computeLifecycleTransitions, computePrefixClusters, computeQualityScores, computeScopeView, contentHash, contentRetentionFeedback, countDispatches, createGateSet, daysSinceIso, decideTakeover, declaredReportStamp, describeReferenceRewrite, dispatchKeyOf, dispatchStepOf, displayBodyOf, duplicateHeadings, elapsedSince, emptyRecord, entryTarget, errorText, evaluateThreat, eventsFile, evidenceKindIndex, evolutionActivityProjection, evolutionEventPayloadIssue, evolutionEvidenceProjection, evolutionHome, evolutionIoAdapter, evolutionReadsProjection, evolutionRoot, evolutionSignalsProjection, filterUnreadSkillOps, findDriftSignal, foldCuratorFields, foldToolDispatches, foldTurnEvent, foldTurnEvents, foldUntrustedLines, frontmatterBlock, frontmatterCatalogInvalid, fuzzyPatch, getRecord, historyIndexFile, historyRoot, identity, idleDays, initialTurnFold, installEvolutionProjections, instanceClaimKey, instanceClaimedWriteSites, instanceHolder, isAbsent, isBookkeepingFrame, isCommittedWarning, isDeprecatedParamId, isFileShapedPath, isLoopbackRequest, isMissingPath, isPresent, isProcessAlive, isProgramToolName, isReviewChannelSession, isSkillReadToolName, isSkillToolName, isUnknown, isUnreadWrite, latestActivityAt, latestVersionAt, lifecycleCandidate, listEventArchives, liveBool, liveEnum, liveNumber, liveString, loadMutations, loadRowOverrides, loadSuppressedNames, loadUsage, loadVersionContent, loadVersions, makeSerialQueue, mapProbe, markAgentCreated, markReviewChannel, markerEntryName, memoryRoot, mergePresetRow, missingSupportPointers, mutateUsage, mutationsFile, narrowNameMatches, nearDuplicateSummaries, neutralizePromptVariables, newRunRegistry, newSkillLibrary, nextHistoryIndex, nodeEvolutionIo, normalizeFrontmatter, normalizeUsageRecord, normalizeVersionSummary, observeEvent, orderVersions, overlongLines, paramNamespace, paramRowId, paramSettingsId, parseCuratorNominations, parseEvolutionEvents, parseFrontmatter, parseHistoryIndex, parseLockBody, partitionVersions, payloadText, pendingSelfCleanup, persistedWriteSite, persistedWriteSites, pickWithPolicy, planNamespaceMigration, planReferenceRewrite, planRehoming, policyStageLimits, presetPatchText, presetRowBlock, presetRowBody, presetRowId, probeAbsent, probeList, probeMtime, probePresent, probeReason, probeText, probeUnknown, projectionText, readDispatchSignal, readEvolutionEvents, readEvolutionTimeline, readHistoryIndex, readJsonBody, readJsonObject, readNumberParam, readParam, readingStats, recordMutation, recordVersions, redactSecrets, relatedSkillNames, releaseInstance, removePresetRow, renameWithRetry, renderCuratorReportMarkdown, renderLongRunTable, reportTime, reportsSweepLockTarget, resolveBasePresetPatch, resolveCitations, resolveExecOrigins, resolveOrigins, resolveParamId, resolveRootConfig, resolveSkillsRoot, retainEventArchives, retirementReport, reviewPrompt, runsFile, saveSuppressedNames, saveUsage, scanBodyHooks, scanContentThreats, scanMemoryThreats, scanThreats, scopedProbeReport, sessionAudited, sessionEvidenceIndex, sessionLastEventTime, sessionReadNames, sessionReadSkillNames, sessionSeesFamilyTools, sessionTurnSignals, skillReadNameOf, skillRowCells, skillStateKey, skillsRoot, supportFileReadOf, suppressedFile, sweepReports, sweepReviewChannelSessions, textDiffFacts, tokenLineFor, transactIo, transactTaskGuard, trimPatternBoundaries, unhookedSupportPointers, unwrapLive, updateSuppressedNames, usageFile, usageObserved, userSetKeys, validateFrontmatter, validateRestructureTarget, valueOr, verifyPromptBundle, versionActionKind, versionRowCells, versionSummaryPrompt, versionTarget, vocabulary, writeDurableTmp, writeJson, writePathSymbols, yamlPlainScalarNeedsQuotes };