@lmzhen/dsh-evolution-core 0.6.0 → 0.7.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
@@ -8923,7 +8923,12 @@ const PARAM_EXPOSURE = Object.freeze([
8923
8923
  owner: "evolution-review",
8924
8924
  applies: "live",
8925
8925
  docAnchor: "PARAMETERS.md#review",
8926
- summary: "Activity units between skill-review injections."
8926
+ summary: "Activity units between skill-review injections.",
8927
+ label: "技能审查间隔",
8928
+ hint: "每多少活动单位触发一次技能审查注入。",
8929
+ control: "number",
8930
+ unit: "次",
8931
+ values: ""
8927
8932
  },
8928
8933
  {
8929
8934
  id: "reviewMemoryInterval",
@@ -8933,7 +8938,12 @@ const PARAM_EXPOSURE = Object.freeze([
8933
8938
  owner: "evolution-review",
8934
8939
  applies: "live",
8935
8940
  docAnchor: "PARAMETERS.md#review",
8936
- summary: "Activity units between memory-review injections."
8941
+ summary: "Activity units between memory-review injections.",
8942
+ label: "记忆审查间隔",
8943
+ hint: "每多少活动单位触发一次记忆审查注入。",
8944
+ control: "number",
8945
+ unit: "次",
8946
+ values: ""
8937
8947
  },
8938
8948
  {
8939
8949
  id: "skillReviewTrigger",
@@ -8943,7 +8953,12 @@ const PARAM_EXPOSURE = Object.freeze([
8943
8953
  owner: "evolution-review",
8944
8954
  applies: "live",
8945
8955
  docAnchor: "PARAMETERS.md#review",
8946
- summary: "Which channel may inject a skill review (cadence, completion, both)."
8956
+ summary: "Which channel may inject a skill review (cadence, completion, both).",
8957
+ label: "审查触发通道",
8958
+ hint: "哪个通道可以注入技能审查:cadence=按间隔、completion=按完成、both=两者。",
8959
+ control: "select",
8960
+ unit: "",
8961
+ values: "cadence|completion|both"
8947
8962
  },
8948
8963
  {
8949
8964
  id: "skillReviewCompletionMinToolCalls",
@@ -8953,7 +8968,12 @@ const PARAM_EXPOSURE = Object.freeze([
8953
8968
  owner: "evolution-review",
8954
8969
  applies: "live",
8955
8970
  docAnchor: "PARAMETERS.md#review",
8956
- summary: "Tool calls a task needs before the completion channel injects."
8971
+ summary: "Tool calls a task needs before the completion channel injects.",
8972
+ label: "完成通道最少工具调用",
8973
+ hint: "走完成通道时,任务至少经过多少次工具调用才注入。",
8974
+ control: "number",
8975
+ unit: "次",
8976
+ values: ""
8957
8977
  },
8958
8978
  {
8959
8979
  id: "reviewEnabled",
@@ -8963,7 +8983,12 @@ const PARAM_EXPOSURE = Object.freeze([
8963
8983
  owner: "evolution-review",
8964
8984
  applies: "live",
8965
8985
  docAnchor: "PARAMETERS.md#review",
8966
- summary: "Master switch for the review plugin."
8986
+ summary: "Master switch for the review plugin.",
8987
+ label: "启用审查插件",
8988
+ hint: "审查插件的总开关。",
8989
+ control: "switch",
8990
+ unit: "",
8991
+ values: ""
8967
8992
  },
8968
8993
  {
8969
8994
  id: "reviewMode",
@@ -8973,7 +8998,12 @@ const PARAM_EXPOSURE = Object.freeze([
8973
8998
  owner: "evolution-review",
8974
8999
  applies: "live",
8975
9000
  docAnchor: "PARAMETERS.md#review",
8976
- summary: "Run the review in the parent session (inject) or on a subagent."
9001
+ summary: "Run the review in the parent session (inject) or on a subagent.",
9002
+ label: "审查运行方式",
9003
+ hint: "inject=在父会话内注入,subagent=交给子代理运行。",
9004
+ control: "select",
9005
+ unit: "",
9006
+ values: "subagent|inject"
8977
9007
  },
8978
9008
  {
8979
9009
  id: "reviewWakeInject",
@@ -8983,7 +9013,12 @@ const PARAM_EXPOSURE = Object.freeze([
8983
9013
  owner: "evolution-review",
8984
9014
  applies: "live",
8985
9015
  docAnchor: "PARAMETERS.md#review",
8986
- summary: "Deliver the deferred review as a waking follow-up message."
9016
+ summary: "Deliver the deferred review as a waking follow-up message.",
9017
+ label: "审查后续唤醒注入",
9018
+ hint: "把延后的审查作为唤醒消息投递。",
9019
+ control: "switch",
9020
+ unit: "",
9021
+ values: ""
8987
9022
  },
8988
9023
  {
8989
9024
  id: "reviewProvider",
@@ -9053,7 +9088,12 @@ const PARAM_EXPOSURE = Object.freeze([
9053
9088
  owner: "tool-skill-manage",
9054
9089
  applies: "live",
9055
9090
  docAnchor: "PARAMETERS.md#write-caps",
9056
- summary: "Character cap on a SKILL.md body (tighten-only)."
9091
+ summary: "Character cap on a SKILL.md body (tighten-only).",
9092
+ label: "SKILL.md 正文字符上限",
9093
+ hint: "SKILL.md 正文的字符上限(只许收紧)。",
9094
+ control: "number",
9095
+ unit: "字符",
9096
+ values: ""
9057
9097
  },
9058
9098
  {
9059
9099
  id: "maxSkillFileBytes",
@@ -9063,7 +9103,12 @@ const PARAM_EXPOSURE = Object.freeze([
9063
9103
  owner: "tool-skill-manage",
9064
9104
  applies: "live",
9065
9105
  docAnchor: "PARAMETERS.md#write-caps",
9066
- summary: "Byte cap on one support file (tighten-only)."
9106
+ summary: "Byte cap on one support file (tighten-only).",
9107
+ label: "支持文件字节上限",
9108
+ hint: "单个支持文件的字节上限(只许收紧)。",
9109
+ control: "number",
9110
+ unit: "字节",
9111
+ values: ""
9067
9112
  },
9068
9113
  {
9069
9114
  id: "maxSkillNameLength",
@@ -9073,7 +9118,12 @@ const PARAM_EXPOSURE = Object.freeze([
9073
9118
  owner: "tool-skill-manage",
9074
9119
  applies: "live",
9075
9120
  docAnchor: "PARAMETERS.md#write-caps",
9076
- summary: "Character cap on a skill name (tighten-only)."
9121
+ summary: "Character cap on a skill name (tighten-only).",
9122
+ label: "技能名字符上限",
9123
+ hint: "技能名的字符上限(只许收紧)。",
9124
+ control: "number",
9125
+ unit: "字符",
9126
+ values: ""
9077
9127
  },
9078
9128
  {
9079
9129
  id: "maxDescriptionLength",
@@ -9083,7 +9133,12 @@ const PARAM_EXPOSURE = Object.freeze([
9083
9133
  owner: "tool-skill-manage",
9084
9134
  applies: "live",
9085
9135
  docAnchor: "PARAMETERS.md#write-caps",
9086
- summary: "Character cap on a skill description (tighten-only)."
9136
+ summary: "Character cap on a skill description (tighten-only).",
9137
+ label: "技能描述字符上限",
9138
+ hint: "技能描述的字符上限(只许收紧)。",
9139
+ control: "number",
9140
+ unit: "字符",
9141
+ values: ""
9087
9142
  },
9088
9143
  {
9089
9144
  id: "descriptionStrict",
@@ -9093,7 +9148,12 @@ const PARAM_EXPOSURE = Object.freeze([
9093
9148
  owner: "tool-skill-manage",
9094
9149
  applies: "live",
9095
9150
  docAnchor: "PARAMETERS.md#write-caps",
9096
- summary: "Refuse a description over the authoring bar instead of advising."
9151
+ summary: "Refuse a description over the authoring bar instead of advising.",
9152
+ label: "描述严格档",
9153
+ hint: "描述超过写作门槛时拒绝写入,而不是只提示。",
9154
+ control: "switch",
9155
+ unit: "",
9156
+ values: ""
9097
9157
  },
9098
9158
  {
9099
9159
  id: "strictCrossSource",
@@ -9103,7 +9163,12 @@ const PARAM_EXPOSURE = Object.freeze([
9103
9163
  owner: "tool-skill-manage",
9104
9164
  applies: "live",
9105
9165
  docAnchor: "PARAMETERS.md#write-caps",
9106
- summary: "Refuse writes whose catalog entry resolves outside the family."
9166
+ summary: "Refuse writes whose catalog entry resolves outside the family.",
9167
+ label: "跨源严格档",
9168
+ hint: "目录项解析到家族之外时拒绝写入。",
9169
+ control: "switch",
9170
+ unit: "",
9171
+ values: ""
9107
9172
  },
9108
9173
  {
9109
9174
  id: "citationPolicy",
@@ -9113,7 +9178,12 @@ const PARAM_EXPOSURE = Object.freeze([
9113
9178
  owner: "tool-skill-manage",
9114
9179
  applies: "live",
9115
9180
  docAnchor: "PARAMETERS.md#write-caps",
9116
- summary: "Refuse a move that would leave a dangling reference, or verify it."
9181
+ summary: "Refuse a move that would leave a dangling reference, or verify it.",
9182
+ label: "引用校验档",
9183
+ hint: "移动或合并时对引用的处置:verify=校验、refuse=直接拒绝。",
9184
+ control: "select",
9185
+ unit: "",
9186
+ values: "verify|refuse"
9117
9187
  },
9118
9188
  {
9119
9189
  id: "referenceRewrite",
@@ -9143,7 +9213,12 @@ const PARAM_EXPOSURE = Object.freeze([
9143
9213
  owner: "tool-skill-manage",
9144
9214
  applies: "live",
9145
9215
  docAnchor: "PARAMETERS.md#write-caps",
9146
- summary: "Warn about an oversize support file, or refuse the write."
9216
+ summary: "Warn about an oversize support file, or refuse the write.",
9217
+ label: "支持文件超限档",
9218
+ hint: "支持文件超出字符上限时:report=只报告、enforce=拒写。",
9219
+ control: "select",
9220
+ unit: "",
9221
+ values: "report|enforce"
9147
9222
  },
9148
9223
  {
9149
9224
  id: "memoryChars",
@@ -9153,7 +9228,12 @@ const PARAM_EXPOSURE = Object.freeze([
9153
9228
  owner: "memory-files",
9154
9229
  applies: "live",
9155
9230
  docAnchor: "PARAMETERS.md#memory",
9156
- summary: "Character budget the memory store enforces for MEMORY.md."
9231
+ summary: "Character budget the memory store enforces for MEMORY.md.",
9232
+ label: "MEMORY.md 字符预算",
9233
+ hint: "memory 存储对 MEMORY.md 的字符上限。",
9234
+ control: "number",
9235
+ unit: "字符",
9236
+ values: ""
9157
9237
  },
9158
9238
  {
9159
9239
  id: "userChars",
@@ -9163,7 +9243,12 @@ const PARAM_EXPOSURE = Object.freeze([
9163
9243
  owner: "memory-files",
9164
9244
  applies: "live",
9165
9245
  docAnchor: "PARAMETERS.md#memory",
9166
- summary: "Character budget the memory store enforces for USER.md."
9246
+ summary: "Character budget the memory store enforces for USER.md.",
9247
+ label: "USER.md 字符预算",
9248
+ hint: "memory 存储对 USER.md 的字符上限。",
9249
+ control: "number",
9250
+ unit: "字符",
9251
+ values: ""
9167
9252
  },
9168
9253
  {
9169
9254
  id: "memoryEnabled",
@@ -9183,7 +9268,12 @@ const PARAM_EXPOSURE = Object.freeze([
9183
9268
  owner: "tool-memory",
9184
9269
  applies: "live",
9185
9270
  docAnchor: "PARAMETERS.md#memory",
9186
- summary: "Characters of one memory entry shown in a tool result preview."
9271
+ summary: "Characters of one memory entry shown in a tool result preview.",
9272
+ label: "条目预览字符数",
9273
+ hint: "单条记忆预览保留多少字符。",
9274
+ control: "number",
9275
+ unit: "字符",
9276
+ values: ""
9187
9277
  },
9188
9278
  {
9189
9279
  id: "addDatePrefix",
@@ -9193,7 +9283,12 @@ const PARAM_EXPOSURE = Object.freeze([
9193
9283
  owner: "memory-files",
9194
9284
  applies: "live",
9195
9285
  docAnchor: "PARAMETERS.md#memory",
9196
- summary: "Prefix stored memory entries with their date heading."
9286
+ summary: "Prefix stored memory entries with their date heading.",
9287
+ label: "记忆条目加日期前缀",
9288
+ hint: "写入记忆时为条目加上日期标题。",
9289
+ control: "switch",
9290
+ unit: "",
9291
+ values: ""
9197
9292
  },
9198
9293
  {
9199
9294
  id: "maxConsolidationFailures",
@@ -9203,7 +9298,12 @@ const PARAM_EXPOSURE = Object.freeze([
9203
9298
  owner: "memory-files",
9204
9299
  applies: "live",
9205
9300
  docAnchor: "PARAMETERS.md#memory",
9206
- summary: "Consolidation failures one turn tolerates before the tool gives up."
9301
+ summary: "Consolidation failures one turn tolerates before the tool gives up.",
9302
+ label: "合并失败容忍次数",
9303
+ hint: "一轮内合并失败多少次后工具放弃。",
9304
+ control: "number",
9305
+ unit: "次",
9306
+ values: ""
9207
9307
  },
9208
9308
  {
9209
9309
  id: "curatorIntervalHours",
@@ -9213,7 +9313,12 @@ const PARAM_EXPOSURE = Object.freeze([
9213
9313
  owner: "evolution-curator",
9214
9314
  applies: "live",
9215
9315
  docAnchor: "PARAMETERS.md#curator",
9216
- summary: "Minimum hours between deterministic curation passes."
9316
+ summary: "Minimum hours between deterministic curation passes.",
9317
+ label: "策展间隔",
9318
+ hint: "两次确定性策展之间至少间隔多少小时。",
9319
+ control: "number",
9320
+ unit: "小时",
9321
+ values: ""
9217
9322
  },
9218
9323
  {
9219
9324
  id: "staleAfterDays",
@@ -9223,7 +9328,12 @@ const PARAM_EXPOSURE = Object.freeze([
9223
9328
  owner: "evolution-curator",
9224
9329
  applies: "live",
9225
9330
  docAnchor: "PARAMETERS.md#curator",
9226
- summary: "Inactive days before a skill counts as stale."
9331
+ summary: "Inactive days before a skill counts as stale.",
9332
+ label: "判为陈旧的天数",
9333
+ hint: "技能多少天没被使用即算陈旧。",
9334
+ control: "number",
9335
+ unit: "天",
9336
+ values: ""
9227
9337
  },
9228
9338
  {
9229
9339
  id: "archiveAfterDays",
@@ -9233,7 +9343,12 @@ const PARAM_EXPOSURE = Object.freeze([
9233
9343
  owner: "evolution-curator",
9234
9344
  applies: "live",
9235
9345
  docAnchor: "PARAMETERS.md#curator",
9236
- summary: "Inactive days before a stale skill is archived (must be >= staleAfterDays)."
9346
+ summary: "Inactive days before a stale skill is archived (must be >= staleAfterDays).",
9347
+ label: "归档天数",
9348
+ hint: "陈旧技能再过多少天归档(须 ≥ 判为陈旧的天数)。",
9349
+ control: "number",
9350
+ unit: "天",
9351
+ values: ""
9237
9352
  },
9238
9353
  {
9239
9354
  id: "qualityWarnStaleAfterDays",
@@ -9243,7 +9358,12 @@ const PARAM_EXPOSURE = Object.freeze([
9243
9358
  owner: "evolution-curator",
9244
9359
  applies: "live",
9245
9360
  docAnchor: "PARAMETERS.md#curator",
9246
- summary: "Age at which a low quality score starts warning."
9361
+ summary: "Age at which a low quality score starts warning.",
9362
+ label: "低质量告警天数",
9363
+ hint: "质量分偏低时从多少天开始告警。",
9364
+ control: "number",
9365
+ unit: "天",
9366
+ values: ""
9247
9367
  },
9248
9368
  {
9249
9369
  id: "minIdleHours",
@@ -9253,7 +9373,12 @@ const PARAM_EXPOSURE = Object.freeze([
9253
9373
  owner: "evolution-curator",
9254
9374
  applies: "live",
9255
9375
  docAnchor: "PARAMETERS.md#curator",
9256
- summary: "Idle hours required before an automatic curation pass runs."
9376
+ summary: "Idle hours required before an automatic curation pass runs.",
9377
+ label: "空闲门槛",
9378
+ hint: "至少空闲多少小时才跑自动策展。",
9379
+ control: "number",
9380
+ unit: "小时",
9381
+ values: ""
9257
9382
  },
9258
9383
  {
9259
9384
  id: "minIdleFailOpen",
@@ -9263,7 +9388,12 @@ const PARAM_EXPOSURE = Object.freeze([
9263
9388
  owner: "evolution-curator",
9264
9389
  applies: "live",
9265
9390
  docAnchor: "PARAMETERS.md#curator",
9266
- summary: "Let the idle gate open when the activity probe is unavailable."
9391
+ summary: "Let the idle gate open when the activity probe is unavailable.",
9392
+ label: "空闲探针失败时放行",
9393
+ hint: "活动探针不可用时,是否让空闲门槛直接放行。",
9394
+ control: "switch",
9395
+ unit: "",
9396
+ values: ""
9267
9397
  },
9268
9398
  {
9269
9399
  id: "llmReview",
@@ -9273,7 +9403,12 @@ const PARAM_EXPOSURE = Object.freeze([
9273
9403
  owner: "evolution-curator",
9274
9404
  applies: "live",
9275
9405
  docAnchor: "PARAMETERS.md#curator",
9276
- summary: "Enable the LLM nomination pass on top of the deterministic lifecycle."
9406
+ summary: "Enable the LLM nomination pass on top of the deterministic lifecycle.",
9407
+ label: "启用 LLM 提名",
9408
+ hint: "在确定性生命周期之上再跑一遍 LLM 提名。",
9409
+ control: "switch",
9410
+ unit: "",
9411
+ values: ""
9277
9412
  },
9278
9413
  {
9279
9414
  id: "curatorReviewMaxTokens",
@@ -9283,7 +9418,12 @@ const PARAM_EXPOSURE = Object.freeze([
9283
9418
  owner: "evolution-curator",
9284
9419
  applies: "live",
9285
9420
  docAnchor: "PARAMETERS.md#curator",
9286
- summary: "Token budget of the curator LLM review."
9421
+ summary: "Token budget of the curator LLM review.",
9422
+ label: "策展 LLM token 预算",
9423
+ hint: "策展 LLM 审查可用的 token 预算。",
9424
+ control: "number",
9425
+ unit: "token",
9426
+ values: ""
9287
9427
  },
9288
9428
  {
9289
9429
  id: "curatorReviewTimeoutMs",
@@ -9293,7 +9433,12 @@ const PARAM_EXPOSURE = Object.freeze([
9293
9433
  owner: "evolution-curator",
9294
9434
  applies: "live",
9295
9435
  docAnchor: "PARAMETERS.md#curator",
9296
- summary: "Wall-clock bound of the curator LLM review."
9436
+ summary: "Wall-clock bound of the curator LLM review.",
9437
+ label: "策展 LLM 超时",
9438
+ hint: "策展 LLM 审查的墙钟上限。",
9439
+ control: "number",
9440
+ unit: "毫秒",
9441
+ values: ""
9297
9442
  },
9298
9443
  {
9299
9444
  id: "healthSoftBodyChars",
@@ -9303,7 +9448,12 @@ const PARAM_EXPOSURE = Object.freeze([
9303
9448
  owner: "evolution-curator",
9304
9449
  applies: "live",
9305
9450
  docAnchor: "PARAMETERS.md#curator",
9306
- summary: "Body character line the health view judges against."
9451
+ summary: "Body character line the health view judges against.",
9452
+ label: "正文软带",
9453
+ hint: "健康视图判定正文长度的软带。",
9454
+ control: "number",
9455
+ unit: "字符",
9456
+ values: ""
9307
9457
  },
9308
9458
  {
9309
9459
  id: "healthStampDensityPerKb",
@@ -9313,7 +9463,12 @@ const PARAM_EXPOSURE = Object.freeze([
9313
9463
  owner: "evolution-curator",
9314
9464
  applies: "live",
9315
9465
  docAnchor: "PARAMETERS.md#curator",
9316
- summary: "Stamp density per KB that flags log-like content in a body."
9466
+ summary: "Stamp density per KB that flags log-like content in a body.",
9467
+ label: "标记密度阈值",
9468
+ hint: "每 KB 出现多少个时间标记就算「像日志」。",
9469
+ control: "number",
9470
+ unit: "处/KB",
9471
+ values: ""
9317
9472
  },
9318
9473
  {
9319
9474
  id: "healthChurnMinPatches",
@@ -9323,7 +9478,12 @@ const PARAM_EXPOSURE = Object.freeze([
9323
9478
  owner: "evolution-curator",
9324
9479
  applies: "live",
9325
9480
  docAnchor: "PARAMETERS.md#curator",
9326
- summary: "Patches without a read that flag a write-ghost skill."
9481
+ summary: "Patches without a read that flag a write-ghost skill.",
9482
+ label: "空写判定补丁数",
9483
+ hint: "多少次改动都没有任何读取,即判为「写幽灵」。",
9484
+ control: "number",
9485
+ unit: "处",
9486
+ values: ""
9327
9487
  },
9328
9488
  {
9329
9489
  id: "evolution-curator.enabled",
@@ -60,6 +60,15 @@ export type ParamAuthority = 'code' | 'cordis' | 'install';
60
60
  * `applies` is the SETTINGS-side timing: 'none' means the parameter is not
61
61
  * writable through the user layer (a cordis.yml change still follows the
62
62
  * deployment's patch-reload policy).
63
+ *
64
+ * UI METADATA (0.7.0): every E3 row carries the optional tail
65
+ * `label, hint, control, unit, values` — in that order, directly after
66
+ * `summary`, still one entry per line. E3 is the only tier the settings cards
67
+ * render, so the card's Chinese name, help text, control kind, unit suffix and
68
+ * value domain come from THIS registry and nowhere else; the browser half is
69
+ * generated from this text (`gen-param-client-view.mjs`). Non-E3 rows must NOT
70
+ * carry the tail (there is no UI surface for them), and `control: 'select'`
71
+ * requires a non-empty pipe-joined `values`.
63
72
  */
64
73
  export interface ParamExposure {
65
74
  id: string;
@@ -70,6 +79,16 @@ export interface ParamExposure {
70
79
  applies: 'live' | 'restart' | 'none';
71
80
  docAnchor: string;
72
81
  summary: string;
82
+ /** Card label (Chinese, short). Required on E3 rows. */
83
+ label?: string;
84
+ /** Card help text (Chinese, one sentence). Required on E3 rows. */
85
+ hint?: string;
86
+ /** Which control the card renders for this field. Required on E3 rows. */
87
+ control?: 'number' | 'switch' | 'select' | 'text';
88
+ /** Unit suffix shown next to a number (empty when it carries none). */
89
+ unit?: string;
90
+ /** Pipe-joined allowed values; non-empty exactly when control is 'select'. */
91
+ values?: string;
73
92
  }
74
93
  /**
75
94
  * The parameter registry. G1/S1.1 seeds it with the review group (G-C); the
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.6.0",
4
+ "version": "0.7.0",
5
5
  "publishConfig": {
6
6
  "access": "public"
7
7
  },