dsh-advisor 0.5.3 → 0.5.4

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.
@@ -11,7 +11,8 @@
11
11
  * beneath it: provider select, model select (ALWAYS rendered — there is no
12
12
  * enable checkbox to gate them; the config-level `enabled` switch was removed
13
13
  * and the plugin-row toggle is the master switch), system-prompt textarea,
14
- * and the paired `immuneTurns`/`maxDeltaMessages` numbers; then the footer
14
+ * and the paired `immuneTurns`/`maxDeltaMessages` numbers (joined by
15
+ * `maxTokens`, issue #102) plus the `proseFallback` checkbox; then the footer
15
16
  * with the failed message + Discard/Save carrying the upstream disabled
16
17
  * semantics — save = `!dirty || invalid || saving`, discard = `!dirty ||
17
18
  * saving` (KD-U1, Global Constraints). Save additionally carries `!writable`
@@ -99,6 +99,17 @@ export interface AdvisorConfigView {
99
99
  immuneTurns: number;
100
100
  /** Delta window; integer ≥ 0, 0 = unbounded. */
101
101
  maxDeltaMessages: number;
102
+ /**
103
+ * Token budget for one advisor call (KD-I1, issue #102); integer
104
+ * 128..16384. Absent on plain-object entries → the runtime default
105
+ * `ADVISOR_MAX_TOKENS` (768), mirroring src/config.ts.
106
+ */
107
+ maxTokens?: number;
108
+ /**
109
+ * Opt-in prose fallback switch (KD-I2, issue #102). Absent on plain-object
110
+ * entries → the runtime default false, mirroring src/config.ts.
111
+ */
112
+ proseFallback?: boolean;
102
113
  /** Present iff the advisor is disabled by the explicit model gate. */
103
114
  disabledReason?: string;
104
115
  }
@@ -129,7 +140,10 @@ export type ModelsEmptyReason =
129
140
  | 'catalog-empty'
130
141
  /** No profile models; the catalog has no group for this provider. */
131
142
  | 'unavailable';
132
- /** The user-layer draft the form edits (provider/model/systemPrompt/immuneTurns/maxDeltaMessages). */
143
+ /**
144
+ * The user-layer draft the form edits
145
+ * (provider/model/systemPrompt/immuneTurns/maxDeltaMessages/maxTokens/proseFallback).
146
+ */
133
147
  export interface AdvisorDraft {
134
148
  /** Provider route; required (non-empty). */
135
149
  provider?: string;
@@ -141,6 +155,14 @@ export interface AdvisorDraft {
141
155
  immuneTurns?: number;
142
156
  /** Delta window; integer ≥ 0, default 60, 0 = unbounded. Cleared input → undefined (left unchanged on apply). */
143
157
  maxDeltaMessages?: number;
158
+ /**
159
+ * Token budget for one advisor call (KD-I1, issue #102); integer
160
+ * 128..16384, default 768. Cleared input → undefined (left unchanged on
161
+ * apply).
162
+ */
163
+ maxTokens?: number;
164
+ /** Opt-in prose fallback (KD-I2, issue #102); default false. */
165
+ proseFallback?: boolean;
144
166
  }
145
167
  /** Why an Apply failed (copy keys resolve in the card; raw text passes through). */
146
168
  export type ApplyFailure = {
@@ -286,6 +308,14 @@ export declare class AdvisorSettingsStore {
286
308
  setImmuneTurns(value: number | undefined): void;
287
309
  /** Set the delta-message window (int ≥ 0; non-numeric input keeps the current value; undefined clears → omitted from patch). */
288
310
  setMaxDeltaMessages(value: number | undefined): void;
311
+ /**
312
+ * Set the advisor token budget (KD-I1, issue #102: int clamped into
313
+ * 128..16384 — the schema bounds; non-numeric input keeps the current
314
+ * value; undefined clears → omitted from patch).
315
+ */
316
+ setMaxTokens(value: number | undefined): void;
317
+ /** Set the opt-in prose fallback (KD-I2, issue #102). */
318
+ setProseFallback(value: boolean): void;
289
319
  /**
290
320
  * Refuse in a read-only environment (store-side defense-in-depth for the
291
321
  * W-1 invariant — a write must never be issued when the UI declares the
@@ -340,6 +370,7 @@ export declare class AdvisorSettingsStore {
340
370
  private setField;
341
371
  /** Remove one optional draft field via the settings schema path writer. */
342
372
  private clearField;
373
+ /** A bounded integer clamp (int ≥ min, ≤ max); a non-finite input keeps the fallback. */
343
374
  private clampInt;
344
375
  }
345
376
  /**
@@ -28,6 +28,10 @@ export declare const en: {
28
28
  systemPromptHint: string;
29
29
  immuneTurns: string;
30
30
  maxDeltaMessages: string;
31
+ maxTokens: string;
32
+ maxTokensHint: string;
33
+ proseFallback: string;
34
+ proseFallbackHint: string;
31
35
  save: string;
32
36
  saving: string;
33
37
  discard: string;
package/lib/client.js CHANGED
@@ -48,7 +48,7 @@ Reply with EXACTLY ONE JSON object and nothing else:
48
48
  - If there is genuinely nothing worth advising, respond with {"note": "Nothing to add"}.
49
49
  - Do not include prose, markdown fences, or anything outside the JSON object.`;
50
50
 
51
- var css = `.kPHV8a_readOnly{color:var(--dsw-alias-label-tertiary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_notice{color:var(--dsw-alias-state-warn-label);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_savedNotice{color:var(--dsw-alias-state-success-primary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_error{color:var(--dsw-alias-state-error-primary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_form{flex-direction:column;display:flex}.kPHV8a_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.kPHV8a_form>.kPHV8a_field+.kPHV8a_field{border-top:.5px solid var(--dsw-alias-border-l2)}.kPHV8a_fieldLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.kPHV8a_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;height:34px;font:inherit;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);padding:0 12px;font-size:13px;line-height:1.5}select.kPHV8a_input{cursor:pointer;max-width:240px}.kPHV8a_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.kPHV8a_input::placeholder{color:var(--dsw-alias-label-dimmed)}.kPHV8a_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.kPHV8a_selectInput{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;background-size:12px 12px;padding-right:32px}.kPHV8a_textarea{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-height:96px;font:inherit;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);resize:vertical;padding:8px 12px;font-size:13px;line-height:1.5}.kPHV8a_textarea:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.kPHV8a_textarea::placeholder{color:var(--dsw-alias-label-dimmed)}.kPHV8a_textarea:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.kPHV8a_numberFields{border-top:.5px solid var(--dsw-alias-border-l2);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;padding:12px 0;display:grid}.kPHV8a_numberFields .kPHV8a_field{padding:0}.kPHV8a_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}.kPHV8a_warnHint{color:var(--dsw-alias-state-warn-label);margin:0;font-size:12px;line-height:1.5}.kPHV8a_footer{align-items:center;gap:8px;padding-top:16px;display:flex}.kPHV8a_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.kPHV8a_discard,.kPHV8a_save{appearance:none;border-radius:var(--dsw-radius-md);font:inherit;cursor:pointer;border:1px solid #0000;padding:5px 14px;font-size:13px;line-height:1.5}.kPHV8a_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.kPHV8a_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.kPHV8a_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.kPHV8a_discard:disabled,.kPHV8a_save:disabled{opacity:.4;cursor:default}.kPHV8a_discard:focus-visible,.kPHV8a_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}`;
51
+ var css = `.kPHV8a_readOnly{color:var(--dsw-alias-label-tertiary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_notice{color:var(--dsw-alias-state-warn-label);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_savedNotice{color:var(--dsw-alias-state-success-primary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_error{color:var(--dsw-alias-state-error-primary);margin:0 0 12px;font-size:12px;line-height:1.5}.kPHV8a_form{flex-direction:column;display:flex}.kPHV8a_field{flex-direction:column;gap:6px;padding:12px 0;display:flex}.kPHV8a_form>.kPHV8a_field+.kPHV8a_field{border-top:.5px solid var(--dsw-alias-border-l2)}.kPHV8a_fieldLabel{color:var(--dsw-alias-label-primary);font-size:13px;font-weight:500;line-height:1.5}.kPHV8a_input{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;height:34px;font:inherit;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);padding:0 12px;font-size:13px;line-height:1.5}select.kPHV8a_input{cursor:pointer;max-width:240px}.kPHV8a_input:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.kPHV8a_input::placeholder{color:var(--dsw-alias-label-dimmed)}.kPHV8a_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.kPHV8a_selectInput{appearance:none;background-image:url("data:image/svg+xml,%3Csvg xmlns='http://www.w3.org/2000/svg' width='12' height='12' viewBox='0 0 12 12' fill='none'%3E%3Cpath d='M3 4.5L6 7.5L9 4.5' stroke='%2381858C' stroke-width='1.5' stroke-linecap='round' stroke-linejoin='round'/%3E%3C/svg%3E");background-position:right 12px center;background-repeat:no-repeat;background-size:12px 12px;padding-right:32px}.kPHV8a_textarea{box-sizing:border-box;border:.5px solid var(--dsw-alias-border-l4);border-radius:var(--dsw-radius-md);width:100%;min-height:96px;font:inherit;background:var(--dsw-alias-bg-layer-3);color:var(--dsw-alias-label-primary);resize:vertical;padding:8px 12px;font-size:13px;line-height:1.5}.kPHV8a_textarea:focus-visible{border-color:var(--dsw-alias-state-business-primary);outline:none}.kPHV8a_textarea::placeholder{color:var(--dsw-alias-label-dimmed)}.kPHV8a_textarea:disabled{color:var(--dsw-alias-label-tertiary);cursor:default}.kPHV8a_numberFields{border-top:.5px solid var(--dsw-alias-border-l2);grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;padding:12px 0;display:grid}.kPHV8a_numberFields .kPHV8a_field{padding:0}.kPHV8a_checkboxInput{width:auto;accent-color:var(--dsw-alias-state-business-primary);align-self:flex-start;margin:0}.kPHV8a_hint{color:var(--dsw-alias-label-tertiary);margin:0;font-size:12px;line-height:1.5}.kPHV8a_warnHint{color:var(--dsw-alias-state-warn-label);margin:0;font-size:12px;line-height:1.5}.kPHV8a_footer{align-items:center;gap:8px;padding-top:16px;display:flex}.kPHV8a_failed{min-width:0;color:var(--dsw-alias-label-error);flex:1;margin:0;font-size:12px;line-height:1.5}.kPHV8a_discard,.kPHV8a_save{appearance:none;border-radius:var(--dsw-radius-md);font:inherit;cursor:pointer;border:1px solid #0000;padding:5px 14px;font-size:13px;line-height:1.5}.kPHV8a_discard{border-color:var(--dsw-alias-border-l2);color:var(--dsw-alias-label-secondary);background:0 0}.kPHV8a_discard:hover:not(:disabled){color:var(--dsw-alias-label-primary);border-color:var(--dsw-alias-label-dimmed)}.kPHV8a_save{background:var(--dsw-alias-label-primary);color:var(--dsw-alias-bg-layer-3)}.kPHV8a_discard:disabled,.kPHV8a_save:disabled{opacity:.4;cursor:default}.kPHV8a_discard:focus-visible,.kPHV8a_save:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:1px}`;
52
52
  var tagId = "dsh-advisor/advisor-card.module.css";
53
53
  if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId) + "]") === null) {
54
54
  const tag = document.createElement("style");
@@ -57,7 +57,7 @@ if (typeof document !== "undefined" && document.querySelector("style[data-plugin
57
57
  tag.textContent = css;
58
58
  document.head.appendChild(tag);
59
59
  }
60
- var advisor_card_module_css_default = { "discard": "kPHV8a_discard", "error": "kPHV8a_error", "failed": "kPHV8a_failed", "field": "kPHV8a_field", "fieldLabel": "kPHV8a_fieldLabel", "footer": "kPHV8a_footer", "form": "kPHV8a_form", "hint": "kPHV8a_hint", "input": "kPHV8a_input", "notice": "kPHV8a_notice", "numberFields": "kPHV8a_numberFields", "readOnly": "kPHV8a_readOnly", "save": "kPHV8a_save", "savedNotice": "kPHV8a_savedNotice", "selectInput": "kPHV8a_selectInput", "textarea": "kPHV8a_textarea", "warnHint": "kPHV8a_warnHint" };
60
+ var advisor_card_module_css_default = { "checkboxInput": "kPHV8a_checkboxInput", "discard": "kPHV8a_discard", "error": "kPHV8a_error", "failed": "kPHV8a_failed", "field": "kPHV8a_field", "fieldLabel": "kPHV8a_fieldLabel", "footer": "kPHV8a_footer", "form": "kPHV8a_form", "hint": "kPHV8a_hint", "input": "kPHV8a_input", "notice": "kPHV8a_notice", "numberFields": "kPHV8a_numberFields", "readOnly": "kPHV8a_readOnly", "save": "kPHV8a_save", "savedNotice": "kPHV8a_savedNotice", "selectInput": "kPHV8a_selectInput", "textarea": "kPHV8a_textarea", "warnHint": "kPHV8a_warnHint" };
61
61
 
62
62
  // src/client/advisor-card.tsx
63
63
  var import_jsx_runtime = require("react/jsx-runtime");
@@ -177,6 +177,24 @@ function AdvisorCard(props) {
177
177
  ),
178
178
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: advisor_card_module_css_default["hint"], children: t("systemPromptHint") })
179
179
  ] }),
180
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: advisor_card_module_css_default["field"], children: [
181
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { htmlFor: "advisor-prose-fallback", className: advisor_card_module_css_default["fieldLabel"], children: t("proseFallback") }),
182
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
183
+ "input",
184
+ {
185
+ id: "advisor-prose-fallback",
186
+ "aria-label": t("proseFallback"),
187
+ className: advisor_card_module_css_default["checkboxInput"],
188
+ type: "checkbox",
189
+ checked: draft.proseFallback ?? false,
190
+ disabled: busy,
191
+ onChange: (event) => {
192
+ controller.setProseFallback(event.target.checked);
193
+ }
194
+ }
195
+ ),
196
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: advisor_card_module_css_default["hint"], children: t("proseFallbackHint") })
197
+ ] }),
180
198
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: advisor_card_module_css_default["numberFields"], children: [
181
199
  /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: advisor_card_module_css_default["field"], children: [
182
200
  /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { htmlFor: "advisor-immune-turns", className: advisor_card_module_css_default["fieldLabel"], children: t("immuneTurns") }),
@@ -215,6 +233,27 @@ function AdvisorCard(props) {
215
233
  }
216
234
  }
217
235
  )
236
+ ] }),
237
+ /* @__PURE__ */ (0, import_jsx_runtime.jsxs)("div", { className: advisor_card_module_css_default["field"], children: [
238
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("label", { htmlFor: "advisor-max-tokens", className: advisor_card_module_css_default["fieldLabel"], children: t("maxTokens") }),
239
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
240
+ "input",
241
+ {
242
+ id: "advisor-max-tokens",
243
+ "aria-label": t("maxTokens"),
244
+ className: advisor_card_module_css_default["input"],
245
+ type: "number",
246
+ min: 128,
247
+ max: 16384,
248
+ step: 1,
249
+ value: draft.maxTokens ?? "",
250
+ disabled: busy,
251
+ onChange: (event) => {
252
+ controller.setMaxTokens(event.target.value === "" ? void 0 : Number(event.target.value));
253
+ }
254
+ }
255
+ ),
256
+ /* @__PURE__ */ (0, import_jsx_runtime.jsx)("p", { className: advisor_card_module_css_default["hint"], children: t("maxTokensHint") })
218
257
  ] })
219
258
  ] })
220
259
  ] }),
@@ -407,7 +446,14 @@ function draftOfConfig(config) {
407
446
  model: stringField(config?.model),
408
447
  systemPrompt: typeof config?.systemPrompt === "string" ? config.systemPrompt : "",
409
448
  immuneTurns: numberField(config?.immuneTurns, 3),
410
- maxDeltaMessages: numberField(config?.maxDeltaMessages, 60)
449
+ maxDeltaMessages: numberField(config?.maxDeltaMessages, 60),
450
+ // The scalar fields show the effective values: the gateway returns the
451
+ // resolved config, so the wire carries both keys whenever the resolver
452
+ // defined them (the schema defaults fill 768/false on the normal path);
453
+ // these fallbacks cover the containment wires whose raw entry omitted
454
+ // the keys (the gateway's S1 fallback mirrors the raw source verbatim).
455
+ maxTokens: numberField(config?.maxTokens, 768),
456
+ proseFallback: typeof config?.proseFallback === "boolean" ? config.proseFallback : false
411
457
  };
412
458
  }
413
459
  function gateFailure(draft) {
@@ -689,6 +735,22 @@ var AdvisorSettingsStore = class {
689
735
  }
690
736
  this.setField("maxDeltaMessages", this.clampInt(value, this.store.getSnapshot().draft.maxDeltaMessages ?? 0));
691
737
  }
