@lmzhen/dsh-evolution-core 0.20.0 → 0.21.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
@@ -11860,7 +11860,8 @@ const PARAM_EXPOSURE = Object.freeze([
11860
11860
  hint: "每累计多少次工具调用检查一次技能:一轮按该轮工具调用数累加(一轮没有工具调用也算 1 次),本轮本身用到技能则只算 1 次。",
11861
11861
  control: "number",
11862
11862
  unit: "次",
11863
- values: ""
11863
+ values: "",
11864
+ card: "evolution-review"
11864
11865
  },
11865
11866
  {
11866
11867
  id: "reviewMemoryInterval",
@@ -11875,7 +11876,8 @@ const PARAM_EXPOSURE = Object.freeze([
11875
11876
  hint: "每累计多少次工具调用检查一次记忆:一轮按该轮工具调用数累加(一轮没有工具调用也算 1 次),本轮本身用到记忆则只算 1 次。",
11876
11877
  control: "number",
11877
11878
  unit: "次",
11878
- values: ""
11879
+ values: "",
11880
+ card: "evolution-review"
11879
11881
  },
11880
11882
  {
11881
11883
  id: "skillReviewTrigger",
@@ -11891,7 +11893,8 @@ const PARAM_EXPOSURE = Object.freeze([
11891
11893
  control: "select",
11892
11894
  unit: "",
11893
11895
  values: "cadence|completion|both",
11894
- valueLabels: "按间隔|按任务完成|两者"
11896
+ valueLabels: "按间隔|按任务完成|两者",
11897
+ card: "evolution-review"
11895
11898
  },
11896
11899
  {
11897
11900
  id: "skillReviewCompletionMinToolCalls",
@@ -11906,7 +11909,8 @@ const PARAM_EXPOSURE = Object.freeze([
11906
11909
  hint: "选「按任务完成」时,任务至少用了几次工具才检查。",
11907
11910
  control: "number",
11908
11911
  unit: "次",
11909
- values: ""
11912
+ values: "",
11913
+ card: "evolution-review"
11910
11914
  },
11911
11915
  {
11912
11916
  id: "reviewEnabled",
@@ -11921,7 +11925,8 @@ const PARAM_EXPOSURE = Object.freeze([
11921
11925
  hint: "关闭后不再自动回顾会话。",
11922
11926
  control: "switch",
11923
11927
  unit: "",
11924
- values: ""
11928
+ values: "",
11929
+ card: "evolution-review"
11925
11930
  },
11926
11931
  {
11927
11932
  id: "reviewMode",
@@ -11937,7 +11942,8 @@ const PARAM_EXPOSURE = Object.freeze([
11937
11942
  control: "select",
11938
11943
  unit: "",
11939
11944
  values: "subagent|inject",
11940
- valueLabels: "交给子代理|在当前会话里"
11945
+ valueLabels: "交给子代理|在当前会话里",
11946
+ card: "evolution-review"
11941
11947
  },
11942
11948
  {
11943
11949
  id: "reviewWakeInject",
@@ -11952,7 +11958,8 @@ const PARAM_EXPOSURE = Object.freeze([
11952
11958
  hint: "会话空闲时,把延后的检查结果作为一条提醒发给你。",
11953
11959
  control: "switch",
11954
11960
  unit: "",
11955
- values: ""
11961
+ values: "",
11962
+ card: "evolution-review"
11956
11963
  },
11957
11964
  {
11958
11965
  id: "reviewProvider",
@@ -11962,7 +11969,8 @@ const PARAM_EXPOSURE = Object.freeze([
11962
11969
  owner: "evolution-review",
11963
11970
  applies: "none",
11964
11971
  docAnchor: "PARAMETERS.md#review",
11965
- summary: "LLM provider for review subagents (deployment identity)."
11972
+ summary: "LLM provider for review subagents (deployment identity).",
11973
+ why: "identity"
11966
11974
  },
11967
11975
  {
11968
11976
  id: "reviewTimeoutMs",
@@ -11972,7 +11980,8 @@ const PARAM_EXPOSURE = Object.freeze([
11972
11980
  owner: "evolution-review",
11973
11981
  applies: "none",
11974
11982
  docAnchor: "PARAMETERS.md#review",
11975
- summary: "Bound on one review subagent run and its write leg."
11983
+ summary: "Bound on one review subagent run and its write leg.",
11984
+ why: "internal"
11976
11985
  },
11977
11986
  {
11978
11987
  id: "reviewContextMessages",
@@ -11982,7 +11991,8 @@ const PARAM_EXPOSURE = Object.freeze([
11982
11991
  owner: "evolution-review",
11983
11992
  applies: "none",
11984
11993
  docAnchor: "PARAMETERS.md#review",
11985
- summary: "Messages of context handed to a review subagent."
11994
+ summary: "Messages of context handed to a review subagent.",
11995
+ why: "internal"
11986
11996
  },
11987
11997
  {
11988
11998
  id: "reviewMessageChars",
@@ -11992,7 +12002,8 @@ const PARAM_EXPOSURE = Object.freeze([
11992
12002
  owner: "evolution-review",
11993
12003
  applies: "none",
11994
12004
  docAnchor: "PARAMETERS.md#review",
11995
- summary: "Per-message character budget of the review context."
12005
+ summary: "Per-message character budget of the review context.",
12006
+ why: "internal"
11996
12007
  },
11997
12008
  {
11998
12009
  id: "reviewMaxDepth",
@@ -12002,7 +12013,8 @@ const PARAM_EXPOSURE = Object.freeze([
12002
12013
  owner: "evolution-review",
12003
12014
  applies: "none",
12004
12015
  docAnchor: "PARAMETERS.md#review",
12005
- summary: "Absolute delegation-depth cap of the review subagent."
12016
+ summary: "Absolute delegation-depth cap of the review subagent.",
12017
+ why: "internal"
12006
12018
  },
12007
12019
  {
12008
12020
  id: "reviewToolAllow",
@@ -12012,7 +12024,8 @@ const PARAM_EXPOSURE = Object.freeze([
12012
12024
  owner: "evolution-review",
12013
12025
  applies: "none",
12014
12026
  docAnchor: "PARAMETERS.md#review",
12015
- summary: "Tools the review subagent may use (safety surface)."
12027
+ summary: "Tools the review subagent may use (safety surface).",
12028
+ why: "security"
12016
12029
  },
12017
12030
  {
12018
12031
  id: "skillContentChars",
@@ -12027,7 +12040,8 @@ const PARAM_EXPOSURE = Object.freeze([
12027
12040
  hint: "技能 Markdown 正文最多多少字符(只能调小)。",
12028
12041
  control: "number",
12029
12042
  unit: "字符",
12030
- values: ""
12043
+ values: "",
12044
+ card: "tool-skill-manage"
12031
12045
  },
12032
12046
  {
12033
12047
  id: "maxSkillFileBytes",
@@ -12042,7 +12056,8 @@ const PARAM_EXPOSURE = Object.freeze([
12042
12056
  hint: "技能附带文件单个最大多少字节(只能调小)。",
12043
12057
  control: "number",
12044
12058
  unit: "字节",
12045
- values: ""
12059
+ values: "",
12060
+ card: "tool-skill-manage"
12046
12061
  },
12047
12062
  {
12048
12063
  id: "maxSkillNameLength",
@@ -12057,7 +12072,8 @@ const PARAM_EXPOSURE = Object.freeze([
12057
12072
  hint: "技能名最多多少字符(只能调小)。",
12058
12073
  control: "number",
12059
12074
  unit: "字符",
12060
- values: ""
12075
+ values: "",
12076
+ card: "tool-skill-manage"
12061
12077
  },
12062
12078
  {
12063
12079
  id: "maxDescriptionLength",
@@ -12072,7 +12088,8 @@ const PARAM_EXPOSURE = Object.freeze([
12072
12088
  hint: "技能描述最多多少字符(只能调小)。",
12073
12089
  control: "number",
12074
12090
  unit: "字符",
12075
- values: ""
12091
+ values: "",
12092
+ card: "tool-skill-manage"
12076
12093
  },
12077
12094
  {
12078
12095
  id: "descriptionStrict",
@@ -12087,7 +12104,8 @@ const PARAM_EXPOSURE = Object.freeze([
12087
12104
  hint: "描述不符合要求时直接拒绝写入(默认只提醒)。",
12088
12105
  control: "switch",
12089
12106
  unit: "",
12090
- values: ""
12107
+ values: "",
12108
+ card: "tool-skill-manage"
12091
12109
  },
12092
12110
  {
12093
12111
  id: "strictCrossSource",
@@ -12102,7 +12120,8 @@ const PARAM_EXPOSURE = Object.freeze([
12102
12120
  hint: "技能引用了本插件之外的文件时拒绝写入。",
12103
12121
  control: "switch",
12104
12122
  unit: "",
12105
- values: ""
12123
+ values: "",
12124
+ card: "tool-skill-manage"
12106
12125
  },
12107
12126
  {
12108
12127
  id: "citationPolicy",
@@ -12118,7 +12137,8 @@ const PARAM_EXPOSURE = Object.freeze([
12118
12137
  control: "select",
12119
12138
  unit: "",
12120
12139
  values: "verify|refuse",
12121
- valueLabels: "先检查|直接拒绝"
12140
+ valueLabels: "先检查|直接拒绝",
12141
+ card: "tool-skill-manage"
12122
12142
  },
12123
12143
  {
12124
12144
  id: "referenceRewrite",
@@ -12128,7 +12148,8 @@ const PARAM_EXPOSURE = Object.freeze([
12128
12148
  owner: "tool-skill-manage",
12129
12149
  applies: "none",
12130
12150
  docAnchor: "PARAMETERS.md#write-caps",
12131
- summary: "Re-home support files and rewrite references during a merge (plan or apply)."
12151
+ summary: "Re-home support files and rewrite references during a merge (plan or apply).",
12152
+ why: "internal"
12132
12153
  },
12133
12154
  {
12134
12155
  id: "archiveRetention",
@@ -12138,7 +12159,8 @@ const PARAM_EXPOSURE = Object.freeze([
12138
12159
  owner: "tool-skill-manage",
12139
12160
  applies: "none",
12140
12161
  docAnchor: "PARAMETERS.md#write-caps",
12141
- summary: "Report expired archives, or prune them."
12162
+ summary: "Report expired archives, or prune them.",
12163
+ why: "internal"
12142
12164
  },
12143
12165
  {
12144
12166
  id: "skillVersionKeep",
@@ -12148,7 +12170,8 @@ const PARAM_EXPOSURE = Object.freeze([
12148
12170
  owner: "tool-skill-manage",
12149
12171
  applies: "none",
12150
12172
  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."
12173
+ 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.",
12174
+ why: "internal"
12152
12175
  },
12153
12176
  {
12154
12177
  id: "supportFileCharPolicy",
@@ -12164,7 +12187,8 @@ const PARAM_EXPOSURE = Object.freeze([
12164
12187
  control: "select",
12165
12188
  unit: "",
12166
12189
  values: "report|enforce",
12167
- valueLabels: "只提醒|拒绝写入"
12190
+ valueLabels: "只提醒|拒绝写入",
12191
+ card: "tool-skill-manage"
12168
12192
  },
12169
12193
  {
12170
12194
  id: "skillWriteConfirm",
@@ -12180,7 +12204,8 @@ const PARAM_EXPOSURE = Object.freeze([
12180
12204
  control: "select",
12181
12205
  unit: "",
12182
12206
  values: "auto|ask|timeout",
12183
- valueLabels: "不弹窗直接写入|一直等待回答|超时自动取消"
12207
+ valueLabels: "不弹窗直接写入|一直等待回答|超时自动取消",
12208
+ card: "tool-skill-manage"
12184
12209
  },
12185
12210
  {
12186
12211
  id: "skillWriteConfirmTimeoutSeconds",
@@ -12195,7 +12220,8 @@ const PARAM_EXPOSURE = Object.freeze([
12195
12220
  hint: "选「超时自动取消」时,等多少秒没人回答就取消这次写入。",
12196
12221
  control: "number",
12197
12222
  unit: "秒",
12198
- values: ""
12223
+ values: "",
12224
+ card: "tool-skill-manage"
12199
12225
  },
12200
12226
  {
12201
12227
  id: "memoryChars",
@@ -12210,7 +12236,8 @@ const PARAM_EXPOSURE = Object.freeze([
12210
12236
  hint: "长期记忆文件(MEMORY.md)最多多少字符。",
12211
12237
  control: "number",
12212
12238
  unit: "字符",
12213
- values: ""
12239
+ values: "",
12240
+ card: "memory-files"
12214
12241
  },
12215
12242
  {
12216
12243
  id: "userChars",
@@ -12225,7 +12252,8 @@ const PARAM_EXPOSURE = Object.freeze([
12225
12252
  hint: "用户画像文件(USER.md)最多多少字符。",
12226
12253
  control: "number",
12227
12254
  unit: "字符",
12228
- values: ""
12255
+ values: "",
12256
+ card: "memory-files"
12229
12257
  },
12230
12258
  {
12231
12259
  id: "memoryEnabled",
@@ -12235,7 +12263,8 @@ const PARAM_EXPOSURE = Object.freeze([
12235
12263
  owner: "tool-memory",
12236
12264
  applies: "none",
12237
12265
  docAnchor: "PARAMETERS.md#memory",
12238
- summary: "Register the memory tool and its prompt section at all (deployment switch)."
12266
+ summary: "Register the memory tool and its prompt section at all (deployment switch).",
12267
+ why: "deployment"
12239
12268
  },
12240
12269
  {
12241
12270
  id: "entryPreviewChars",
@@ -12250,7 +12279,8 @@ const PARAM_EXPOSURE = Object.freeze([
12250
12279
  hint: "列表里每条记忆最多显示多少字符。",
12251
12280
  control: "number",
12252
12281
  unit: "字符",
12253
- values: ""
12282
+ values: "",
12283
+ card: "tool-memory"
12254
12284
  },
12255
12285
  {
12256
12286
  id: "addDatePrefix",
@@ -12265,7 +12295,8 @@ const PARAM_EXPOSURE = Object.freeze([
12265
12295
  hint: "写入时在条目开头加上日期。",
12266
12296
  control: "switch",
12267
12297
  unit: "",
12268
- values: ""
12298
+ values: "",
12299
+ card: "memory-files"
12269
12300
  },
12270
12301
  {
12271
12302
  id: "maxConsolidationFailures",
@@ -12280,7 +12311,8 @@ const PARAM_EXPOSURE = Object.freeze([
12280
12311
  hint: "合并记忆连续失败多少次后停止。",
12281
12312
  control: "number",
12282
12313
  unit: "次",
12283
- values: ""
12314
+ values: "",
12315
+ card: "memory-files"
12284
12316
  },
12285
12317
  {
12286
12318
  id: "curatorIntervalHours",
@@ -12295,7 +12327,8 @@ const PARAM_EXPOSURE = Object.freeze([
12295
12327
  hint: "两次自动整理之间至少间隔多少小时。",
12296
12328
  control: "number",
12297
12329
  unit: "小时",
12298
- values: ""
12330
+ values: "",
12331
+ card: "evolution-curator"
12299
12332
  },
12300
12333
  {
12301
12334
  id: "staleAfterDays",
@@ -12310,7 +12343,8 @@ const PARAM_EXPOSURE = Object.freeze([
12310
12343
  hint: "技能连续多少天没被用到就算过时。",
12311
12344
  control: "number",
12312
12345
  unit: "天",
12313
- values: ""
12346
+ values: "",
12347
+ card: "evolution-curator"
12314
12348
  },
12315
12349
  {
12316
12350
  id: "archiveAfterDays",
@@ -12325,22 +12359,19 @@ const PARAM_EXPOSURE = Object.freeze([
12325
12359
  hint: "过时技能再过多少天移入归档(不能小于上一项)。",
12326
12360
  control: "number",
12327
12361
  unit: "天",
12328
- values: ""
12362
+ values: "",
12363
+ card: "evolution-curator"
12329
12364
  },
12330
12365
  {
12331
12366
  id: "qualityWarnStaleAfterDays",
12332
12367
  group: "curator",
12333
- tier: "E3",
12368
+ tier: "E2",
12334
12369
  authority: "cordis",
12335
12370
  owner: "evolution-curator",
12336
- applies: "live",
12371
+ applies: "none",
12337
12372
  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: ""
12373
+ 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).",
12374
+ why: "internal"
12344
12375
  },
12345
12376
  {
12346
12377
  id: "minIdleHours",
@@ -12355,7 +12386,8 @@ const PARAM_EXPOSURE = Object.freeze([
12355
12386
  hint: "你至少多少小时没用,才运行自动整理。",
12356
12387
  control: "number",
12357
12388
  unit: "小时",
12358
- values: ""
12389
+ values: "",
12390
+ card: "evolution-curator"
12359
12391
  },
12360
12392
  {
12361
12393
  id: "minIdleFailOpen",
@@ -12370,7 +12402,8 @@ const PARAM_EXPOSURE = Object.freeze([
12370
12402
  hint: "无法判断你是否空闲时,仍然运行自动整理。",
12371
12403
  control: "switch",
12372
12404
  unit: "",
12373
- values: ""
12405
+ values: "",
12406
+ card: "evolution-curator"
12374
12407
  },
12375
12408
  {
12376
12409
  id: "llmReview",
@@ -12385,7 +12418,8 @@ const PARAM_EXPOSURE = Object.freeze([
12385
12418
  hint: "在固定规则之外,再用模型挑一遍候选项。",
12386
12419
  control: "switch",
12387
12420
  unit: "",
12388
- values: ""
12421
+ values: "",
12422
+ card: "evolution-curator"
12389
12423
  },
12390
12424
  {
12391
12425
  id: "curatorReviewMaxTokens",
@@ -12400,7 +12434,8 @@ const PARAM_EXPOSURE = Object.freeze([
12400
12434
  hint: "每次用模型挑选时最多消耗多少 token。",
12401
12435
  control: "number",
12402
12436
  unit: "token",
12403
- values: ""
12437
+ values: "",
12438
+ card: "evolution-curator"
12404
12439
  },
12405
12440
  {
12406
12441
  id: "curatorReviewTimeoutMs",
@@ -12415,7 +12450,8 @@ const PARAM_EXPOSURE = Object.freeze([
12415
12450
  hint: "一次模型挑选最长允许运行多久。",
12416
12451
  control: "number",
12417
12452
  unit: "毫秒",
12418
- values: ""
12453
+ values: "",
12454
+ card: "evolution-curator"
12419
12455
  },
12420
12456
  {
12421
12457
  id: "healthSoftBodyChars",
@@ -12430,7 +12466,8 @@ const PARAM_EXPOSURE = Object.freeze([
12430
12466
  hint: "技能正文超过多少字符算偏长(只用于健康提示)。",
12431
12467
  control: "number",
12432
12468
  unit: "字符",
12433
- values: ""
12469
+ values: "",
12470
+ card: "evolution-curator"
12434
12471
  },
12435
12472
  {
12436
12473
  id: "healthStampDensityPerKb",
@@ -12445,7 +12482,8 @@ const PARAM_EXPOSURE = Object.freeze([
12445
12482
  hint: "每 KB 出现多少个时间标记,就判为「像日志」。",
12446
12483
  control: "number",
12447
12484
  unit: "处/KB",
12448
- values: ""
12485
+ values: "",
12486
+ card: "evolution-curator"
12449
12487
  },
12450
12488
  {
12451
12489
  id: "healthChurnMinPatches",
@@ -12460,7 +12498,8 @@ const PARAM_EXPOSURE = Object.freeze([
12460
12498
  hint: "连续多少次改动都没有被读取,就判为「只写不读」。",
12461
12499
  control: "number",
12462
12500
  unit: "处",
12463
- values: ""
12501
+ values: "",
12502
+ card: "evolution-curator"
12464
12503
  },
12465
12504
  {
12466
12505
  id: "evolution-curator.enabled",
@@ -12470,7 +12509,8 @@ const PARAM_EXPOSURE = Object.freeze([
12470
12509
  owner: "evolution-curator",
12471
12510
  applies: "none",
12472
12511
  docAnchor: "PARAMETERS.md#curator",
12473
- summary: "Mount the curator plugin at all."
12512
+ summary: "Mount the curator plugin at all.",
12513
+ why: "deployment"
12474
12514
  },
12475
12515
  {
12476
12516
  id: "autoStart",
@@ -12480,7 +12520,8 @@ const PARAM_EXPOSURE = Object.freeze([
12480
12520
  owner: "evolution-curator",
12481
12521
  applies: "none",
12482
12522
  docAnchor: "PARAMETERS.md#curator",
12483
- summary: "Arm the hourly due-ness tick with the plugin."
12523
+ 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.",
12524
+ why: "deployment"
12484
12525
  },
12485
12526
  {
12486
12527
  id: "bootGraceSeconds",
@@ -12490,7 +12531,8 @@ const PARAM_EXPOSURE = Object.freeze([
12490
12531
  owner: "evolution-curator",
12491
12532
  applies: "none",
12492
12533
  docAnchor: "PARAMETERS.md#curator",
12493
- summary: "Grace period before the first automatic pass after a restart."
12534
+ summary: "Grace period before the first automatic pass after a restart.",
12535
+ why: "internal"
12494
12536
  },
12495
12537
  {
12496
12538
  id: "curatorProvider",
@@ -12500,7 +12542,8 @@ const PARAM_EXPOSURE = Object.freeze([
12500
12542
  owner: "evolution-curator",
12501
12543
  applies: "none",
12502
12544
  docAnchor: "PARAMETERS.md#curator",
12503
- summary: "LLM provider for curator reviews (deployment identity)."
12545
+ summary: "LLM provider for curator reviews (deployment identity).",
12546
+ why: "identity"
12504
12547
  },
12505
12548
  {
12506
12549
  id: "curatorModel",
@@ -12510,7 +12553,8 @@ const PARAM_EXPOSURE = Object.freeze([
12510
12553
  owner: "evolution-curator",
12511
12554
  applies: "none",
12512
12555
  docAnchor: "PARAMETERS.md#curator",
12513
- summary: "Model for curator reviews (deployment identity)."
12556
+ summary: "Model for curator reviews (deployment identity).",
12557
+ why: "identity"
12514
12558
  },
12515
12559
  {
12516
12560
  id: "protectedSkillNames",
@@ -12520,7 +12564,8 @@ const PARAM_EXPOSURE = Object.freeze([
12520
12564
  owner: "evolution-curator",
12521
12565
  applies: "none",
12522
12566
  docAnchor: "PARAMETERS.md#library",
12523
- summary: "Skills the lifecycle never archives or rewrites."
12567
+ summary: "Skills the lifecycle never archives or rewrites.",
12568
+ why: "deployment"
12524
12569
  },
12525
12570
  {
12526
12571
  id: "manageUnmanaged",
@@ -12530,7 +12575,8 @@ const PARAM_EXPOSURE = Object.freeze([
12530
12575
  owner: "evolution-curator",
12531
12576
  applies: "none",
12532
12577
  docAnchor: "PARAMETERS.md#library",
12533
- summary: "Let curation touch skills with no family metadata."
12578
+ summary: "Let curation touch skills with no family metadata.",
12579
+ why: "deployment"
12534
12580
  },
12535
12581
  {
12536
12582
  id: "pruneBuiltins",
@@ -12540,7 +12586,8 @@ const PARAM_EXPOSURE = Object.freeze([
12540
12586
  owner: "evolution-curator",
12541
12587
  applies: "none",
12542
12588
  docAnchor: "PARAMETERS.md#library",
12543
- summary: "Let curation nominate bundled skills for pruning."
12589
+ summary: "Let curation nominate bundled skills for pruning.",
12590
+ why: "deployment"
12544
12591
  },
12545
12592
  {
12546
12593
  id: "referencedSkillNames",
@@ -12550,7 +12597,8 @@ const PARAM_EXPOSURE = Object.freeze([
12550
12597
  owner: "evolution-curator",
12551
12598
  applies: "none",
12552
12599
  docAnchor: "PARAMETERS.md#library",
12553
- summary: "Names treated as referenced by external docs (never retired)."
12600
+ summary: "Names treated as referenced by external docs (never retired).",
12601
+ why: "deployment"
12554
12602
  },
12555
12603
  {
12556
12604
  id: "includeSkillNames",
@@ -12560,7 +12608,8 @@ const PARAM_EXPOSURE = Object.freeze([
12560
12608
  owner: "evolution-skill-catalog",
12561
12609
  applies: "none",
12562
12610
  docAnchor: "PARAMETERS.md#library",
12563
- summary: "Allow-list of skills the catalog exposes."
12611
+ summary: "Allow-list of skills the catalog exposes.",
12612
+ why: "deployment"
12564
12613
  },
12565
12614
  {
12566
12615
  id: "skill-catalog.excludeSkillNames",
@@ -12570,7 +12619,8 @@ const PARAM_EXPOSURE = Object.freeze([
12570
12619
  owner: "evolution-skill-catalog",
12571
12620
  applies: "none",
12572
12621
  docAnchor: "PARAMETERS.md#library",
12573
- summary: "Deny-list of skills the catalog hides (row-local name; see the collision note)."
12622
+ summary: "Deny-list of skills the catalog hides (row-local name; see the collision note).",
12623
+ why: "deployment"
12574
12624
  },
12575
12625
  {
12576
12626
  id: "modelInvocable",
@@ -12580,7 +12630,8 @@ const PARAM_EXPOSURE = Object.freeze([
12580
12630
  owner: "evolution-skill-catalog",
12581
12631
  applies: "none",
12582
12632
  docAnchor: "PARAMETERS.md#library",
12583
- summary: "Default for whether the model may invoke a catalog skill."
12633
+ summary: "Default for whether the model may invoke a catalog skill.",
12634
+ why: "deployment"
12584
12635
  },
12585
12636
  {
12586
12637
  id: "userInvocable",
@@ -12590,7 +12641,8 @@ const PARAM_EXPOSURE = Object.freeze([
12590
12641
  owner: "evolution-skill-catalog",
12591
12642
  applies: "none",
12592
12643
  docAnchor: "PARAMETERS.md#library",
12593
- summary: "Default for whether the user may invoke a catalog skill."
12644
+ summary: "Default for whether the user may invoke a catalog skill.",
12645
+ why: "deployment"
12594
12646
  },
12595
12647
  {
12596
12648
  id: "maxItems",
@@ -12600,7 +12652,8 @@ const PARAM_EXPOSURE = Object.freeze([
12600
12652
  owner: "evolution-activity",
12601
12653
  applies: "none",
12602
12654
  docAnchor: "PARAMETERS.md#library",
12603
- summary: "Entries kept in the activity sidecar window."
12655
+ summary: "Entries kept in the activity sidecar window.",
12656
+ why: "internal"
12604
12657
  },
12605
12658
  {
12606
12659
  id: "sessionScoped",
@@ -12610,7 +12663,8 @@ const PARAM_EXPOSURE = Object.freeze([
12610
12663
  owner: "evolution-review",
12611
12664
  applies: "none",
12612
12665
  docAnchor: "PARAMETERS.md#library",
12613
- summary: "Act only on sessions carrying the family model tools."
12666
+ summary: "Act only on sessions carrying the family model tools.",
12667
+ why: "deployment"
12614
12668
  },
12615
12669
  {
12616
12670
  id: "skill-usage.sessionScoped",
@@ -12620,7 +12674,8 @@ const PARAM_EXPOSURE = Object.freeze([
12620
12674
  owner: "skill-usage",
12621
12675
  applies: "none",
12622
12676
  docAnchor: "PARAMETERS.md#library",
12623
- summary: "Keep the usage sidecar scoped per session (row-local name)."
12677
+ summary: "Keep the usage sidecar scoped per session (row-local name).",
12678
+ why: "deployment"
12624
12679
  },
12625
12680
  {
12626
12681
  id: "evolution-review.root",
@@ -12630,7 +12685,8 @@ const PARAM_EXPOSURE = Object.freeze([
12630
12685
  owner: "evolution-review",
12631
12686
  applies: "none",
12632
12687
  docAnchor: "PARAMETERS.md#deployment",
12633
- summary: "Skill-tree root for review-created skills (empty = shared default)."
12688
+ summary: "Skill-tree root for review-created skills (empty = shared default).",
12689
+ why: "path"
12634
12690
  },
12635
12691
  {
12636
12692
  id: "evolution-review.skillsRoot",
@@ -12640,7 +12696,8 @@ const PARAM_EXPOSURE = Object.freeze([
12640
12696
  owner: "evolution-review",
12641
12697
  applies: "none",
12642
12698
  docAnchor: "PARAMETERS.md#deployment",
12643
- summary: "Retired alias of root; a value here fails the load (V27 G2.4)."
12699
+ summary: "Retired alias of root; a value here fails the load (V27 G2.4).",
12700
+ why: "path"
12644
12701
  },
12645
12702
  {
12646
12703
  id: "evolution-curator.root",
@@ -12650,7 +12707,8 @@ const PARAM_EXPOSURE = Object.freeze([
12650
12707
  owner: "evolution-curator",
12651
12708
  applies: "none",
12652
12709
  docAnchor: "PARAMETERS.md#deployment",
12653
- summary: "Skill-tree root for curator scope, snapshot and archive."
12710
+ summary: "Skill-tree root for curator scope, snapshot and archive.",
12711
+ why: "path"
12654
12712
  },
12655
12713
  {
12656
12714
  id: "evolution-commands.root",
@@ -12660,7 +12718,8 @@ const PARAM_EXPOSURE = Object.freeze([
12660
12718
  owner: "evolution-commands",
12661
12719
  applies: "none",
12662
12720
  docAnchor: "PARAMETERS.md#deployment",
12663
- summary: "Skill-tree root the command surface writes through."
12721
+ summary: "Skill-tree root the command surface writes through.",
12722
+ why: "path"
12664
12723
  },
12665
12724
  {
12666
12725
  id: "evolution-commands.skillsRoot",
@@ -12670,7 +12729,8 @@ const PARAM_EXPOSURE = Object.freeze([
12670
12729
  owner: "evolution-commands",
12671
12730
  applies: "none",
12672
12731
  docAnchor: "PARAMETERS.md#deployment",
12673
- summary: "Retired alias of the commands root; a value here fails the load."
12732
+ summary: "Retired alias of the commands root; a value here fails the load.",
12733
+ why: "path"
12674
12734
  },
12675
12735
  {
12676
12736
  id: "evolution-maintenance.root",
@@ -12680,7 +12740,8 @@ const PARAM_EXPOSURE = Object.freeze([
12680
12740
  owner: "evolution-maintenance",
12681
12741
  applies: "none",
12682
12742
  docAnchor: "PARAMETERS.md#deployment",
12683
- summary: "Skill-tree root the maintenance probe scans."
12743
+ summary: "Skill-tree root the maintenance probe scans.",
12744
+ why: "path"
12684
12745
  },
12685
12746
  {
12686
12747
  id: "evolution-maintenance.skillsRoot",
@@ -12690,7 +12751,8 @@ const PARAM_EXPOSURE = Object.freeze([
12690
12751
  owner: "evolution-maintenance",
12691
12752
  applies: "none",
12692
12753
  docAnchor: "PARAMETERS.md#deployment",
12693
- summary: "Accepted skill-root spelling for the maintenance row."
12754
+ summary: "Accepted skill-root spelling for the maintenance row.",
12755
+ why: "path"
12694
12756
  },
12695
12757
  {
12696
12758
  id: "evolution-skill-catalog.root",
@@ -12700,7 +12762,8 @@ const PARAM_EXPOSURE = Object.freeze([
12700
12762
  owner: "evolution-skill-catalog",
12701
12763
  applies: "none",
12702
12764
  docAnchor: "PARAMETERS.md#deployment",
12703
- summary: "Skill-tree root the catalog lists."
12765
+ summary: "Skill-tree root the catalog lists.",
12766
+ why: "path"
12704
12767
  },
12705
12768
  {
12706
12769
  id: "evolution-learning-graph.root",
@@ -12710,7 +12773,8 @@ const PARAM_EXPOSURE = Object.freeze([
12710
12773
  owner: "evolution-learning-graph",
12711
12774
  applies: "none",
12712
12775
  docAnchor: "PARAMETERS.md#deployment",
12713
- summary: "Skill-tree root the learning graph reads."
12776
+ summary: "Skill-tree root the learning graph reads.",
12777
+ why: "path"
12714
12778
  },
12715
12779
  {
12716
12780
  id: "skill-usage.root",
@@ -12720,7 +12784,8 @@ const PARAM_EXPOSURE = Object.freeze([
12720
12784
  owner: "skill-usage",
12721
12785
  applies: "none",
12722
12786
  docAnchor: "PARAMETERS.md#deployment",
12723
- summary: "Skill-tree root the usage store observes."
12787
+ summary: "Skill-tree root the usage store observes.",
12788
+ why: "path"
12724
12789
  },
12725
12790
  {
12726
12791
  id: "skill-usage.eventsHome",
@@ -12730,7 +12795,8 @@ const PARAM_EXPOSURE = Object.freeze([
12730
12795
  owner: "skill-usage",
12731
12796
  applies: "none",
12732
12797
  docAnchor: "PARAMETERS.md#deployment",
12733
- summary: "Directory holding the family event log the usage store reads."
12798
+ summary: "Directory holding the family event log the usage store reads.",
12799
+ why: "path"
12734
12800
  },
12735
12801
  {
12736
12802
  id: "evolution-state-json.root",
@@ -12740,7 +12806,8 @@ const PARAM_EXPOSURE = Object.freeze([
12740
12806
  owner: "evolution-state-json",
12741
12807
  applies: "none",
12742
12808
  docAnchor: "PARAMETERS.md#deployment",
12743
- summary: "Directory holding the JSON state store."
12809
+ summary: "Directory holding the JSON state store.",
12810
+ why: "path"
12744
12811
  },
12745
12812
  {
12746
12813
  id: "memory-files.root",
@@ -12750,7 +12817,8 @@ const PARAM_EXPOSURE = Object.freeze([
12750
12817
  owner: "memory-files",
12751
12818
  applies: "none",
12752
12819
  docAnchor: "PARAMETERS.md#deployment",
12753
- summary: "Directory holding MEMORY.md and USER.md (empty = $DSH_HOME/memories)."
12820
+ summary: "Directory holding MEMORY.md and USER.md (empty = $DSH_HOME/memories).",
12821
+ why: "path"
12754
12822
  },
12755
12823
  {
12756
12824
  id: "evolution-feedback.path",
@@ -12760,7 +12828,8 @@ const PARAM_EXPOSURE = Object.freeze([
12760
12828
  owner: "evolution-feedback",
12761
12829
  applies: "none",
12762
12830
  docAnchor: "PARAMETERS.md#deployment",
12763
- summary: "Event log the feedback scorer reads (empty = family events file)."
12831
+ summary: "Event log the feedback scorer reads (empty = family events file).",
12832
+ why: "path"
12764
12833
  },
12765
12834
  {
12766
12835
  id: "evolution-state.provider",
@@ -12770,7 +12839,8 @@ const PARAM_EXPOSURE = Object.freeze([
12770
12839
  owner: "evolution-state",
12771
12840
  applies: "none",
12772
12841
  docAnchor: "PARAMETERS.md#deployment",
12773
- summary: "Registered state-store provider name."
12842
+ summary: "Registered state-store provider name.",
12843
+ why: "identity"
12774
12844
  },
12775
12845
  {
12776
12846
  id: "memory.provider",
@@ -12780,7 +12850,8 @@ const PARAM_EXPOSURE = Object.freeze([
12780
12850
  owner: "memory",
12781
12851
  applies: "none",
12782
12852
  docAnchor: "PARAMETERS.md#deployment",
12783
- summary: "Registered memory provider name."
12853
+ summary: "Registered memory provider name.",
12854
+ why: "identity"
12784
12855
  },
12785
12856
  {
12786
12857
  id: "memory-files.providerName",
@@ -12790,7 +12861,8 @@ const PARAM_EXPOSURE = Object.freeze([
12790
12861
  owner: "memory-files",
12791
12862
  applies: "none",
12792
12863
  docAnchor: "PARAMETERS.md#deployment",
12793
- summary: "Name this package registers as the memory provider."
12864
+ summary: "Name this package registers as the memory provider.",
12865
+ why: "identity"
12794
12866
  },
12795
12867
  {
12796
12868
  id: "memoryReviewModel",
@@ -12800,7 +12872,8 @@ const PARAM_EXPOSURE = Object.freeze([
12800
12872
  owner: "evolution-review",
12801
12873
  applies: "none",
12802
12874
  docAnchor: "PARAMETERS.md#deployment",
12803
- summary: "Model for the memory review channel (deployment identity)."
12875
+ summary: "Model for the memory review channel (deployment identity).",
12876
+ why: "identity"
12804
12877
  },
12805
12878
  {
12806
12879
  id: "skillReviewModel",
@@ -12810,7 +12883,8 @@ const PARAM_EXPOSURE = Object.freeze([
12810
12883
  owner: "evolution-review",
12811
12884
  applies: "none",
12812
12885
  docAnchor: "PARAMETERS.md#deployment",
12813
- summary: "Model for the skill review channel (deployment identity)."
12886
+ summary: "Model for the skill review channel (deployment identity).",
12887
+ why: "identity"
12814
12888
  },
12815
12889
  {
12816
12890
  id: "maxOpsPerPlan",
@@ -12820,7 +12894,8 @@ const PARAM_EXPOSURE = Object.freeze([
12820
12894
  owner: "evolution-plan-validator",
12821
12895
  applies: "none",
12822
12896
  docAnchor: "PARAMETERS.md#deployment",
12823
- summary: "Operation cap one staged plan may carry."
12897
+ summary: "Operation cap one staged plan may carry.",
12898
+ why: "internal"
12824
12899
  },
12825
12900
  {
12826
12901
  id: "substantiveMinToolCalls",
@@ -12830,7 +12905,8 @@ const PARAM_EXPOSURE = Object.freeze([
12830
12905
  owner: "evolution-review",
12831
12906
  applies: "none",
12832
12907
  docAnchor: "PARAMETERS.md#deployment",
12833
- summary: "Tool calls that make a turn count as substantive."
12908
+ summary: "Tool calls that make a turn count as substantive.",
12909
+ why: "internal"
12834
12910
  },
12835
12911
  {
12836
12912
  id: "substantiveMinUserChars",
@@ -12840,7 +12916,8 @@ const PARAM_EXPOSURE = Object.freeze([
12840
12916
  owner: "evolution-review",
12841
12917
  applies: "none",
12842
12918
  docAnchor: "PARAMETERS.md#deployment",
12843
- summary: "User characters that make a turn count as substantive."
12919
+ summary: "User characters that make a turn count as substantive.",
12920
+ why: "internal"
12844
12921
  },
12845
12922
  {
12846
12923
  id: "substantiveMinAgentChars",
@@ -12850,7 +12927,8 @@ const PARAM_EXPOSURE = Object.freeze([
12850
12927
  owner: "evolution-review",
12851
12928
  applies: "none",
12852
12929
  docAnchor: "PARAMETERS.md#deployment",
12853
- summary: "Assistant characters that make a turn count as substantive."
12930
+ summary: "Assistant characters that make a turn count as substantive.",
12931
+ why: "internal"
12854
12932
  },
12855
12933
  {
12856
12934
  id: "threatExemptLabels",
@@ -12860,7 +12938,8 @@ const PARAM_EXPOSURE = Object.freeze([
12860
12938
  owner: "evolution-threat",
12861
12939
  applies: "none",
12862
12940
  docAnchor: "PARAMETERS.md#deployment",
12863
- summary: "Threat labels the deployment declares benign (safety surface, never user-writable)."
12941
+ summary: "Threat labels the deployment declares benign (safety surface, never user-writable).",
12942
+ why: "security"
12864
12943
  },
12865
12944
  {
12866
12945
  id: "evolution-threat.enabled",
@@ -12870,7 +12949,8 @@ const PARAM_EXPOSURE = Object.freeze([
12870
12949
  owner: "evolution-threat",
12871
12950
  applies: "none",
12872
12951
  docAnchor: "PARAMETERS.md#deployment",
12873
- summary: "Mount the write-time threat guard at all."
12952
+ summary: "Mount the write-time threat guard at all.",
12953
+ why: "security"
12874
12954
  },
12875
12955
  {
12876
12956
  id: "evolution-threat.maxScanChars",
@@ -12880,7 +12960,8 @@ const PARAM_EXPOSURE = Object.freeze([
12880
12960
  owner: "evolution-threat",
12881
12961
  applies: "none",
12882
12962
  docAnchor: "PARAMETERS.md#deployment",
12883
- summary: "Scan window size of the threat guard."
12963
+ summary: "Scan window size of the threat guard.",
12964
+ why: "security"
12884
12965
  },
12885
12966
  {
12886
12967
  id: "evolution-approval.enabled",
@@ -12890,7 +12971,8 @@ const PARAM_EXPOSURE = Object.freeze([
12890
12971
  owner: "evolution-approval",
12891
12972
  applies: "none",
12892
12973
  docAnchor: "PARAMETERS.md#deployment",
12893
- summary: "Require approval before a staged write executes."
12974
+ summary: "Require approval before a staged write executes.",
12975
+ why: "security"
12894
12976
  },
12895
12977
  {
12896
12978
  id: "evolution-approval.stageForeground",
@@ -12900,7 +12982,8 @@ const PARAM_EXPOSURE = Object.freeze([
12900
12982
  owner: "evolution-approval",
12901
12983
  applies: "none",
12902
12984
  docAnchor: "PARAMETERS.md#deployment",
12903
- summary: "Stage foreground agent writes for approval too."
12985
+ summary: "Stage foreground agent writes for approval too.",
12986
+ why: "security"
12904
12987
  },
12905
12988
  {
12906
12989
  id: "evolution-approval.pendingTtlMs",
@@ -12915,7 +12998,8 @@ const PARAM_EXPOSURE = Object.freeze([
12915
12998
  hint: "一条待批写入最多等多久:超时就按「拒绝」关掉(不会执行,写效果不会落地);0 = 永不过期(默认)。",
12916
12999
  control: "number",
12917
13000
  unit: "毫秒",
12918
- values: ""
13001
+ values: "",
13002
+ card: "evolution-approval"
12919
13003
  },
12920
13004
  {
12921
13005
  id: "qualityWarnThreshold",
@@ -12925,7 +13009,8 @@ const PARAM_EXPOSURE = Object.freeze([
12925
13009
  owner: "evolution-feedback",
12926
13010
  applies: "none",
12927
13011
  docAnchor: "PARAMETERS.md#deployment",
12928
- summary: "Feedback score below which a skill carries a warning."
13012
+ summary: "Feedback score below which a skill carries a warning.",
13013
+ why: "internal"
12929
13014
  },
12930
13015
  {
12931
13016
  id: "replay.maxPlans",
@@ -12935,7 +13020,8 @@ const PARAM_EXPOSURE = Object.freeze([
12935
13020
  owner: "evolution-replay",
12936
13021
  applies: "none",
12937
13022
  docAnchor: "PARAMETERS.md#deployment",
12938
- summary: "Plans compared in one replay report."
13023
+ summary: "Plans compared in one replay report.",
13024
+ why: "internal"
12939
13025
  },
12940
13026
  {
12941
13027
  id: "replay.weights",
@@ -12945,7 +13031,8 @@ const PARAM_EXPOSURE = Object.freeze([
12945
13031
  owner: "evolution-replay",
12946
13032
  applies: "none",
12947
13033
  docAnchor: "PARAMETERS.md#deployment",
12948
- summary: "Scoring weights of the replay comparison."
13034
+ summary: "Scoring weights of the replay comparison.",
13035
+ why: "internal"
12949
13036
  },
12950
13037
  {
12951
13038
  id: "evolution-commands.maintainCooldownMs",
@@ -12955,17 +13042,24 @@ const PARAM_EXPOSURE = Object.freeze([
12955
13042
  owner: "evolution-commands",
12956
13043
  applies: "none",
12957
13044
  docAnchor: "PARAMETERS.md#deployment",
12958
- summary: "Cooldown between maintenance runs from the command surface."
13045
+ summary: "Cooldown between maintenance runs from the command surface.",
13046
+ why: "internal"
12959
13047
  },
12960
13048
  {
12961
13049
  id: "evolution-commands.maintainHandoffOnSettle",
12962
13050
  group: "deployment",
12963
- tier: "E2",
13051
+ tier: "E3",
12964
13052
  authority: "cordis",
12965
13053
  owner: "evolution-commands",
12966
- applies: "none",
13054
+ applies: "live",
12967
13055
  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."
13056
+ 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.",
13057
+ label: "扫描完成后自动交接",
13058
+ hint: "维护扫描成功结束后,自动把报告交给模型(等同 maintain handoff);默认关闭,每次成功扫描会多花一次模型调用。",
13059
+ control: "switch",
13060
+ unit: "",
13061
+ values: "",
13062
+ card: "evolution-commands"
12969
13063
  },
12970
13064
  {
12971
13065
  id: "evolution-commands.maintainTimeoutMs",
@@ -12975,7 +13069,8 @@ const PARAM_EXPOSURE = Object.freeze([
12975
13069
  owner: "evolution-commands",
12976
13070
  applies: "none",
12977
13071
  docAnchor: "PARAMETERS.md#deployment",
12978
- summary: "Timeout of one maintenance run started from the command surface."
13072
+ summary: "Timeout of one maintenance run started from the command surface.",
13073
+ why: "internal"
12979
13074
  },
12980
13075
  {
12981
13076
  id: "evolution-maintenance.probeTimeoutMs",
@@ -12985,7 +13080,8 @@ const PARAM_EXPOSURE = Object.freeze([
12985
13080
  owner: "evolution-maintenance",
12986
13081
  applies: "none",
12987
13082
  docAnchor: "PARAMETERS.md#deployment",
12988
- summary: "Model-facing budget of one maintenance_probe call — a hang guard, not a latency budget."
13083
+ summary: "Model-facing budget of one maintenance_probe call — a hang guard, not a latency budget.",
13084
+ why: "internal"
12989
13085
  },
12990
13086
  {
12991
13087
  id: "skill-usage.supportReadToolNames",
@@ -12995,7 +13091,8 @@ const PARAM_EXPOSURE = Object.freeze([
12995
13091
  owner: "skill-usage",
12996
13092
  applies: "none",
12997
13093
  docAnchor: "PARAMETERS.md#deployment",
12998
- summary: "Tool names whose file reads are attributed to support files."
13094
+ summary: "Tool names whose file reads are attributed to support files.",
13095
+ why: "internal"
12999
13096
  },
13000
13097
  {
13001
13098
  id: "install.mode",
@@ -13005,7 +13102,8 @@ const PARAM_EXPOSURE = Object.freeze([
13005
13102
  owner: "scripts",
13006
13103
  applies: "restart",
13007
13104
  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)."
13105
+ summary: "Install target plane (values host / agent / layered / oneclick; the `layered` form uses the generated preset, the others mount the bundle at profile root).",
13106
+ why: "install"
13009
13107
  },
13010
13108
  {
13011
13109
  id: "install.basePreset",
@@ -13015,7 +13113,8 @@ const PARAM_EXPOSURE = Object.freeze([
13015
13113
  owner: "scripts",
13016
13114
  applies: "restart",
13017
13115
  docAnchor: "PARAMETERS.md#deployment",
13018
- summary: "Agent-preset base the layered install composes from (--base)."
13116
+ summary: "Agent-preset base the layered install composes from (--base).",
13117
+ why: "install"
13019
13118
  },
13020
13119
  {
13021
13120
  id: "install.home",
@@ -13025,7 +13124,8 @@ const PARAM_EXPOSURE = Object.freeze([
13025
13124
  owner: "scripts",
13026
13125
  applies: "restart",
13027
13126
  docAnchor: "PARAMETERS.md#deployment",
13028
- summary: "Harness home the installer writes into (--home)."
13127
+ summary: "Harness home the installer writes into (--home).",
13128
+ why: "install"
13029
13129
  },
13030
13130
  {
13031
13131
  id: "install.presetRowOverrides",
@@ -13035,7 +13135,8 @@ const PARAM_EXPOSURE = Object.freeze([
13035
13135
  owner: "scripts",
13036
13136
  applies: "restart",
13037
13137
  docAnchor: "PARAMETERS.md#deployment",
13038
- summary: "Preset row overrides the installer injects (row-overrides.json)."
13138
+ summary: "Preset row overrides the installer injects (row-overrides.json).",
13139
+ why: "install"
13039
13140
  }
13040
13141
  ]);
13041
13142
  /** The settings namespace each OWNER PACKAGE registers (design §7.2).
@@ -13050,7 +13151,9 @@ const PARAM_NAMESPACES = Object.freeze({
13050
13151
  "memory-files": "evolution-memory",
13051
13152
  "tool-memory": "evolution-tool-memory",
13052
13153
  "evolution-curator": "evolution-curator",
13053
- "tool-skill-manage": "evolution-skills"
13154
+ "tool-skill-manage": "evolution-skills",
13155
+ "evolution-approval": "evolution-approval",
13156
+ "evolution-commands": "evolution-commands"
13054
13157
  });
13055
13158
  /**
13056
13159
  * The rows whose settings namespace CHANGED with the platform-line move (G3): the
@@ -42,7 +42,12 @@ export declare function canonicalWriteId(id: string): string;
42
42
  * @returns the canonical value when present, else the alias value, else undefined.
43
43
  */
44
44
  export declare function readParam(carrier: object | undefined, id: string): unknown;
45
- /** Exposure group (design §7.2): the unit a developer changes together. */
45
+ /** Exposure group (design §7.2): the unit a developer changes together.
46
+ *
47
+ * A DOC-SECTION axis, not the exposure decision: the group says which family of knobs a value
48
+ * belongs to, the tier says who may change it. `internal` here is a group id with no rows today;
49
+ * the `why: 'internal'` a non-E3 row carries is a different value on the other axis (the reason it
50
+ * has no settings card) — the shared spelling is a coincidence, not a routing rule. */
46
51
  export type ParamGroup = 'library' | 'write-caps' | 'review' | 'memory' | 'curator' | 'deployment' | 'internal';
47
52
  /**
48
53
  * Chinese display name per group, one entry per line (the scripts read this block
@@ -80,6 +85,12 @@ export type ParamAuthority = 'code' | 'cordis' | 'install';
80
85
  * those values for display, one label per value, in the same order. The stored
81
86
  * value is never translated: only what the control shows.
82
87
  */
88
+ /** Why a parameter has NO settings card (the `why` half of the exposure key, 0.21.0 / G2).
89
+ * `internal` = timeouts, retries, cooldowns, weights, caps and windows; `deployment` = mount
90
+ * switches and library-scope policy; `security` = safety surfaces (never user-writable);
91
+ * `identity` = providers/models/registered names; `path` = per-row directories; `install` = what
92
+ * the installer freezes. Exactly one of `card`/`why` rides every row, and the tier decides which. */
93
+ export type ParamWhy = 'deployment' | 'security' | 'identity' | 'path' | 'install' | 'internal';
83
94
  export interface ParamExposure {
84
95
  id: string;
85
96
  group: ParamGroup;
@@ -95,6 +106,12 @@ export interface ParamExposure {
95
106
  hint?: string;
96
107
  /** Which control the card renders for this field. Required on E3 rows. */
97
108
  control?: 'number' | 'switch' | 'select' | 'text';
109
+ /** The settings card this row appears on — its OWN row id (the platform keys a card by the Loader
110
+ * entry id, and a card may only render its own row's Config). Required on E3 rows. */
111
+ card?: string;
112
+ /** The registered reason this row has NO card. Required on every non-E3 row; mutually exclusive
113
+ * with `card`. This is what makes "an E3 row that no card renders" unspellable. */
114
+ why?: ParamWhy;
98
115
  /** Unit suffix shown next to a number (empty when it carries none). */
99
116
  unit?: string;
100
117
  /** Pipe-joined allowed values; non-empty exactly when control is 'select'. */
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@lmzhen/dsh-evolution-core",
3
3
  "description": "Shared stores, prompts, signals and lifecycle logic for the dsh-evolution plugin family (community build)",
4
- "version": "0.20.0",
4
+ "version": "0.21.0",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },