@khorsheed/dsh-local-agent 0.2.0-rc.3 → 0.2.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/client.js CHANGED
@@ -167,27 +167,27 @@ window.__ModuleLoader__.load({
167
167
  };
168
168
  //#endregion
169
169
  //#region \0dsh-css:src/client/MemberConfiguration.module.css.mjs
170
- const css$6 = ".pkplGa_root{min-width:0;color:var(--dsw-alias-label-primary,#1f2329);font-size:13px;line-height:20px;position:relative}.pkplGa_root>summary{cursor:pointer;box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;max-width:280px;min-height:30px;color:var(--dsw-alias-label-secondary,#81858c);border:1px solid #0000;border-radius:8px;align-items:center;gap:8px;padding:4px 10px;list-style:none;transition:background .12s,border-color .12s;display:flex;overflow:hidden}.pkplGa_triggerLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}.pkplGa_root>summary::-webkit-details-marker{display:none}.pkplGa_root>summary:after{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;flex:0 0 5px;height:5px;margin:-3px 2px 0 auto;transform:rotate(45deg)}.pkplGa_root[open]>summary,.pkplGa_root>summary:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1a);color:var(--dsw-alias-label-primary,#1f2329)}.pkplGa_root[open]>summary:after{margin-top:3px;transform:rotate(225deg)}.pkplGa_settings>summary{border-color:var(--dsw-alias-border-l2,#7f7f7f33)}.pkplGa_root>summary:focus-visible,.pkplGa_panel button:focus-visible,.pkplGa_fields input:focus-visible{outline:2px solid var(--dsw-alias-label-secondary,#81858c);outline-offset:2px}.pkplGa_panel{z-index:20;overscroll-behavior:contain;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#7f7f7f33);background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,#fff));width:min(300px,100vw - 32px);max-height:min(400px,65vh);backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));border-radius:12px;flex-direction:column;gap:8px;padding:6px;display:flex;position:absolute;bottom:calc(100% + 6px);right:0;overflow-y:auto;box-shadow:0 8px 24px #0000002e}.pkplGa_settings .pkplGa_panel{inset:calc(100% + 6px) auto auto 0}.pkplGa_fields{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:0;display:flex}.pkplGa_fields input{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#7f7f7f33);width:100%;min-width:0;color:inherit;font:inherit;background:0 0;border-radius:7px;margin:2px 0 4px;padding:7px 9px}.pkplGa_actions{flex-wrap:wrap;gap:6px;display:flex}.pkplGa_panel button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:7px;padding:7px 10px}.pkplGa_panel button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1a)}.pkplGa_panel button[aria-selected=true]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f29)}.pkplGa_panel button:disabled{cursor:default;opacity:.5}.pkplGa_menuRow{text-align:left;justify-content:space-between;align-items:center;gap:16px;width:100%;min-height:36px;display:flex}.pkplGa_menuRow span:last-child{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-secondary,#81858c);overflow:hidden}.pkplGa_back{align-self:flex-start}.pkplGa_candidates{overscroll-behavior:contain;flex-direction:column;gap:2px;max-height:260px;display:flex;overflow-y:auto}.pkplGa_candidates button{text-align:left;overflow-wrap:anywhere;white-space:normal;flex-direction:column;flex-shrink:0;gap:1px;display:flex}.pkplGa_optionLabel{justify-content:space-between;align-items:center;gap:12px;width:100%;display:flex}.pkplGa_candidates strong{font-weight:500}.pkplGa_check{flex-shrink:0}.pkplGa_panel small{color:var(--dsw-alias-label-secondary,#81858c);font-size:12px}.pkplGa_panel>small,.pkplGa_fields>small{padding:2px 8px}";
171
- const tagId$6 = "@khorsheed/dsh-local-agent/MemberConfiguration.module.css";
172
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
170
+ const css$7 = ".pkplGa_root{min-width:0;color:var(--dsw-alias-label-primary,#1f2329);font-size:13px;line-height:20px;position:relative}.pkplGa_root>summary{cursor:pointer;box-sizing:border-box;text-overflow:ellipsis;white-space:nowrap;max-width:280px;min-height:30px;color:var(--dsw-alias-label-secondary,#81858c);border:1px solid #0000;border-radius:8px;align-items:center;gap:8px;padding:4px 10px;list-style:none;transition:background .12s,border-color .12s;display:flex;overflow:hidden}.pkplGa_triggerLabel{text-overflow:ellipsis;min-width:0;overflow:hidden}.pkplGa_root>summary::-webkit-details-marker{display:none}.pkplGa_root>summary:after{content:\"\";border-bottom:1.5px solid;border-right:1.5px solid;flex:0 0 5px;height:5px;margin:-3px 2px 0 auto;transform:rotate(45deg)}.pkplGa_root[open]>summary,.pkplGa_root>summary:hover{background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1a);color:var(--dsw-alias-label-primary,#1f2329)}.pkplGa_root[open]>summary:after{margin-top:3px;transform:rotate(225deg)}.pkplGa_settings>summary{border-color:var(--dsw-alias-border-l2,#7f7f7f33)}.pkplGa_root>summary:focus-visible,.pkplGa_panel button:focus-visible,.pkplGa_fields input:focus-visible{outline:2px solid var(--dsw-alias-label-secondary,#81858c);outline-offset:2px}.pkplGa_panel{z-index:20;overscroll-behavior:contain;box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#7f7f7f33);background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,#fff));width:min(300px,100vw - 32px);max-height:min(400px,65vh);backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));border-radius:12px;flex-direction:column;gap:8px;padding:6px;display:flex;position:absolute;bottom:calc(100% + 6px);right:0;overflow-y:auto;box-shadow:0 8px 24px #0000002e}.pkplGa_settings .pkplGa_panel{inset:calc(100% + 6px) auto auto 0}.pkplGa_fields{border:0;flex-direction:column;gap:6px;min-width:0;margin:0;padding:0;display:flex}.pkplGa_fields input{box-sizing:border-box;border:1px solid var(--dsw-alias-border-l2,#7f7f7f33);width:100%;min-width:0;color:inherit;font:inherit;background:0 0;border-radius:7px;margin:2px 0 4px;padding:7px 9px}.pkplGa_actions{flex-wrap:wrap;gap:6px;display:flex}.pkplGa_panel button{font:inherit;color:inherit;cursor:pointer;background:0 0;border:none;border-radius:7px;padding:7px 10px}.pkplGa_panel button:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover,#7f7f7f1a)}.pkplGa_panel button[aria-selected=true]{background:var(--dsw-alias-interactive-bg-active,#7f7f7f29)}.pkplGa_panel button:disabled{cursor:default;opacity:.5}.pkplGa_menuRow{text-align:left;justify-content:space-between;align-items:center;gap:16px;width:100%;min-height:36px;display:flex}.pkplGa_menuRow span:last-child{text-overflow:ellipsis;white-space:nowrap;color:var(--dsw-alias-label-secondary,#81858c);overflow:hidden}.pkplGa_back{align-self:flex-start}.pkplGa_candidates{overscroll-behavior:contain;flex-direction:column;gap:2px;max-height:260px;display:flex;overflow-y:auto}.pkplGa_candidates button{text-align:left;overflow-wrap:anywhere;white-space:normal;flex-direction:column;flex-shrink:0;gap:1px;display:flex}.pkplGa_optionLabel{justify-content:space-between;align-items:center;gap:12px;width:100%;display:flex}.pkplGa_candidates strong{font-weight:500}.pkplGa_check{flex-shrink:0}.pkplGa_panel small{color:var(--dsw-alias-label-secondary,#81858c);font-size:12px}.pkplGa_panel>small,.pkplGa_fields>small{padding:2px 8px}";
171
+ const tagId$7 = "@khorsheed/dsh-local-agent/MemberConfiguration.module.css";
172
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$7) + "]") === null) {
173
173
  const tag = document.createElement("style");
174
174
  tag.dataset.plugin = "@khorsheed/dsh-local-agent";
175
- tag.dataset.pluginCss = tagId$6;
176
- tag.textContent = css$6;
175
+ tag.dataset.pluginCss = tagId$7;
176
+ tag.textContent = css$7;
177
177
  document.head.appendChild(tag);
178
178
  }
179
179
  var MemberConfiguration_module_css_default = {
180
- "optionLabel": "pkplGa_optionLabel",
181
- "candidates": "pkplGa_candidates",
180
+ "triggerLabel": "pkplGa_triggerLabel",
182
181
  "actions": "pkplGa_actions",
183
- "fields": "pkplGa_fields",
184
- "menuRow": "pkplGa_menuRow",
185
- "check": "pkplGa_check",
186
- "panel": "pkplGa_panel",
187
182
  "root": "pkplGa_root",
188
- "triggerLabel": "pkplGa_triggerLabel",
183
+ "fields": "pkplGa_fields",
184
+ "optionLabel": "pkplGa_optionLabel",
185
+ "candidates": "pkplGa_candidates",
189
186
  "settings": "pkplGa_settings",
190
- "back": "pkplGa_back"
187
+ "panel": "pkplGa_panel",
188
+ "menuRow": "pkplGa_menuRow",
189
+ "back": "pkplGa_back",
190
+ "check": "pkplGa_check"
191
191
  };
192
192
  //#endregion
193
193
  //#region src/client/ModelConfigurationFields.tsx
@@ -394,9 +394,10 @@ window.__ModuleLoader__.load({
394
394
  //#endregion
395
395
  //#region src/client/HarnessModelPicker.tsx
396
396
  /** Discover while expanded or resolving an empty choice; settings remain caller-owned drafts. */
397
- function HarnessModelPicker({ face, value, onChange, disabled, t }) {
397
+ function HarnessModelPicker({ face, value, onChange, effort, disabled, fields, t }) {
398
398
  const menu = useConfigurationMenu("below");
399
- const { open, setOpen } = menu;
399
+ const { setOpen } = menu;
400
+ const open = menu.open || fields !== void 0;
400
401
  const [surface, setSurface] = (0, react.useState)();
401
402
  const directory = surface?.face === face ? surface.directory : void 0;
402
403
  const currentFace = (0, react.useRef)(face);
@@ -446,6 +447,16 @@ window.__ModuleLoader__.load({
446
447
  onChange
447
448
  ]);
448
449
  const entry = directory?.entries.find((entry) => entry.value === value);
450
+ if (fields !== void 0) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ModelSelects, {
451
+ directory,
452
+ error,
453
+ value,
454
+ onChange,
455
+ effort,
456
+ disabled,
457
+ classes: fields,
458
+ t
459
+ });
449
460
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("details", {
450
461
  ref: menu.root,
451
462
  className: `${MemberConfiguration_module_css_default.root} ${MemberConfiguration_module_css_default.settings}`,
@@ -478,13 +489,17 @@ window.__ModuleLoader__.load({
478
489
  mode: "value",
479
490
  value
480
491
  } : { mode: "default" },
481
- effort: { mode: "default" }
492
+ effort: effort !== void 0 && effort.value !== "" ? {
493
+ mode: "value",
494
+ value: effort.value
495
+ } : { mode: "default" }
482
496
  },
483
497
  onChange: (selection) => {
484
498
  onChange(selection.model.mode === "value" ? selection.model.value : "");
485
- setOpen(false);
499
+ effort?.onChange(selection.effort.mode === "value" ? selection.effort.value : "");
500
+ if (effort === void 0) setOpen(false);
486
501
  },
487
- showEffort: false,
502
+ showEffort: effort !== void 0,
488
503
  disabled,
489
504
  t
490
505
  })
@@ -492,22 +507,125 @@ window.__ModuleLoader__.load({
492
507
  })]
493
508
  });
494
509
  }
510
+ /** The form-field face: a model select and, when asked, the model's effort select ('' = the model's default). */
511
+ function ModelSelects({ directory, error, value, onChange, effort, disabled, classes, t }) {
512
+ const entries = directory?.entries ?? [];
513
+ const shown = entries.filter((entry) => !entry.hidden || entry.value === value);
514
+ const reasoning = entries.find((entry) => entry.value === value)?.reasoning;
515
+ const options = reasoning?.options ?? [];
516
+ const defaultEffort = options.find((option) => option.value === reasoning?.default)?.label ?? reasoning?.default;
517
+ const pickModel = (next) => {
518
+ onChange(next);
519
+ const nextOptions = entries.find((entry) => entry.value === next)?.reasoning?.options ?? [];
520
+ if (effort !== void 0 && effort.value !== "" && !nextOptions.some((option) => option.value === effort.value)) effort.onChange("");
521
+ };
522
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
523
+ className: classes.row,
524
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
525
+ className: classes.field,
526
+ children: [
527
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
528
+ className: classes.label,
529
+ children: t("configuration.model")
530
+ }),
531
+ /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
532
+ className: classes.select,
533
+ "aria-label": t("configuration.model"),
534
+ value,
535
+ disabled: disabled || directory === void 0,
536
+ onChange: (event) => {
537
+ pickModel(event.target.value);
538
+ },
539
+ children: [
540
+ directory === void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
541
+ value,
542
+ children: value || t("loading")
543
+ }),
544
+ directory !== void 0 && value === "" && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
545
+ value: "",
546
+ children: t("configuration.choose")
547
+ }),
548
+ directory !== void 0 && value !== "" && !shown.some((entry) => entry.value === value) && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
549
+ value,
550
+ children: value
551
+ }),
552
+ shown.map((entry) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
553
+ value: entry.value,
554
+ children: entry.label
555
+ }, entry.value))
556
+ ]
557
+ }),
558
+ error !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
559
+ role: "alert",
560
+ children: error
561
+ })
562
+ ]
563
+ }), effort !== void 0 && /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("label", {
564
+ className: classes.field,
565
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
566
+ className: classes.label,
567
+ children: t("configuration.effort")
568
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("select", {
569
+ className: classes.select,
570
+ "aria-label": t("configuration.effort"),
571
+ value: effort.value,
572
+ disabled: disabled || options.length === 0,
573
+ onChange: (event) => {
574
+ effort.onChange(event.target.value);
575
+ },
576
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
577
+ value: "",
578
+ children: defaultEffort === void 0 ? t("configuration.effortDefault") : `${t("configuration.effortDefault")}(${defaultEffort})`
579
+ }), options.map((option) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("option", {
580
+ value: option.value,
581
+ children: option.label
582
+ }, option.value))]
583
+ })]
584
+ })]
585
+ });
586
+ }
587
+ //#endregion
588
+ //#region src/client/model-directory-scope.ts
589
+ /**
590
+ * Scope a harness's served directory to its curated model list (models.json):
591
+ * the list IS the invite picker's vocabulary, in the list's own order — a
592
+ * listed value the endpoint no longer serves stays as a bare row (the member
593
+ * dialog shows it the same way). No list support, or none configured, keeps
594
+ * the directory as served. Mirrors the member dialog's scoping rule so the
595
+ * invite picker and the member configuration show the same candidates.
596
+ * @param directory - the harness's served directory.
597
+ * @param list - the curated shortlist values, or null when unsupported.
598
+ * @returns the scoped directory.
599
+ */
600
+ function scopeDirectoryToList(directory, list) {
601
+ if (list === void 0 || list === null || list.length === 0) return directory;
602
+ const byValue = new Map(directory.entries.flatMap((entry) => entry.resolvedModel === void 0 ? [[entry.value, entry]] : [[entry.value, entry], [entry.resolvedModel, entry]]));
603
+ const entries = list.map((value) => byValue.get(value) ?? {
604
+ value,
605
+ label: value,
606
+ source: "configuration"
607
+ });
608
+ return {
609
+ ...directory,
610
+ entries
611
+ };
612
+ }
495
613
  //#endregion
496
614
  //#region \0dsh-css:src/client/AuthStatusDot.module.css.mjs
497
- const css$5 = ".OFjNUG_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.OFjNUG_dotOn{background:var(--dsw-alias-state-success-primary)}.OFjNUG_dotOff{background:var(--dsw-alias-state-error-primary)}.OFjNUG_dotPending{background:var(--dsw-alias-fill-l3)}";
498
- const tagId$5 = "@khorsheed/dsh-local-agent/AuthStatusDot.module.css";
499
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
615
+ const css$6 = ".OFjNUG_credentialDot{box-sizing:border-box;border-radius:50%;flex:none;width:8px;height:8px;display:inline-block}.OFjNUG_dotOn{background:var(--dsw-alias-state-success-primary)}.OFjNUG_dotOff{background:var(--dsw-alias-state-error-primary)}.OFjNUG_dotPending{background:var(--dsw-alias-fill-l3)}";
616
+ const tagId$6 = "@khorsheed/dsh-local-agent/AuthStatusDot.module.css";
617
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$6) + "]") === null) {
500
618
  const tag = document.createElement("style");
501
619
  tag.dataset.plugin = "@khorsheed/dsh-local-agent";
502
- tag.dataset.pluginCss = tagId$5;
503
- tag.textContent = css$5;
620
+ tag.dataset.pluginCss = tagId$6;
621
+ tag.textContent = css$6;
504
622
  document.head.appendChild(tag);
505
623
  }
506
624
  var AuthStatusDot_module_css_default = {
507
625
  "credentialDot": "OFjNUG_credentialDot",
508
626
  "dotOn": "OFjNUG_dotOn",
509
- "dotOff": "OFjNUG_dotOff",
510
- "dotPending": "OFjNUG_dotPending"
627
+ "dotPending": "OFjNUG_dotPending",
628
+ "dotOff": "OFjNUG_dotOff"
511
629
  };
512
630
  //#endregion
513
631
  //#region src/client/AuthStatusDot.tsx
@@ -654,6 +772,30 @@ window.__ModuleLoader__.load({
654
772
  })
655
773
  ]
656
774
  });
775
+ const IconThinkOutlineRegular = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
776
+ width: size,
777
+ height: size,
778
+ className,
779
+ viewBox: "0 0 16 16",
780
+ fill: "none",
781
+ xmlns: "http://www.w3.org/2000/svg",
782
+ "aria-hidden": "true",
783
+ strokeWidth: 1,
784
+ children: [
785
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
786
+ d: "M10.2854 5.71481C12.9673 8.39663 14.1182 11.5938 12.8562 12.8559C11.5942 14.1179 8.39706 12.9669 5.71518 10.2851C3.03333 7.60323 1.88236 4.40608 3.14441 3.14403C4.40644 1.882 7.6036 3.03297 10.2854 5.71481Z",
787
+ stroke: "currentColor"
788
+ }),
789
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
790
+ d: "M10.2854 10.2851C7.6036 12.9669 4.40644 14.1179 3.14441 12.8559C1.88236 11.5938 3.03333 8.39663 5.71518 5.71481C8.39706 3.03297 11.5942 1.882 12.8562 3.14403C14.1182 4.40608 12.9673 7.60323 10.2854 10.2851Z",
791
+ stroke: "currentColor"
792
+ }),
793
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)("path", {
794
+ d: "M8.86291 8.0002C8.86291 8.47549 8.47762 8.86087 8.00224 8.86087C7.52694 8.86087 7.1416 8.47549 7.1416 8.0002C7.1416 7.52485 7.52694 7.13953 8.00224 7.13953C8.47762 7.13953 8.86291 7.52485 8.86291 8.0002Z",
795
+ fill: "currentColor"
796
+ })
797
+ ]
798
+ });
657
799
  const IconTrashOutlineMedium = ({ size = 16, className }) => /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("svg", {
658
800
  width: size,
659
801
  height: size,
@@ -688,28 +830,28 @@ window.__ModuleLoader__.load({
688
830
  });
689
831
  //#endregion
690
832
  //#region \0dsh-css:src/client/FamilyCard.module.css.mjs
691
- const css$4 = ".Ki50NG_sections{flex-direction:column;gap:10px;display:flex}.Ki50NG_section{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;transition:border-color .16s,background .16s}.Ki50NG_section:hover{border-color:var(--dsw-alias-label-dimmed)}.Ki50NG_sectionOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.Ki50NG_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:12px 14px;display:flex}.Ki50NG_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Ki50NG_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Ki50NG_nameRow{align-items:center;gap:6px;display:flex}.Ki50NG_name{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600;line-height:1.4}.Ki50NG_cliMissing{color:var(--dsw-alias-label-tertiary);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;line-height:1.4}.Ki50NG_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.Ki50NG_chevronOpen{transform:rotate(180deg)}.Ki50NG_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.Ki50NG_empty{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5}";
692
- const tagId$4 = "@khorsheed/dsh-local-agent/FamilyCard.module.css";
693
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
833
+ const css$5 = ".Ki50NG_sections{flex-direction:column;gap:10px;display:flex}.Ki50NG_section{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-3);border-radius:12px;transition:border-color .16s,background .16s}.Ki50NG_section:hover{border-color:var(--dsw-alias-label-dimmed)}.Ki50NG_sectionOpen{background:var(--dsw-alias-bg-layer-2);border-color:var(--dsw-alias-label-dimmed)}.Ki50NG_header{appearance:none;width:100%;font:inherit;color:inherit;text-align:left;cursor:pointer;background:0 0;border:0;border-radius:12px;align-items:center;gap:12px;padding:12px 14px;display:flex}.Ki50NG_header:focus-visible{outline:2px solid var(--dsw-alias-brand-primary);outline-offset:-2px}.Ki50NG_headText{flex-direction:column;flex:1;gap:4px;min-width:0;display:flex}.Ki50NG_nameRow{align-items:center;gap:6px;display:flex}.Ki50NG_name{color:var(--dsw-alias-label-primary);font-size:14px;font-weight:600;line-height:1.4}.Ki50NG_cliMissing{color:var(--dsw-alias-label-tertiary);background:color-mix(in srgb, var(--dsw-alias-label-tertiary) 12%, transparent);border-radius:999px;flex:none;padding:1px 8px;font-size:11px;line-height:1.4}.Ki50NG_chevron{color:var(--dsw-alias-label-tertiary);flex:none;transition:transform .16s}.Ki50NG_chevronOpen{transform:rotate(180deg)}.Ki50NG_description{color:var(--dsw-alias-label-tertiary);font-size:13px;line-height:1.5}.Ki50NG_empty{color:var(--dsw-alias-label-tertiary);font-size:12px;line-height:1.5}";
834
+ const tagId$5 = "@khorsheed/dsh-local-agent/FamilyCard.module.css";
835
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$5) + "]") === null) {
694
836
  const tag = document.createElement("style");
695
837
  tag.dataset.plugin = "@khorsheed/dsh-local-agent";
696
- tag.dataset.pluginCss = tagId$4;
697
- tag.textContent = css$4;
838
+ tag.dataset.pluginCss = tagId$5;
839
+ tag.textContent = css$5;
698
840
  document.head.appendChild(tag);
699
841
  }
700
842
  var FamilyCard_module_css_default = {
701
- "section": "Ki50NG_section",
702
- "header": "Ki50NG_header",
703
- "nameRow": "Ki50NG_nameRow",
704
- "name": "Ki50NG_name",
705
843
  "cliMissing": "Ki50NG_cliMissing",
706
- "description": "Ki50NG_description",
844
+ "sectionOpen": "Ki50NG_sectionOpen",
845
+ "chevron": "Ki50NG_chevron",
707
846
  "chevronOpen": "Ki50NG_chevronOpen",
847
+ "name": "Ki50NG_name",
848
+ "section": "Ki50NG_section",
708
849
  "sections": "Ki50NG_sections",
709
- "empty": "Ki50NG_empty",
710
- "chevron": "Ki50NG_chevron",
850
+ "description": "Ki50NG_description",
711
851
  "headText": "Ki50NG_headText",
712
- "sectionOpen": "Ki50NG_sectionOpen"
852
+ "nameRow": "Ki50NG_nameRow",
853
+ "header": "Ki50NG_header",
854
+ "empty": "Ki50NG_empty"
713
855
  };
714
856
  //#endregion
715
857
  //#region src/client/FamilyCard.tsx
@@ -20117,10 +20259,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
20117
20259
  literal("failed"),
20118
20260
  literal("pending"),
20119
20261
  literal("applied"),
20120
- literal("locked"),
20121
- literal("applying"),
20262
+ literal("conflict"),
20122
20263
  literal("unsupported"),
20123
- literal("conflict")
20264
+ literal("locked"),
20265
+ literal("applying")
20124
20266
  ]),
20125
20267
  "error": string$1().optional()
20126
20268
  });
@@ -21234,10 +21376,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21234
21376
  literal("failed"),
21235
21377
  literal("pending"),
21236
21378
  literal("applied"),
21237
- literal("locked"),
21238
- literal("applying"),
21379
+ literal("conflict"),
21239
21380
  literal("unsupported"),
21240
- literal("conflict")
21381
+ literal("locked"),
21382
+ literal("applying")
21241
21383
  ]),
21242
21384
  "error": string$1().optional()
21243
21385
  });
@@ -21526,10 +21668,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
21526
21668
  "failed",
21527
21669
  "pending",
21528
21670
  "applied",
21529
- "locked",
21530
- "applying",
21671
+ "conflict",
21531
21672
  "unsupported",
21532
- "conflict"
21673
+ "locked",
21674
+ "applying"
21533
21675
  ]
21534
21676
  },
21535
21677
  "error": { "type": "string" }
@@ -26095,10 +26237,10 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
26095
26237
  "failed",
26096
26238
  "pending",
26097
26239
  "applied",
26098
- "locked",
26099
- "applying",
26240
+ "conflict",
26100
26241
  "unsupported",
26101
- "conflict"
26242
+ "locked",
26243
+ "applying"
26102
26244
  ]
26103
26245
  },
26104
26246
  "error": { "type": "string" }
@@ -26569,39 +26711,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
26569
26711
  }
26570
26712
  //#endregion
26571
26713
  //#region \0dsh-css:src/client/MemberComposer.module.css.mjs
26572
- const css$3 = "._7o4e8W_frame{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);min-height:54px;color:var(--dsw-alias-label-tertiary);border-radius:14px;justify-content:center;align-items:center;gap:8px;margin:0 24px 20px;padding:10px 16px;font-size:13px;line-height:20px;display:flex}._7o4e8W_frame strong{color:var(--dsw-alias-label-primary);font-weight:510}._7o4e8W_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}._7o4e8W_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);border:1px solid var(--dsw-alias-border-l2-darkmode-thin);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-shadow-lv2);border-radius:22px;flex-direction:column;gap:8px;padding-top:6px;font-size:16px;line-height:24px;display:flex}._7o4e8W_header{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:8px;padding:4px 16px 0;font-size:12px;line-height:18px;display:flex}._7o4e8W_running{color:var(--dsw-alias-label-caption)}._7o4e8W_input{box-sizing:border-box;resize:none;width:100%;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;padding:4px 12px 0 16px}._7o4e8W_input::placeholder{color:var(--dsw-alias-label-caption);user-select:none}._7o4e8W_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}._7o4e8W_row{justify-content:flex-end;align-items:center;gap:4px;padding:0 8px 6px;display:flex}._7o4e8W_modelPicker{align-items:center;min-width:0;display:flex;position:relative}._7o4e8W_modelChip{min-width:0;max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:flex}._7o4e8W_modelChip:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7o4e8W_modelChip:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3)}._7o4e8W_modelChip:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}._7o4e8W_modelChipLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._7o4e8W_chevron,._7o4e8W_chevronOpen{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}._7o4e8W_chevronOpen{transform:rotate(180deg)}._7o4e8W_modelMenu{z-index:10;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2));background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,var(--dsw-alias-bg-layer-1,#fff)));min-width:180px;max-height:240px;backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));box-shadow:var(--dsw-elevation-prominent,var(--dsw-shadow-lv3,0 0 1px 0 #0003, 0 0 4px 0 #00000005, 0 12px 32px 0 #00000014));border-radius:20px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);right:0;overflow-y:auto}._7o4e8W_modelItem,._7o4e8W_modelItemCurrent,._7o4e8W_modelItemReset{min-height:38px;color:var(--dsw-alias-label-primary);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 10px;font-size:14px;font-weight:500;line-height:20px;display:flex}._7o4e8W_modelItem:hover,._7o4e8W_modelItemCurrent:hover,._7o4e8W_modelItemReset:hover{background:var(--dsw-alias-interactive-bg-hover)}._7o4e8W_modelItemLabel{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}._7o4e8W_modelItemCheck{text-align:center;width:14px;color:var(--dsw-alias-label-secondary);flex:none}._7o4e8W_modelItemReset{color:var(--dsw-alias-label-tertiary);box-shadow:0 -1px 0 var(--dsw-alias-border-l2);border-radius:0 0 10px 10px;margin-top:2px;padding-top:7px}._7o4e8W_modelItemHint{min-height:38px;color:var(--dsw-alias-label-caption);white-space:nowrap;align-items:center;padding:6px 10px;font-size:14px;font-weight:500;line-height:20px;display:flex}._7o4e8W_dock{flex-direction:column;align-items:center;width:100%;display:flex}._7o4e8W_dockRow{text-align:center;width:100%;max-width:var(--dsh-chat-content-width);box-sizing:border-box;padding:4px calc(var(--dsh-composer-side-clearance) + 16px) 0;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;margin:0 auto;font-size:12px;line-height:20px;display:block;overflow:hidden}._7o4e8W_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid}._7o4e8W_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7o4e8W_primary:disabled{opacity:.4;cursor:default}._7o4e8W_error{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}";
26573
- const tagId$3 = "@khorsheed/dsh-local-agent/MemberComposer.module.css";
26574
- if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
26714
+ const css$4 = "._7o4e8W_frame{border:1px solid var(--dsw-alias-border-l2);background:var(--dsw-alias-bg-layer-1);min-height:54px;color:var(--dsw-alias-label-tertiary);border-radius:14px;justify-content:center;align-items:center;gap:8px;margin:0 24px 20px;padding:10px 16px;font-size:13px;line-height:20px;display:flex}._7o4e8W_frame strong{color:var(--dsw-alias-label-primary);font-weight:510}._7o4e8W_root{padding:0 var(--dsh-composer-side-clearance) 8px;flex-direction:column;align-items:center;display:flex}._7o4e8W_card{box-sizing:border-box;width:100%;max-width:var(--dsh-composer-card-max-width);--dsw-elevation-stroke-color:var(--dsw-alias-border-l2,#0000001a);border-radius:var(--dsw-radius-panel,22px);background:var(--dsw-specific-input-major);box-shadow:var(--dsw-elevation-soft,0 0 0 1px #0000001a, 0 4px 12px 0 #0000000a);font-size:var(--dsh-content-font-size,14px);line-height:calc(24px + var(--dsh-content-font-delta,0px));border:0;flex-direction:column;gap:8px;padding-top:6px;display:flex}._7o4e8W_header{color:var(--dsw-alias-label-tertiary);justify-content:space-between;align-items:center;gap:8px;padding:4px 14px 0;font-size:12px;line-height:18px;display:flex}._7o4e8W_running{color:var(--dsw-alias-label-caption)}._7o4e8W_input{box-sizing:border-box;resize:none;width:100%;font-family:var(--dsw-font-family);font-size:inherit;line-height:inherit;color:var(--dsw-alias-label-primary);caret-color:var(--dsw-alias-state-business-primary);background:0 0;border:none;outline:none;min-height:36px;padding:4px 8px 0 14px}._7o4e8W_input::placeholder{color:var(--dsw-alias-label-caption);user-select:none}._7o4e8W_input:disabled{color:var(--dsw-alias-label-tertiary);cursor:not-allowed}._7o4e8W_row{justify-content:flex-end;align-items:center;gap:4px;padding:0 8px 6px;display:flex}._7o4e8W_modelPicker{align-items:center;min-width:0;display:flex;position:relative}._7o4e8W_modelChip{min-width:0;max-width:220px;height:28px;color:var(--dsw-alias-label-secondary);white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:24px;outline:none;align-items:center;gap:4px;padding:0 4px 0 8px;font-size:13px;font-weight:500;line-height:20px;display:flex}._7o4e8W_modelChip:hover:not(:disabled){background:var(--dsw-alias-interactive-bg-hover)}._7o4e8W_modelChip:focus-visible{box-shadow:0 0 0 2px var(--dsw-alias-border-l3)}._7o4e8W_modelChip:disabled{color:var(--dsw-alias-label-dimmed);cursor:default}._7o4e8W_modelChipLabel{text-overflow:ellipsis;white-space:nowrap;min-width:0;overflow:hidden}._7o4e8W_chevron,._7o4e8W_chevronOpen{color:var(--dsw-alias-label-caption);flex:none;transition:transform .12s}._7o4e8W_chevronOpen{transform:rotate(180deg)}._7o4e8W_modelMenu{z-index:10;border:1px solid var(--dsw-alias-border-l2-darkmode-thin,var(--dsw-alias-border-l2));background:var(--dsw-specific-menu,var(--dsw-alias-bg-layer-2,var(--dsw-alias-bg-layer-1,#fff)));min-width:180px;max-height:240px;backdrop-filter:var(--dsw-menu-backdrop-filter,blur(20px));box-shadow:var(--dsw-elevation-prominent,var(--dsw-shadow-lv3,0 0 1px 0 #0003, 0 0 4px 0 #00000005, 0 12px 32px 0 #00000014));border-radius:20px;flex-direction:column;padding:4px;display:flex;position:absolute;bottom:calc(100% + 6px);right:0;overflow-y:auto}._7o4e8W_modelItem,._7o4e8W_modelItemCurrent,._7o4e8W_modelItemReset{min-height:38px;color:var(--dsw-alias-label-primary);text-align:left;white-space:nowrap;cursor:pointer;background:0 0;border:none;border-radius:10px;align-items:center;gap:8px;padding:6px 10px;font-size:14px;font-weight:500;line-height:20px;display:flex}._7o4e8W_modelItem:hover,._7o4e8W_modelItemCurrent:hover,._7o4e8W_modelItemReset:hover{background:var(--dsw-alias-interactive-bg-hover)}._7o4e8W_modelItemLabel{text-overflow:ellipsis;flex:1;min-width:0;overflow:hidden}._7o4e8W_modelItemCheck{text-align:center;width:14px;color:var(--dsw-alias-label-secondary);flex:none}._7o4e8W_modelItemReset{color:var(--dsw-alias-label-tertiary);box-shadow:0 -1px 0 var(--dsw-alias-border-l2);border-radius:0 0 10px 10px;margin-top:2px;padding-top:7px}._7o4e8W_modelItemHint{min-height:38px;color:var(--dsw-alias-label-caption);white-space:nowrap;align-items:center;padding:6px 10px;font-size:14px;font-weight:500;line-height:20px;display:flex}._7o4e8W_dock{flex-direction:column;align-items:center;width:100%;display:flex}._7o4e8W_dockRow{text-align:center;width:100%;max-width:var(--dsh-chat-content-width);box-sizing:border-box;padding:4px calc(var(--dsh-composer-side-clearance) + 16px) 0;color:var(--dsw-alias-label-tertiary);white-space:nowrap;text-overflow:ellipsis;margin:0 auto;font-size:12px;line-height:20px;display:block;overflow:hidden}._7o4e8W_primary{background:var(--dsw-alias-button-info-fill);color:#fff;cursor:pointer;border:none;border-radius:999px;flex:none;place-items:center;width:34px;height:34px;transition:background-color .1s;display:grid}._7o4e8W_primary:hover:not(:disabled){background:var(--dsw-alias-button-info-hover)}._7o4e8W_primary:disabled{opacity:.4;cursor:default}._7o4e8W_error{width:100%;max-width:var(--dsh-composer-card-max-width);background:var(--dsw-alias-interactive-bg-hover-danger);color:var(--dsw-alias-state-error-primary);border-radius:8px;margin-bottom:6px;padding:4px 8px;font-size:12px;line-height:18px}";
26715
+ const tagId$4 = "@khorsheed/dsh-local-agent/MemberComposer.module.css";
26716
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$4) + "]") === null) {
26575
26717
  const tag = document.createElement("style");
26576
26718
  tag.dataset.plugin = "@khorsheed/dsh-local-agent";
26577
- tag.dataset.pluginCss = tagId$3;
26578
- tag.textContent = css$3;
26719
+ tag.dataset.pluginCss = tagId$4;
26720
+ tag.textContent = css$4;
26579
26721
  document.head.appendChild(tag);
26580
26722
  }
26581
26723
  var MemberComposer_module_css_default = {
26582
- "modelItemReset": "_7o4e8W_modelItemReset",
26583
- "modelPicker": "_7o4e8W_modelPicker",
26584
- "card": "_7o4e8W_card",
26585
- "modelItem": "_7o4e8W_modelItem",
26586
- "dockRow": "_7o4e8W_dockRow",
26587
- "primary": "_7o4e8W_primary",
26588
- "header": "_7o4e8W_header",
26589
- "frame": "_7o4e8W_frame",
26590
- "modelChip": "_7o4e8W_modelChip",
26591
- "modelItemLabel": "_7o4e8W_modelItemLabel",
26592
- "error": "_7o4e8W_error",
26593
26724
  "modelItemCurrent": "_7o4e8W_modelItemCurrent",
26594
- "modelItemHint": "_7o4e8W_modelItemHint",
26595
- "row": "_7o4e8W_row",
26596
- "root": "_7o4e8W_root",
26597
- "chevronOpen": "_7o4e8W_chevronOpen",
26598
26725
  "chevron": "_7o4e8W_chevron",
26599
- "modelItemCheck": "_7o4e8W_modelItemCheck",
26600
- "modelChipLabel": "_7o4e8W_modelChipLabel",
26726
+ "chevronOpen": "_7o4e8W_chevronOpen",
26601
26727
  "modelMenu": "_7o4e8W_modelMenu",
26728
+ "frame": "_7o4e8W_frame",
26602
26729
  "input": "_7o4e8W_input",
26730
+ "modelPicker": "_7o4e8W_modelPicker",
26731
+ "modelItemCheck": "_7o4e8W_modelItemCheck",
26732
+ "primary": "_7o4e8W_primary",
26733
+ "row": "_7o4e8W_row",
26734
+ "header": "_7o4e8W_header",
26735
+ "modelChipLabel": "_7o4e8W_modelChipLabel",
26736
+ "card": "_7o4e8W_card",
26737
+ "modelChip": "_7o4e8W_modelChip",
26603
26738
  "dock": "_7o4e8W_dock",
26604
- "running": "_7o4e8W_running"
26739
+ "dockRow": "_7o4e8W_dockRow",
26740
+ "root": "_7o4e8W_root",
26741
+ "modelItemHint": "_7o4e8W_modelItemHint",
26742
+ "error": "_7o4e8W_error",
26743
+ "modelItemReset": "_7o4e8W_modelItemReset",
26744
+ "modelItem": "_7o4e8W_modelItem",
26745
+ "running": "_7o4e8W_running",
26746
+ "modelItemLabel": "_7o4e8W_modelItemLabel"
26605
26747
  };
26606
26748
  //#endregion
26607
26749
  //#region src/client/MemberComposer.tsx
@@ -27026,6 +27168,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27026
27168
  "configuration.details": "模型目录详情",
27027
27169
  "configuration.model": "模型",
27028
27170
  "configuration.effort": "推理强度",
27171
+ "configuration.effortDefault": "默认",
27029
27172
  "configuration.inherit": "继承成员创建配置",
27030
27173
  "configuration.default": "跟随 harness 默认值",
27031
27174
  "configuration.search": "搜索模型名称或 ID",
@@ -27057,7 +27200,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27057
27200
  "configuration.cancelled": "已接收撤销请求,正在恢复配置。",
27058
27201
  "configuration.failed": "配置操作失败,请检查原因后重试。",
27059
27202
  "stream.thinking": "思考中",
27060
- "stream.writing": "正在生成",
27061
27203
  "stream.recovering": "部分记录,等待实时连接",
27062
27204
  "stream.copy": "复制",
27063
27205
  "stream.copied": "已复制",
@@ -27162,6 +27304,7 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27162
27304
  "configuration.details": "Model directory details",
27163
27305
  "configuration.model": "Model",
27164
27306
  "configuration.effort": "Reasoning effort",
27307
+ "configuration.effortDefault": "Default",
27165
27308
  "configuration.inherit": "Inherit member configuration",
27166
27309
  "configuration.default": "Follow harness defaults",
27167
27310
  "configuration.search": "Search model names or IDs",
@@ -27193,7 +27336,6 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27193
27336
  "configuration.cancelled": "Cancellation accepted; restoring configuration.",
27194
27337
  "configuration.failed": "Configuration failed; check the reason before retrying.",
27195
27338
  "stream.thinking": "Thinking",
27196
- "stream.writing": "Writing",
27197
27339
  "stream.recovering": "Partial record, awaiting live connection",
27198
27340
  "stream.copy": "Copy",
27199
27341
  "stream.copied": "Copied",
@@ -27328,6 +27470,28 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27328
27470
  }
27329
27471
  };
27330
27472
  //#endregion
27473
+ //#region \0dsh-css:src/client/MemberLiveOutput.module.css.mjs
27474
+ const css$3 = ".V1MHtG_item{min-width:0}.V1MHtG_item+.V1MHtG_item{margin-top:4px}.V1MHtG_thinkRow{overflow:hidden}.V1MHtG_leading{flex-shrink:0}.V1MHtG_title{font-weight:400}.V1MHtG_separator{background:var(--dsw-alias-label-caption,#7f7f7f99);border-radius:1px;flex:none;width:2px;height:2px;margin:0 8px}.V1MHtG_summary{min-width:0;font-size:var(--dsh-content-font-size-secondary,13px);line-height:calc(20px + var(--dsh-content-font-delta-secondary,0px));white-space:nowrap;flex:auto;overflow:hidden;mask-image:linear-gradient(90deg,#000 calc(100% - 48px),#0000)}.V1MHtG_thinkBody{padding:4px 0 4px calc(22px + var(--dsh-content-font-delta,0px));min-width:0;color:var(--dsw-alias-label-secondary,#5a5a5ae6);font-size:var(--dsh-content-font-size-secondary,13px)}.V1MHtG_text{min-width:0}.V1MHtG_recovering{color:var(--dsw-alias-label-tertiary,#7f7f7fcc);font-size:11px}";
27475
+ const tagId$3 = "@khorsheed/dsh-local-agent/MemberLiveOutput.module.css";
27476
+ if (typeof document !== "undefined" && document.querySelector("style[data-plugin-css=" + JSON.stringify(tagId$3) + "]") === null) {
27477
+ const tag = document.createElement("style");
27478
+ tag.dataset.plugin = "@khorsheed/dsh-local-agent";
27479
+ tag.dataset.pluginCss = tagId$3;
27480
+ tag.textContent = css$3;
27481
+ document.head.appendChild(tag);
27482
+ }
27483
+ var MemberLiveOutput_module_css_default = {
27484
+ "thinkRow": "V1MHtG_thinkRow",
27485
+ "text": "V1MHtG_text",
27486
+ "thinkBody": "V1MHtG_thinkBody",
27487
+ "separator": "V1MHtG_separator",
27488
+ "item": "V1MHtG_item",
27489
+ "title": "V1MHtG_title",
27490
+ "leading": "V1MHtG_leading",
27491
+ "recovering": "V1MHtG_recovering",
27492
+ "summary": "V1MHtG_summary"
27493
+ };
27494
+ //#endregion
27331
27495
  //#region src/client/MemberLiveNode.tsx
27332
27496
  /** Generation-time text rendered through the public Markdown component. */
27333
27497
  function MemberLiveNode({ node, outputs, t }) {
@@ -27371,6 +27535,60 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27371
27535
  * The wall-clock subtraction is meaningful only when browser and host share a clock.
27372
27536
  * Keep independent callbacks across updates so slow paints cannot disappear from P95.
27373
27537
  */
27538
+ /** The latest completed paragraph's first line — the host think row's running summary. */
27539
+ function latestParagraphLine(text) {
27540
+ let summary = "";
27541
+ let start = 0;
27542
+ const separator = /\r?\n(?:[\t ]*\r?\n)+/g;
27543
+ while (true) {
27544
+ const next = separator.exec(text);
27545
+ const end = next === null ? text.length : next.index + next[0].indexOf("\n");
27546
+ const newline = text.indexOf("\n", start);
27547
+ if (newline !== -1 && newline <= end) {
27548
+ const candidate = text.slice(start, newline).trim();
27549
+ if (candidate !== "") summary = candidate;
27550
+ }
27551
+ if (next === null) return summary;
27552
+ start = next.index + next[0].length;
27553
+ }
27554
+ }
27555
+ /**
27556
+ * A streaming think block drawn as the host's own think row: collapsed to one
27557
+ * line (icon, title, the latest paragraph's first line shimmering), the full
27558
+ * text on expand — the same row the settled message shows once it lands.
27559
+ */
27560
+ function LiveReasoning({ text, labels, title }) {
27561
+ const [open, setOpen] = (0, react.useState)(false);
27562
+ const summary = (0, react.useMemo)(() => (latestParagraphLine(text) || text.split("\n", 1)[0] || "").replaceAll("**", ""), [text]);
27563
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.DisclosureRow, {
27564
+ rowClassName: MemberLiveOutput_module_css_default.thinkRow,
27565
+ leadingClassName: MemberLiveOutput_module_css_default.leading,
27566
+ titleClassName: MemberLiveOutput_module_css_default.title,
27567
+ icon: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(IconThinkOutlineRegular, { size: 14 }),
27568
+ title,
27569
+ running: true,
27570
+ open,
27571
+ expandable: true,
27572
+ expandOnRowClick: true,
27573
+ onToggle: () => {
27574
+ setOpen((value) => !value);
27575
+ },
27576
+ collapsedContent: open || summary === "" ? void 0 : /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27577
+ className: MemberLiveOutput_module_css_default.separator,
27578
+ "aria-hidden": true
27579
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27580
+ className: MemberLiveOutput_module_css_default.summary,
27581
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.TextShimmer, { children: summary })
27582
+ })] }),
27583
+ children: open ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
27584
+ className: MemberLiveOutput_module_css_default.thinkBody,
27585
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
27586
+ text,
27587
+ labels
27588
+ })
27589
+ }) : void 0
27590
+ });
27591
+ }
27374
27592
  function StreamText({ id, kind, text, receivedAt, recovering, sessionId, turn, revision, baseline, surface, diagnostics, t }) {
27375
27593
  const element = (0, react.useRef)(null);
27376
27594
  const samples = (0, react.useRef)([]);
@@ -27423,19 +27641,31 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27423
27641
  turn,
27424
27642
  surface
27425
27643
  ]);
27644
+ const labels = {
27645
+ code: {
27646
+ copyLabel: t("stream.copy"),
27647
+ copiedLabel: t("stream.copied")
27648
+ },
27649
+ footnotes: t("stream.footnotes")
27650
+ };
27426
27651
  return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("section", {
27427
27652
  ref: element,
27653
+ className: MemberLiveOutput_module_css_default.item,
27428
27654
  "data-member-live": id,
27429
27655
  "data-live-received-at": receivedAt,
27430
- children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("small", { children: [kind === "think" ? t("stream.thinking") : t("stream.writing"), recovering ? ` · ${t("stream.recovering")}` : ""] }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
27656
+ children: [kind === "think" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(LiveReasoning, {
27431
27657
  text,
27432
- labels: {
27433
- code: {
27434
- copyLabel: t("stream.copy"),
27435
- copiedLabel: t("stream.copied")
27436
- },
27437
- footnotes: t("stream.footnotes")
27438
- }
27658
+ labels,
27659
+ title: t("stream.thinking")
27660
+ }) : /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
27661
+ className: MemberLiveOutput_module_css_default.text,
27662
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(_deepseek_ai_dsh_client_ui_primitives.MarkdownText, {
27663
+ text,
27664
+ labels
27665
+ })
27666
+ }), recovering && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
27667
+ className: MemberLiveOutput_module_css_default.recovering,
27668
+ children: t("stream.recovering")
27439
27669
  })]
27440
27670
  });
27441
27671
  }
@@ -27653,30 +27883,30 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27653
27883
  document.head.appendChild(tag);
27654
27884
  }
27655
27885
  var ProviderAuthBlock_module_css_default = {
27656
- "logoutButton": "On5p7W_logoutButton",
27657
- "dotOn": "On5p7W_dotOn",
27658
- "rowName": "On5p7W_rowName",
27659
- "rosterError": "On5p7W_rosterError",
27660
- "retryButton": "On5p7W_retryButton",
27661
- "loginPrompt": "On5p7W_loginPrompt",
27662
- "section": "On5p7W_section",
27663
- "credentialDot": "On5p7W_credentialDot",
27886
+ "rowCard": "On5p7W_rowCard",
27664
27887
  "rows": "On5p7W_rows",
27888
+ "rowPending": "On5p7W_rowPending",
27889
+ "retryButton": "On5p7W_retryButton",
27890
+ "rosterError": "On5p7W_rosterError",
27665
27891
  "rowIdentity": "On5p7W_rowIdentity",
27666
- "dotOff": "On5p7W_dotOff",
27892
+ "section": "On5p7W_section",
27893
+ "dotOn": "On5p7W_dotOn",
27667
27894
  "status": "On5p7W_status",
27895
+ "rowTag": "On5p7W_rowTag",
27896
+ "logoutButton": "On5p7W_logoutButton",
27897
+ "dotOff": "On5p7W_dotOff",
27668
27898
  "codeInput": "On5p7W_codeInput",
27669
- "rowActions": "On5p7W_rowActions",
27670
- "openPage": "On5p7W_openPage",
27671
27899
  "loginButton": "On5p7W_loginButton",
27672
- "rowTag": "On5p7W_rowTag",
27673
27900
  "title": "On5p7W_title",
27901
+ "rowHead": "On5p7W_rowHead",
27902
+ "openPage": "On5p7W_openPage",
27674
27903
  "intro": "On5p7W_intro",
27675
- "rowCard": "On5p7W_rowCard",
27676
- "dotPending": "On5p7W_dotPending",
27904
+ "loginPrompt": "On5p7W_loginPrompt",
27677
27905
  "promptText": "On5p7W_promptText",
27678
- "rowHead": "On5p7W_rowHead",
27679
- "rowPending": "On5p7W_rowPending"
27906
+ "credentialDot": "On5p7W_credentialDot",
27907
+ "rowName": "On5p7W_rowName",
27908
+ "rowActions": "On5p7W_rowActions",
27909
+ "dotPending": "On5p7W_dotPending"
27680
27910
  };
27681
27911
  //#endregion
27682
27912
  //#region src/client/ProviderAuthBlock.tsx
@@ -27955,39 +28185,39 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
27955
28185
  document.head.appendChild(tag);
27956
28186
  }
27957
28187
  var ModelListSection_module_css_default = {
27958
- "hint": "_4eeJ7W_hint",
28188
+ "modelSave": "_4eeJ7W_modelSave",
28189
+ "modelList": "_4eeJ7W_modelList",
27959
28190
  "modelAdd": "_4eeJ7W_modelAdd",
28191
+ "modelRow": "_4eeJ7W_modelRow",
28192
+ "dialogBackdrop": "_4eeJ7W_dialogBackdrop",
28193
+ "modelRowValue": "_4eeJ7W_modelRowValue",
28194
+ "modelDelete": "_4eeJ7W_modelDelete",
28195
+ "dialogItemAdded": "_4eeJ7W_dialogItemAdded",
27960
28196
  "info": "_4eeJ7W_info",
28197
+ "dialogSelectAll": "_4eeJ7W_dialogSelectAll",
27961
28198
  "dialogActions": "_4eeJ7W_dialogActions",
27962
28199
  "dialogConfirm": "_4eeJ7W_dialogConfirm",
27963
- "block": "_4eeJ7W_block",
27964
- "saved": "_4eeJ7W_saved",
27965
28200
  "modelRowLabel": "_4eeJ7W_modelRowLabel",
27966
- "dialogItemAdded": "_4eeJ7W_dialogItemAdded",
27967
- "blockTitle": "_4eeJ7W_blockTitle",
27968
28201
  "modelDrag": "_4eeJ7W_modelDrag",
28202
+ "row": "_4eeJ7W_row",
28203
+ "dialogToolbar": "_4eeJ7W_dialogToolbar",
28204
+ "blockTitle": "_4eeJ7W_blockTitle",
27969
28205
  "errorText": "_4eeJ7W_errorText",
27970
- "dialogItemValue": "_4eeJ7W_dialogItemValue",
27971
- "modelRow": "_4eeJ7W_modelRow",
27972
- "dialogClose": "_4eeJ7W_dialogClose",
27973
- "dialogList": "_4eeJ7W_dialogList",
27974
- "dialogHead": "_4eeJ7W_dialogHead",
27975
- "modelInput": "_4eeJ7W_modelInput",
27976
- "modelRowValue": "_4eeJ7W_modelRowValue",
27977
- "dialogHint": "_4eeJ7W_dialogHint",
27978
28206
  "dialog": "_4eeJ7W_dialog",
27979
- "dialogSelectAll": "_4eeJ7W_dialogSelectAll",
27980
- "modelDelete": "_4eeJ7W_modelDelete",
27981
- "dialogBackdrop": "_4eeJ7W_dialogBackdrop",
27982
- "modelList": "_4eeJ7W_modelList",
27983
- "modelDefaultChip": "_4eeJ7W_modelDefaultChip",
27984
- "modelRowDragging": "_4eeJ7W_modelRowDragging",
27985
- "dialogTitle": "_4eeJ7W_dialogTitle",
27986
- "row": "_4eeJ7W_row",
28207
+ "modelInput": "_4eeJ7W_modelInput",
28208
+ "hint": "_4eeJ7W_hint",
28209
+ "dialogList": "_4eeJ7W_dialogList",
27987
28210
  "dialogItem": "_4eeJ7W_dialogItem",
27988
- "modelSave": "_4eeJ7W_modelSave",
27989
28211
  "dialogItemLabel": "_4eeJ7W_dialogItemLabel",
27990
- "dialogToolbar": "_4eeJ7W_dialogToolbar"
28212
+ "dialogClose": "_4eeJ7W_dialogClose",
28213
+ "block": "_4eeJ7W_block",
28214
+ "modelRowDragging": "_4eeJ7W_modelRowDragging",
28215
+ "dialogTitle": "_4eeJ7W_dialogTitle",
28216
+ "dialogItemValue": "_4eeJ7W_dialogItemValue",
28217
+ "saved": "_4eeJ7W_saved",
28218
+ "modelDefaultChip": "_4eeJ7W_modelDefaultChip",
28219
+ "dialogHint": "_4eeJ7W_dialogHint",
28220
+ "dialogHead": "_4eeJ7W_dialogHead"
27991
28221
  };
27992
28222
  //#endregion
27993
28223
  //#region src/client/ModelListSection.tsx
@@ -28359,19 +28589,19 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28359
28589
  document.head.appendChild(tag);
28360
28590
  }
28361
28591
  var MemberInboxView_module_css_default = {
28362
- "iconAction": "Qhm0ea_iconAction",
28363
- "preview": "Qhm0ea_preview",
28364
- "toggle": "Qhm0ea_toggle",
28365
- "header": "Qhm0ea_header",
28366
- "notice": "Qhm0ea_notice",
28367
- "list": "Qhm0ea_list",
28368
- "recovery": "Qhm0ea_recovery",
28369
- "root": "Qhm0ea_root",
28370
28592
  "panel": "Qhm0ea_panel",
28371
28593
  "reconcile": "Qhm0ea_reconcile",
28594
+ "lead": "Qhm0ea_lead",
28372
28595
  "row": "Qhm0ea_row",
28596
+ "header": "Qhm0ea_header",
28597
+ "root": "Qhm0ea_root",
28598
+ "list": "Qhm0ea_list",
28599
+ "iconAction": "Qhm0ea_iconAction",
28600
+ "recovery": "Qhm0ea_recovery",
28373
28601
  "action": "Qhm0ea_action",
28374
- "lead": "Qhm0ea_lead"
28602
+ "toggle": "Qhm0ea_toggle",
28603
+ "notice": "Qhm0ea_notice",
28604
+ "preview": "Qhm0ea_preview"
28375
28605
  };
28376
28606
  //#endregion
28377
28607
  //#region src/client/MemberInboxView.tsx
@@ -28582,8 +28812,18 @@ Set the \`cycles\` parameter to \`"ref"\` to resolve cyclical schemas with defs.
28582
28812
  const directoryFace = (name) => {
28583
28813
  let face = directoryFaces.get(name);
28584
28814
  if (face === void 0) directoryFaces.set(name, face = {
28585
- read: async (refresh) => unwrap(await gateway.modelDirectory(name, void 0, refresh)),
28586
- follow: (signal) => gateway.followModelDirectory(name, void 0, signal)
28815
+ read: async (refresh) => {
28816
+ const directory = unwrap(await gateway.modelDirectory(name, void 0, refresh));
28817
+ return directory === null ? null : scopeDirectoryToList(directory, unwrap(await gateway.modelList(name)));
28818
+ },
28819
+ follow: async function* (signal) {
28820
+ let list = unwrap(await gateway.modelList(name));
28821
+ for await (const directory of gateway.followModelDirectory(name, void 0, signal)) {
28822
+ if (signal.aborted) return;
28823
+ list = unwrap(await gateway.modelList(name));
28824
+ yield scopeDirectoryToList(directory, list);
28825
+ }
28826
+ }
28587
28827
  });
28588
28828
  return face;
28589
28829
  };