738
+ /**
739
+ * Set the advisor token budget (KD-I1, issue #102: int clamped into
740
+ * 128..16384 — the schema bounds; non-numeric input keeps the current
741
+ * value; undefined clears → omitted from patch).
742
+ */
743
+ setMaxTokens(value) {
744
+ if (value === void 0) {
745
+ this.clearField("maxTokens");
746
+ return;
747
+ }
748
+ this.setField("maxTokens", this.clampInt(value, this.store.getSnapshot().draft.maxTokens ?? 768, 128, 16384));
749
+ }
750
+ /** Set the opt-in prose fallback (KD-I2, issue #102). */
751
+ setProseFallback(value) {
752
+ this.setField("proseFallback", value);
753
+ }
692
754
  /**
693
755
  * Refuse in a read-only environment (store-side defense-in-depth for the
694
756
  * W-1 invariant — a write must never be issued when the UI declares the
@@ -788,7 +850,7 @@ var AdvisorSettingsStore = class {
788
850
  */
789
851
  patchFor(draft) {
790
852
  const patch = {};
791
- const always = ["systemPrompt", "immuneTurns", "maxDeltaMessages"];
853
+ const always = ["systemPrompt", "immuneTurns", "maxDeltaMessages", "maxTokens", "proseFallback"];
792
854
  for (const key of always) {
793
855
  const next = draft[key];
794
856
  if (next === void 0) continue;
@@ -835,8 +897,9 @@ var AdvisorSettingsStore = class {
835
897
  s.dirty = this.recomputeDirty(s.draft);
836
898
  });
837
899
  }
838
- clampInt(value, fallback) {
839
- return Number.isFinite(value) ? Math.max(0, Math.floor(value)) : fallback;
900
+ /** A bounded integer clamp (int ≥ min, ≤ max); a non-finite input keeps the fallback. */
901
+ clampInt(value, fallback, min = 0, max = Number.MAX_SAFE_INTEGER) {
902
+ return Number.isFinite(value) ? Math.min(max, Math.max(min, Math.floor(value))) : fallback;
840
903
  }
841
904
  };
842
905
  function refreshIfLoaded(controller) {
@@ -1018,6 +1081,10 @@ var en = {
1018
1081
  systemPromptHint: "Leave empty to use the default system prompt",
1019
1082
  immuneTurns: "Immune turns",
1020
1083
  maxDeltaMessages: "Max delta messages",
1084
+ maxTokens: "Max tokens",
1085
+ maxTokensHint: "Token budget for one advisor review (128\u201316384, default 768). Raise it if a thinking model returns empty replies.",
1086
+ proseFallback: "Prose fallback",
1087
+ proseFallbackHint: "When no JSON frame is found, deliver the prose reply as a low-severity note \u2014 for models that answer in prose instead of JSON.",
1021
1088
  save: "Save",
1022
1089
  saving: "Saving\u2026",
1023
1090
  discard: "Discard",
@@ -1059,6 +1126,10 @@ var zh = {
1059
1126
  systemPromptHint: "\u7559\u7A7A\u5219\u4F7F\u7528\u9ED8\u8BA4\u7CFB\u7EDF\u63D0\u793A\u8BCD",
1060
1127
  immuneTurns: "\u514D\u75AB\u8F6E\u6B21",
1061
1128
  maxDeltaMessages: "\u6700\u5927\u589E\u91CF\u6D88\u606F\u6570",
1129
+ maxTokens: "\u6700\u5927 token \u6570",
1130
+ maxTokensHint: "\u5355\u6B21\u8BC4\u5BA1\u7684 token \u9884\u7B97\uFF08128\u201316384\uFF0C\u9ED8\u8BA4 768\uFF09\u3002\u601D\u8003\u578B\u6A21\u578B\u8FD4\u56DE\u7A7A\u56DE\u590D\u65F6\u8BF7\u8C03\u9AD8\u3002",
1131
+ proseFallback: "\u6563\u6587\u56DE\u9000",
1132
+ proseFallbackHint: "\u672A\u627E\u5230 JSON \u5E27\u65F6\uFF0C\u5C06\u6563\u6587\u56DE\u590D\u4F5C\u4E3A\u4F4E\u4E25\u91CD\u7EA7\u5EFA\u8BAE\u6295\u9012\u2014\u2014\u9002\u7528\u4E8E\u4EE5\u6563\u6587\u800C\u975E JSON \u4F5C\u7B54\u7684\u6A21\u578B\u3002",
1062
1133
  save: "\u4FDD\u5B58",
1063
1134
  saving: "\u4FDD\u5B58\u4E2D\u2026",
1064
1135
  discard: "\u653E\u5F03\u4FEE\u6539",
package/lib/commands.d.ts CHANGED
@@ -223,11 +223,32 @@ export interface AdvisorSessionStatus {
223
223
  readonly pendingCount: number;
224
224
  /** Epoch-ms of the last accepted note; undefined before the first (T4). */
225
225
  readonly lastActivityAt?: number;
226
+ /**
227
+ * Empty replies dropped since the runtime was created (KD-I3, issue #102) —
228
+ * the classic case is a thinking model exhausting the token budget (empty
229
+ * body, finish: max-tokens). 0 for a session without a live runtime.
230
+ */
231
+ readonly emptyReplies: number;
232
+ /**
233
+ * Replies dropped since the runtime was created because they carried a body
234
+ * but no parseable JSON note and the opt-in prose fallback did not rescue
235
+ * them (KD-I3, issue #102). 0 for a session without a live runtime.
236
+ */
237
+ readonly unparsedReplies: number;
238
+ /** Epoch-ms of the last empty-reply drop; undefined before the first. */
239
+ readonly lastEmptyReplyAt?: number;
240
+ /** Epoch-ms of the last unparsed-reply drop; undefined before the first. */
241
+ readonly lastUnparsedReplyAt?: number;
226
242
  }
227
243
  /**
228
244
  * Render the status surface. Kept minimal and truthful: state, the S4 reason
229
245
  * when the gate blocks, the resolved provider/model, the runtime status with
230
- * the pending count, and the last accepted-note activity (ISO, or `never`).
246
+ * the pending count, the last accepted-note activity (ISO, or `never`), and —
247
+ * ONLY when a drop counter is non-zero (KD-I3, issue #102) — one `Dropped:`
248
+ * line with the per-class counts, the ISO timestamp of each class's last drop
249
+ * when present, and the same repair hints the runtime's warn-once logs carry
250
+ * (empty → raise maxTokens; unparsed → enable proseFallback). The zero-drop
251
+ * output stays byte-identical to the pre-issue-#102 surface.
231
252
  */
232
253
  export declare function advisorStatusText(status: AdvisorSessionStatus): string;
233
254
  /** Validation deadline for one `/advisor model set` lookup (60 s — matches
@@ -297,6 +318,18 @@ export interface AdvisorComposedConfig {
297
318
  readonly immuneTurns: number;
298
319
  /** Delta window; 0 = unbounded (KD-3). */
299
320
  readonly maxDeltaMessages: number;
321
+ /**
322
+ * Token budget for one advisor call (KD-I1, issue #102). Present when the
323
+ * composed read carries the key (the schema default fills 768 on the
324
+ * resolved path); absent on a fallback-shaped read — the renderer shows the
325
+ * line only when present, never a defaulted value for an absent key.
326
+ */
327
+ readonly maxTokens?: number;
328
+ /**
329
+ * Opt-in prose fallback switch (KD-I2, issue #102); same presence rule as
330
+ * {@link AdvisorComposedConfig.maxTokens}.
331
+ */
332
+ readonly proseFallback?: boolean;
300
333
  /** True when the composed config carries a custom system prompt ("" = unset). */
301
334
  readonly systemPromptSet: boolean;
302
335
  /**
package/lib/commands.js CHANGED
@@ -211,7 +211,12 @@ export class AdvisorSessionOverrides {
211
211
  /**
212
212
  * Render the status surface. Kept minimal and truthful: state, the S4 reason
213
213
  * when the gate blocks, the resolved provider/model, the runtime status with
214
- * the pending count, and the last accepted-note activity (ISO, or `never`).
214
+ * the pending count, the last accepted-note activity (ISO, or `never`), and —
215
+ * ONLY when a drop counter is non-zero (KD-I3, issue #102) — one `Dropped:`
216
+ * line with the per-class counts, the ISO timestamp of each class's last drop
217
+ * when present, and the same repair hints the runtime's warn-once logs carry
218
+ * (empty → raise maxTokens; unparsed → enable proseFallback). The zero-drop
219
+ * output stays byte-identical to the pre-issue-#102 surface.
215
220
  */
216
221
  export function advisorStatusText(status) {
217
222
  const lines = [];
@@ -226,6 +231,25 @@ export function advisorStatusText(status) {
226
231
  const pending = status.pendingCount > 0 ? ` (${status.pendingCount} pending)` : '';
227
232
  lines.push(`Runtime: ${status.runtimeStatus}${pending}`);
228
233
  lines.push(`Last activity: ${status.lastActivityAt === undefined ? 'never' : new Date(status.lastActivityAt).toISOString()}`);
234
+ // KD-I3 (issue #102): drop visibility — ONE line, only when something was
235
+ // actually dropped, so the zero-drop surface stays byte-identical ("minimal
236
+ // and truthful"). Per class: count, the ISO timestamp of the last drop when
237
+ // the class has fired, and the repair hint matching the runtime's warn-once.
238
+ const dropped = [];
239
+ if (status.emptyReplies > 0) {
240
+ const last = status.lastEmptyReplyAt === undefined
241
+ ? ''
242
+ : ` (last ${new Date(status.lastEmptyReplyAt).toISOString()})`;
243
+ dropped.push(`${status.emptyReplies} empty${last} — consider raising the maxTokens setting`);
244
+ }
245
+ if (status.unparsedReplies > 0) {
246
+ const last = status.lastUnparsedReplyAt === undefined
247
+ ? ''
248
+ : ` (last ${new Date(status.lastUnparsedReplyAt).toISOString()})`;
249
+ dropped.push(`${status.unparsedReplies} unparsed${last} — consider enabling the proseFallback setting`);
250
+ }
251
+ if (dropped.length > 0)
252
+ lines.push(`Dropped: ${dropped.join('; ')}`);
229
253
  return lines.join('\n');
230
254
  }
231
255
  // ---------------------------------------------------------------------------
@@ -310,6 +334,15 @@ export function advisorConfigText(config) {
310
334
  }
311
335
  lines.push(`immuneTurns: ${config.immuneTurns}`);
312
336
  lines.push(`maxDeltaMessages: ${config.maxDeltaMessages === 0 ? 'unbounded' : config.maxDeltaMessages}`);
337
+ // The issue-#102 keys (qc1 S-1) render only when the composed read carries
338
+ // them: a fallback-shaped read omits the optional keys, and inventing a
339
+ // default marker there would misreport a store whose real values differ —
340
+ // the same lie class the gateway wire fix (qc1 W-1) removes. Absent = no
341
+ // line, matching the Model/Reason lines' conditional style.
342
+ if (config.maxTokens !== undefined)
343
+ lines.push(`maxTokens: ${config.maxTokens}`);
344
+ if (config.proseFallback !== undefined)
345
+ lines.push(`proseFallback: ${config.proseFallback ? 'on' : 'off'}`);
313
346
  // The set-vs-default signal is systemPromptSet, NOT the summary: a custom
314
347
  // prompt whose first line is empty (e.g. '\nsecond line') summarizes to ''
315
348
  // but must still read as set, not <default> (qc2 F-3).
@@ -1 +1 @@
1
- {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"commands.js","sourceRoot":"","sources":["../src/commands.ts"],"names":[],"mappings":"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"}
package/lib/config.d.ts CHANGED
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * The exported schemastery `Config` schema is what the cordis Loader uses to
5
5
  * validate the plugin row config: it applies defaults (`immuneTurns` 3,
6
- * `maxDeltaMessages` 60, `systemPrompt` "") and enforces types/bounds
7
- * (integers ≥ 0). All five live fields are declared `.volatile()`:
6
+ * `maxDeltaMessages` 60, `systemPrompt` "", `maxTokens` 768,
7
+ * `proseFallback` false) and enforces types/bounds (integers ≥ 0; maxTokens
8
+ * 128..16384). All seven live fields are declared `.volatile()`:
8
9
  * the Loader commits edits to them into the running fiber's references WITHOUT
9
10
  * a remount (dsh 0.1.7-rc.1 — the settings.yaml user layer is gone), so
10
11
  * `apply` receives each field as a `{ get() }` reference and every read must
@@ -40,6 +41,28 @@ export interface AdvisorConfig {
40
41
  readonly immuneTurns: number;
41
42
  /** Delta window; integer ≥ 0, default 60, 0 = unbounded (KD-3). */
42
43
  readonly maxDeltaMessages: number;
44
+ /**
45
+ * Token budget for one advisor call; integer 128..16384, default 768
46
+ * (KD-I1, issue #102 — the 2026-09-29 user-directed supersession of KD-6's
47
+ * code invariant: a thinking model behind a third-party gateway can exhaust
48
+ * a fixed budget on reasoning and come back empty, so the operator raises
49
+ * the budget via Settings instead). Optional in the raw contract: the
50
+ * schema default (768) fills it on the Loader path and plain-object entries
51
+ * may omit it — the runtime falls back to `ADVISOR_MAX_TOKENS`
52
+ * (src/advisor-runtime.ts), keeping the default behavior byte-identical.
53
+ */
54
+ readonly maxTokens?: number;
55
+ /**
56
+ * Opt-in prose fallback (KD-I2, issue #102): when true, a reply with no
57
+ * parseable JSON frame but non-empty text is delivered as a `nit` note
58
+ * (trimmed, surrounding fence stripped, capped at the note-char bound)
59
+ * instead of being dropped. JSON-frame priority is unchanged — the fallback
60
+ * applies ONLY when no frame was found. Optional in the raw contract: the
61
+ * schema default (false) fills it on the Loader path and plain-object
62
+ * entries may omit it — the runtime falls back to false (the KD-2 drop
63
+ * semantics), keeping the default behavior byte-identical.
64
+ */
65
+ readonly proseFallback?: boolean;
43
66
  }
44
67
  /** Config after the explicit model gate (spec §5.2) — consumed by T4/T6. */
45
68
  export interface ResolvedAdvisorConfig {
@@ -54,6 +77,10 @@ export interface ResolvedAdvisorConfig {
54
77
  readonly systemPrompt: string;
55
78
  readonly immuneTurns: number;
56
79
  readonly maxDeltaMessages: number;
80
+ /** Token budget (KD-I1); absent on plain-object entries → runtime default 768. */
81
+ readonly maxTokens?: number;
82
+ /** Prose fallback switch (KD-I2); absent on plain-object entries → runtime default false. */
83
+ readonly proseFallback?: boolean;
57
84
  /** Present iff the advisor is disabled by the explicit model gate. */
58
85
  readonly disabledReason?: string;
59
86
  }
@@ -85,12 +112,16 @@ export declare const Config: z<Schemastery.ObjectS<NoInfer<{
85
112
  systemPrompt: z<string, string, "volatile-defined">;
86
113
  immuneTurns: z<number, number, "volatile-defined">;
87
114
  maxDeltaMessages: z<number, number, "volatile-defined">;
115
+ maxTokens: z<number, number, "volatile-defined">;
116
+ proseFallback: z<boolean, boolean, "volatile-defined">;
88
117
  }>>, Schemastery.ObjectT<NoInfer<{
89
118
  provider: z<string, string, "volatile">;
90
119
  model: z<string, string, "volatile">;
91
120
  systemPrompt: z<string, string, "volatile-defined">;
92
121
  immuneTurns: z<number, number, "volatile-defined">;
93
122
  maxDeltaMessages: z<number, number, "volatile-defined">;
123
+ maxTokens: z<number, number, "volatile-defined">;
124
+ proseFallback: z<boolean, boolean, "volatile-defined">;
94
125
  }>>, "plain">;
95
126
  /**
96
127
  * The entry config as the runtime hands it to `apply` (dsh 0.1.7-rc.1): every
@@ -107,6 +138,10 @@ export interface VolatileAdvisorConfig {
107
138
  readonly systemPrompt: unknown;
108
139
  readonly immuneTurns: unknown;
109
140
  readonly maxDeltaMessages: unknown;
141
+ /** Optional like {@link AdvisorConfig.maxTokens}: plain entries may omit it; the Loader path always carries it. */
142
+ readonly maxTokens?: unknown;
143
+ /** Optional like {@link AdvisorConfig.proseFallback}: plain entries may omit it; the Loader path always carries it. */
144
+ readonly proseFallback?: unknown;
110
145
  }
111
146
  /**
112
147
  * Snapshot the live entry config into a plain {@link AdvisorConfig}: every
package/lib/config.js CHANGED
@@ -3,8 +3,9 @@
3
3
  *
4
4
  * The exported schemastery `Config` schema is what the cordis Loader uses to
5
5
  * validate the plugin row config: it applies defaults (`immuneTurns` 3,
6
- * `maxDeltaMessages` 60, `systemPrompt` "") and enforces types/bounds
7
- * (integers ≥ 0). All five live fields are declared `.volatile()`:
6
+ * `maxDeltaMessages` 60, `systemPrompt` "", `maxTokens` 768,
7
+ * `proseFallback` false) and enforces types/bounds (integers ≥ 0; maxTokens
8
+ * 128..16384). All seven live fields are declared `.volatile()`:
8
9
  * the Loader commits edits to them into the running fiber's references WITHOUT
9
10
  * a remount (dsh 0.1.7-rc.1 — the settings.yaml user layer is gone), so
10
11
  * `apply` receives each field as a `{ get() }` reference and every read must
@@ -40,6 +41,8 @@ const CONFIG_KEYS = new Set([
40
41
  'systemPrompt',
41
42
  'immuneTurns',
42
43
  'maxDeltaMessages',
44
+ 'maxTokens',
45
+ 'proseFallback',
43
46
  ]);
44
47
  /**
45
48
  * Removed config keys the strict unknown-key rejection TOLERATES — accepted
@@ -82,6 +85,8 @@ export const Config = z.object({
82
85
  systemPrompt: z.string().default('').volatile(),
83
86
  immuneTurns: z.number().step(1).min(0).default(3).volatile(),
84
87
  maxDeltaMessages: z.number().step(1).min(0).default(60).volatile(),
88
+ maxTokens: z.number().step(1).min(128).max(16384).default(768).volatile(),
89
+ proseFallback: z.boolean().default(false).volatile(),
85
90
  });
86
91
  function isNonEmptyString(value) {
87
92
  // Trim before checking: a whitespace-only value (" ") is empty in effect
@@ -123,7 +128,7 @@ export function unwrapAdvisorConfig(raw) {
123
128
  // The raw side is loose on purpose: the schema-removed `enabled` is not a
124
129
  // VolatileAdvisorConfig member but can arrive on any plain entry — the cast
125
130
  // widens only to let the destructure strip it.
126
- const { enabled, provider, model, systemPrompt, immuneTurns, maxDeltaMessages, ...rest } = raw;
131
+ const { enabled, provider, model, systemPrompt, immuneTurns, maxDeltaMessages, maxTokens, proseFallback, ...rest } = raw;
127
132
  return {
128
133
  ...rest,
129
134
  provider: unwrapReference(provider) ?? undefined,
@@ -131,6 +136,8 @@ export function unwrapAdvisorConfig(raw) {
131
136
  systemPrompt: unwrapReference(systemPrompt),
132
137
  immuneTurns: unwrapReference(immuneTurns),
133
138
  maxDeltaMessages: unwrapReference(maxDeltaMessages),
139
+ maxTokens: unwrapReference(maxTokens),
140
+ proseFallback: unwrapReference(proseFallback),
134
141
  };
135
142
  }
136
143
  /**
package/lib/config.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../src/config.ts"],"names":[],"mappings":"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"}
package/lib/gateway.d.ts CHANGED
@@ -31,9 +31,10 @@
31
31
  * resolvable from a fiber that declares it.
32
32
  *
33
33
  * The returned config is normalized to the typertGateway JSON wire boundary:
34
- * absent keys (provider/model/disabledReason) are OMITTED, never
35
- * present-as-undefined (the gateway's result validation rejects undefined
36
- * values).
34
+ * absent keys (provider/model/disabledReason, and maxTokens/proseFallback
35
+ * when the raw entry omits them on the S1 containment path) are OMITTED,
36
+ * never present-as-undefined (the gateway's result validation rejects
37
+ * undefined values).
37
38
  *
38
39
  * @module dsh-advisor/gateway
39
40
  */
@@ -215,8 +216,9 @@ export declare class AdvisorConfigGateway extends TypertRemoteService {
215
216
  * disabled-with-reason carrying the message — the gateway never fails the
216
217
  * RPC on a bad config, and gate semantics hold (no model call can start).
217
218
  * S1: when the raw source is still readable, the fallback seeds its scalar
218
- * latches (systemPrompt / immuneTurns / maxDeltaMessages) instead of
219
- * hardcoded defaults, so an invalid config only drops the offending keys.
219
+ * latches (systemPrompt / immuneTurns / maxDeltaMessages / maxTokens /
220
+ * proseFallback) instead of hardcoded defaults, so an invalid config only
221
+ * drops the offending keys.
220
222
  */
221
223
  private readConfig;
222
224
  }