@design.estate/dees-catalog 3.104.0 → 4.0.1

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.
@@ -172563,19 +172563,29 @@ var demoFunc54 = /* @__PURE__ */ __name(() => b2`
172563
172563
  </style>
172564
172564
  <div class="reasoningDemo">
172565
172565
  <dees-harness-reasoning
172566
- .reasoningPart=${{
172567
- id: "r1",
172568
- text: "The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.",
172569
- startedAt: Date.now() - 4200,
172570
- endedAt: Date.now()
172571
- }}
172566
+ .reasoningParts=${[
172567
+ {
172568
+ id: "r1",
172569
+ text: "Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.",
172570
+ startedAt: Date.now() - 9200,
172571
+ endedAt: Date.now() - 5200
172572
+ },
172573
+ {
172574
+ id: "r2",
172575
+ text: "The fixture predates the schema change; regenerating it should settle both assertions.",
172576
+ startedAt: Date.now() - 5200,
172577
+ endedAt: Date.now() - 4100
172578
+ }
172579
+ ]}
172572
172580
  ></dees-harness-reasoning>
172573
172581
  <dees-harness-reasoning
172574
- .reasoningPart=${{
172575
- id: "r2",
172576
- text: "Considering the tradeoffs between the two migration paths",
172577
- startedAt: Date.now() - 1500
172578
- }}
172582
+ .reasoningParts=${[
172583
+ {
172584
+ id: "r3",
172585
+ text: "Considering the tradeoffs between the two migration paths",
172586
+ startedAt: Date.now() - 1500
172587
+ }
172588
+ ]}
172579
172589
  ></dees-harness-reasoning>
172580
172590
  </div>
172581
172591
  `, "demoFunc");
@@ -172584,22 +172594,39 @@ var demoFunc54 = /* @__PURE__ */ __name(() => b2`
172584
172594
  init_dist_ts25();
172585
172595
  init_theme();
172586
172596
  init_dees_icon();
172587
- var _expanded_dec, _reasoningPart_dec, _a76, _DeesHarnessReasoning_decorators, _init77, _reasoningPart, _expanded;
172597
+ var _expanded_dec, _reasoningParts_dec, _a76, _DeesHarnessReasoning_decorators, _init77, _reasoningParts, _expanded;
172588
172598
  _DeesHarnessReasoning_decorators = [customElement("dees-harness-reasoning")];
172589
- var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElement, _reasoningPart_dec = [n5({ attribute: false })], _expanded_dec = [r5()], _a76) {
172599
+ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElement, _reasoningParts_dec = [n5({ attribute: false })], _expanded_dec = [r5()], _a76) {
172590
172600
  constructor() {
172591
172601
  super(...arguments);
172592
- __privateAdd(this, _reasoningPart, __runInitializers(_init77, 8, this, { id: "", text: "" })), __runInitializers(_init77, 11, this);
172602
+ __privateAdd(this, _reasoningParts, __runInitializers(_init77, 8, this, [])), __runInitializers(_init77, 11, this);
172593
172603
  __privateAdd(this, _expanded, __runInitializers(_init77, 12, this)), __runInitializers(_init77, 15, this);
172594
172604
  }
172595
172605
  get isStreaming() {
172596
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
172606
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
172597
172607
  }
172598
172608
  get isOpen() {
172599
172609
  return this.expanded ?? this.isStreaming;
172600
172610
  }
172611
+ /** All parts joined into the one full trace the expanded body shows. */
172612
+ get fullText() {
172613
+ return this.reasoningParts.map((part) => part.text.trim()).filter((text8) => text8.length > 0).join("\n\n");
172614
+ }
172615
+ /**
172616
+ * One line for the collapsed state: the latest line while streaming (live
172617
+ * progress), the first line once finished (the trace's own summary).
172618
+ */
172619
+ get previewLine() {
172620
+ const lines = this.fullText.split("\n").map((line2) => line2.trim()).filter((line2) => line2.length > 0);
172621
+ if (lines.length === 0) return "";
172622
+ const line = this.isStreaming ? lines[lines.length - 1] : lines[0];
172623
+ return line.replace(/^#+\s*/, "").replace(/\*\*([^*]+)\*\*/g, "$1").replace(/\*([^*]+)\*/g, "$1").replace(/`([^`]+)`/g, "$1");
172624
+ }
172601
172625
  render() {
172602
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
172626
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
172627
+ const endedAt = this.isStreaming ? void 0 : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
172628
+ const duration = harnessFormatDuration(startedAt, endedAt);
172629
+ const preview = this.previewLine;
172603
172630
  return b2`
172604
172631
  <div class="reasoning">
172605
172632
  <button
@@ -172613,14 +172640,15 @@ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElem
172613
172640
  <span class="chevron ${this.isOpen ? "open" : ""}">
172614
172641
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
172615
172642
  </span>
172616
- <span class=${this.isStreaming ? "thinkingDots" : ""}>
172643
+ <span class="label ${this.isStreaming ? "thinkingDots" : ""}">
172617
172644
  ${this.isStreaming ? "Thinking" : "Thought"}
172618
172645
  </span>
172646
+ ${!this.isOpen && preview ? b2`<span class="preview">${preview}</span>` : ""}
172619
172647
  ${duration ? b2`<span class="duration">${duration}</span>` : ""}
172620
172648
  </button>
172621
172649
  <div class="bodyWrap ${this.isOpen ? "open" : ""}" aria-hidden=${this.isOpen ? "false" : "true"}>
172622
172650
  <div class="bodyClip">
172623
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? "Waiting for reasoning\u2026" : "No reasoning emitted.")}</pre>
172651
+ <pre class="body">${this.fullText || (this.isStreaming ? "Waiting for reasoning\u2026" : "No reasoning emitted.")}</pre>
172624
172652
  </div>
172625
172653
  </div>
172626
172654
  </div>
@@ -172628,9 +172656,9 @@ var _DeesHarnessReasoning = class _DeesHarnessReasoning extends (_a76 = DeesElem
172628
172656
  }
172629
172657
  };
172630
172658
  _init77 = __decoratorStart(_a76);
172631
- _reasoningPart = new WeakMap();
172659
+ _reasoningParts = new WeakMap();
172632
172660
  _expanded = new WeakMap();
172633
- __decorateElement(_init77, 4, "reasoningPart", _reasoningPart_dec, _DeesHarnessReasoning, _reasoningPart);
172661
+ __decorateElement(_init77, 4, "reasoningParts", _reasoningParts_dec, _DeesHarnessReasoning, _reasoningParts);
172634
172662
  __decorateElement(_init77, 4, "expanded", _expanded_dec, _DeesHarnessReasoning, _expanded);
172635
172663
  _DeesHarnessReasoning = __decorateElement(_init77, 0, "DeesHarnessReasoning", _DeesHarnessReasoning_decorators, _DeesHarnessReasoning);
172636
172664
  __name(_DeesHarnessReasoning, "DeesHarnessReasoning");
@@ -172715,6 +172743,7 @@ __publicField(_DeesHarnessReasoning, "styles", [
172715
172743
  .chevron {
172716
172744
  display: grid;
172717
172745
  place-items: center;
172746
+ flex: 0 0 auto;
172718
172747
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
172719
172748
  }
172720
172749
 
@@ -172722,8 +172751,23 @@ __publicField(_DeesHarnessReasoning, "styles", [
172722
172751
  transform: rotate(90deg);
172723
172752
  }
172724
172753
 
172754
+ .label {
172755
+ flex: 0 0 auto;
172756
+ }
172757
+
172758
+ .preview {
172759
+ min-width: 0;
172760
+ overflow: hidden;
172761
+ text-overflow: ellipsis;
172762
+ white-space: nowrap;
172763
+ color: var(--dees-color-text-muted);
172764
+ font-weight: 400;
172765
+ font-style: italic;
172766
+ }
172767
+
172725
172768
  .duration {
172726
172769
  margin-left: auto;
172770
+ flex: 0 0 auto;
172727
172771
  color: var(--dees-color-text-muted);
172728
172772
  font-weight: 400;
172729
172773
  }
@@ -173861,9 +173905,7 @@ var _DeesHarnessMessage = class _DeesHarnessMessage extends (_a80 = DeesElement,
173861
173905
  ` : ""}
173862
173906
  ${message2.reasoning?.length ? b2`
173863
173907
  <div class="reasoningStack">
173864
- ${message2.reasoning.map(
173865
- (part) => b2`<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`
173866
- )}
173908
+ <dees-harness-reasoning .reasoningParts=${message2.reasoning}></dees-harness-reasoning>
173867
173909
  </div>
173868
173910
  ` : ""}
173869
173911
  ${message2.attachments?.length ? this.renderAttachments(message2.attachments) : ""}
@@ -198977,7 +199019,7 @@ init_group_runtime();
198977
199019
  // ts_web/00_commitinfo_data.ts
198978
199020
  var commitinfo = {
198979
199021
  name: "@design.estate/dees-catalog",
198980
- version: "3.104.0",
199022
+ version: "4.0.1",
198981
199023
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
198982
199024
  };
198983
199025
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.104.0',
6
+ version: '4.0.1',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  };
9
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxTQUFTO0lBQ2xCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -402,7 +402,7 @@ let DeesHarnessMessage = (() => {
402
402
  ${message.reasoning?.length
403
403
  ? html `
404
404
  <div class="reasoningStack">
405
- ${message.reasoning.map((part) => html `<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`)}
405
+ <dees-harness-reasoning .reasoningParts=${message.reasoning}></dees-harness-reasoning>
406
406
  </div>
407
407
  `
408
408
  : ''}
@@ -548,4 +548,4 @@ let DeesHarnessMessage = (() => {
548
548
  return DeesHarnessMessage = _classThis;
549
549
  })();
550
550
  export { DeesHarnessMessage };
551
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1tZXNzYWdlL2RlZXMtaGFybmVzcy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUczRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8scURBQXFELENBQUM7QUFDN0QsT0FBTyxxREFBcUQsQ0FBQztBQUM3RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7OztHQUtHO0lBRVUsa0JBQWtCOzRCQUQ5QixhQUFhLENBQUMsc0JBQXNCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FBbkIsU0FBUSxXQUFXOzs7O21DQUloRCxR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
551
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLW1lc3NhZ2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1tZXNzYWdlL2RlZXMtaGFybmVzcy1tZXNzYWdlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFDMUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQUN0RCxPQUFPLEVBQUUsbUJBQW1CLEVBQUUsaUJBQWlCLEVBQUUsTUFBTSxtQkFBbUIsQ0FBQztBQUczRSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsTUFBTSxvQkFBb0IsQ0FBQztBQUM3RCxPQUFPLEVBQUUsZUFBZSxFQUFFLGNBQWMsRUFBRSxNQUFNLHdCQUF3QixDQUFDO0FBQ3pFLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSx5QkFBeUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3RGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBQ2xFLE9BQU8scURBQXFELENBQUM7QUFDN0QsT0FBTyxxREFBcUQsQ0FBQztBQUM3RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELE1BQU0sdUJBQXVCLEdBQUcsR0FBRyxDQUFDO0FBRXBDOzs7OztHQUtHO0lBRVUsa0JBQWtCOzRCQUQ5QixhQUFhLENBQUMsc0JBQXNCLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztrQ0FBbkIsU0FBUSxXQUFXOzs7O21DQUloRCxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7b0NBRzlCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt5Q0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO2tEQUkzQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7d0NBRzNCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzt5Q0FROUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2dEQUc5QixLQUFLLEVBQUU7WUF2QlIsMEtBQVMsT0FBTyw2QkFBUCxPQUFPLHlGQUEwRTtZQUcxRiw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQWlCO1lBR2xDLDRMQUFTLGFBQWEsNkJBQWIsYUFBYSxxR0FBa0I7WUFJeEMsdU5BQVMsc0JBQXNCLDZCQUF0QixzQkFBc0IsdUhBQWlCO1lBR2hELHlMQUFTLFlBQVksNkJBQVosWUFBWSxtR0FBNEQ7WUFRakYsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUFrQjtZQUd4QyxpTkFBUyxvQkFBb0IsNkJBQXBCLG9CQUFvQixtSEFBYztZQTdCN0MsNktBd2NDOzs7O1FBdmNRLE1BQU0sQ0FBQyxJQUFJLEdBQUcsUUFBUSxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztRQUcxQywyRUFBb0MsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsQ0FBQyxFQUFFLEVBQUM7UUFBMUYsSUFBUyxPQUFPLDZDQUEwRTtRQUExRixJQUFTLE9BQU8sbURBQTBFO1FBRzFGLG1JQUE2QixJQUFJLEdBQUM7UUFBbEMsSUFBUyxRQUFRLDhDQUFpQjtRQUFsQyxJQUFTLFFBQVEsb0RBQWlCO1FBR2xDLDhJQUFrQyxLQUFLLEdBQUM7UUFBeEMsSUFBUyxhQUFhLG1EQUFrQjtRQUF4QyxJQUFTLGFBQWEseURBQWtCO1FBSXhDLHFLQUEyQyxJQUFJLEdBQUM7UUFGaEQsd0VBQXdFO1FBRXhFLElBQVMsc0JBQXNCLDREQUFpQjtRQUFoRCxJQUFTLHNCQUFzQixrRUFBaUI7UUFHaEQsMEpBQWlELHVCQUF1QixDQUFDLE9BQU8sR0FBQztRQUFqRixJQUFTLFlBQVksa0RBQTREO1FBQWpGLElBQVMsWUFBWSx3REFBNEQ7UUFRakYsa0pBQWtDLEtBQUssR0FBQztRQU54Qzs7OztXQUlHO1FBRUgsSUFBUyxhQUFhLG1EQUFrQjtRQUF4QyxJQUFTLGFBQWEseURBQWtCO1FBR3hDLGlLQUF3QyxFQUFFLEdBQUM7UUFBM0MsSUFBUyxvQkFBb0IsMERBQWM7UUFBM0MsSUFBUyxvQkFBb0IsZ0VBQWM7UUFFcEMsTUFBTSxDQUFDLE1BQU0sR0FBRztZQUNyQixrQkFBa0I7WUFDbEIsVUFBVSxDQUFDLGFBQWE7WUFDeEIsY0FBYztZQUNkLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztLQXdMRjtZQUNELCtEQUErRDtZQUMvRCxtQkFBbUI7WUFDbkIsaUJBQWlCO1NBQ2xCLENBQUM7UUFFTSxrQkFBa0Isc0VBQUcsQ0FBQyxFQUFDO1FBQ3ZCLGNBQWMsR0FBRyxFQUFFLENBQUM7UUFDcEIsdUJBQXVCLEdBQXlDLElBQUksQ0FBQztRQUNyRSxXQUFXLEdBQW1CLElBQUksQ0FBQztRQUUzQyxJQUFXLGNBQWM7WUFDdkIsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLFFBQVEsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksS0FBSyxXQUFXLENBQUM7UUFDcEUsQ0FBQztRQUVELDZFQUE2RTtRQUU3RSxnRUFBZ0U7UUFDekQsZUFBZSxDQUFDLEtBQWE7WUFDbEMsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO1lBQzNCLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztZQUM5QixJQUFJLENBQUMsYUFBYSxFQUFFLENBQUM7UUFDdkIsQ0FBQztRQUVELHNEQUFzRDtRQUMvQyxvQkFBb0IsQ0FBQyxNQUFjLEVBQUUsS0FBYSxFQUFFLFNBQWtCO1lBQzNFLElBQUksQ0FBQyxPQUFPLENBQUMsU0FBUyxLQUFLLEVBQUUsQ0FBQztZQUM5QixJQUFJLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDL0UsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO2dCQUNWLElBQUksR0FBRyxFQUFFLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsU0FBUyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDO2dCQUNwRSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDcEMsQ0FBQztZQUNELElBQUksQ0FBQyxJQUFJLElBQUksS0FBSyxDQUFDO1lBQ25CLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUNyQix3RUFBd0U7WUFDeEUsS0FBSyxNQUFNLGdCQUFnQixJQUFJLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQUMsd0JBQXdCLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQztnQkFDakcsZ0JBQWdCLENBQUMsYUFBYSxFQUFFLENBQUM7WUFDbkMsQ0FBQztRQUNILENBQUM7UUFFRCx1Q0FBdUM7UUFDaEMsWUFBWSxDQUFDLE1BQWMsRUFBRSxPQUFnQjtZQUNsRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQyxTQUFTLEVBQUUsRUFBRSxDQUFDLFNBQVMsQ0FBQyxFQUFFLEtBQUssTUFBTSxDQUFDLENBQUM7WUFDbEYsSUFBSSxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxFQUFFLENBQUM7Z0JBQzFCLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxJQUFJLElBQUksQ0FBQyxHQUFHLEVBQUUsQ0FBQztnQkFDckMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO2dCQUNyQixLQUFLLE1BQU0sZ0JBQWdCLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRSxnQkFBZ0IsQ0FBQyx3QkFBd0IsQ0FBQyxJQUFJLEVBQUUsRUFBRSxDQUFDO29CQUNqRyxnQkFBZ0IsQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDbkMsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRUQsaUVBQWlFO1FBQzFELFNBQVMsQ0FBQyxLQUFxQixFQUFFLEtBQWM7WUFDcEQsSUFBSSxDQUFDLE9BQU8sQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO1lBQy9CLElBQUksS0FBSztnQkFBRSxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7WUFDdEMsSUFBSSxLQUFLO2dCQUFFLElBQUksQ0FBQyxPQUFPLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztZQUN0QyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7WUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3ZCLENBQUM7UUFFRCw0RUFBNEU7UUFFckUsTUFBTTtZQUNYLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDN0Isd0VBQXdFO1lBQ3hFLHVFQUF1RTtZQUN2RSxJQUNFLE9BQU8sQ0FBQyxJQUFJLEtBQUssTUFBTTttQkFDcEIsT0FBTyxDQUFDLFFBQVE7bUJBQ2hCLENBQUMsT0FBTyxDQUFDLElBQUk7bUJBQ2IsQ0FBQyxPQUFPLENBQUMsS0FBSzttQkFDZCxDQUFDLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTTttQkFDMUIsQ0FBQyxPQUFPLENBQUMsV0FBVyxFQUFFLE1BQU0sRUFDL0IsQ0FBQztnQkFDRCxPQUFPLElBQUksQ0FBQTt3Q0FDdUIsT0FBTyxDQUFDLFFBQVEsa0JBQWtCLElBQUksQ0FBQyxZQUFZO09BQ3BGLENBQUM7WUFDSixDQUFDO1lBQ0QsTUFBTSxTQUFTLEdBQUcsUUFBUSxPQUFPLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDekMsT0FBTyxJQUFJLENBQUE7NEJBQ2EsU0FBUyxJQUFJLE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsRUFBRTtVQUMvRCxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxhQUFhO2dCQUNuQyxDQUFDLENBQUMsSUFBSSxDQUFBOztrQkFFRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsMkJBQTJCLE9BQU8sQ0FBQyxJQUFJLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTtrQkFDekUsSUFBSSxDQUFDLGFBQWEsSUFBSSxPQUFPLENBQUMsU0FBUztvQkFDdkMsQ0FBQyxDQUFDLElBQUksQ0FBQSwyQkFBMkIseUJBQXlCLENBQUMsT0FBTyxDQUFDLFNBQVMsQ0FBQyxTQUFTO29CQUN0RixDQUFDLENBQUMsRUFBRTs7YUFFVDtnQkFDSCxDQUFDLENBQUMsRUFBRTtVQUNKLE9BQU8sQ0FBQyxTQUFTLEVBQUUsTUFBTTtnQkFDekIsQ0FBQyxDQUFDLElBQUksQ0FBQTs7MERBRTBDLE9BQU8sQ0FBQyxTQUFTOzthQUU5RDtnQkFDSCxDQUFDLENBQUMsRUFBRTtVQUNKLE9BQU8sQ0FBQyxXQUFXLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsaUJBQWlCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO1VBQzlFLE9BQU8sQ0FBQyxRQUFRO2dCQUNoQixDQUFDLENBQUMsSUFBSSxDQUFBLGlDQUFpQyxPQUFPLENBQUMsUUFBUSxrQkFBa0IsSUFBSSxDQUFDLFlBQVksNEJBQTRCO2dCQUN0SCxDQUFDLENBQUMsRUFBRTtVQUNKLElBQUksQ0FBQyxVQUFVLEVBQUU7VUFDakIsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLDBCQUEwQixPQUFPLENBQUMsS0FBSyxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7VUFDeEUsT0FBTyxDQUFDLEtBQUssRUFBRSxXQUFXO2dCQUMxQixDQUFDLENBQUMsSUFBSSxDQUFBOzt3QkFFUSxPQUFPLENBQUMsS0FBSyxDQUFDLFdBQVcsSUFBSSxDQUFDLFNBQVMsT0FBTyxDQUFDLEtBQUssQ0FBQyxZQUFZLElBQUksQ0FBQyxVQUFVLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVzs7YUFFcEg7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUU7O0tBRVQsQ0FBQztRQUNKLENBQUM7UUFFTyxVQUFVO1lBQ2hCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxPQUFPLENBQUM7WUFDN0IsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsQ0FBQztnQkFDbEIsT0FBTyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsMkRBQTJELENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQSxFQUFFLENBQUM7WUFDdEcsQ0FBQztZQUNELE1BQU0sYUFBYSxHQUFHLElBQUksQ0FBQyxjQUFjO21CQUNwQyxJQUFJLENBQUMsb0JBQW9CO21CQUN6QixDQUFDLENBQUMsT0FBTyxDQUFDLFNBQVMsSUFBSSxJQUFJLENBQUMsc0JBQXNCLENBQUM7bUJBQ25ELElBQUksQ0FBQyxjQUFjLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUNwQyxJQUFJLGFBQWEsRUFBRSxDQUFDO2dCQUNsQixPQUFPLElBQUksQ0FBQTtxQ0FDb0IsVUFBVSxDQUFDLElBQUksQ0FBQyxvQkFBb0IsQ0FBQztVQUNoRSxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUU7T0FDOUQsQ0FBQztZQUNKLENBQUM7WUFDRCxPQUFPLElBQUksQ0FBQTsrQkFDZ0IsT0FBTyxDQUFDLElBQUksR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUEsOEJBQThCLENBQUMsQ0FBQyxDQUFDLEVBQUU7S0FDcEcsQ0FBQztRQUNKLENBQUM7UUFFTyxpQkFBaUIsQ0FBQyxXQUFpQztZQUN6RCxPQUFPLElBQUksQ0FBQTs7VUFFTCxXQUFXLENBQUMsR0FBRyxDQUFDLENBQUMsVUFBVSxFQUFFLEVBQUU7Z0JBQy9CLE1BQU0sUUFBUSxHQUFHLFVBQVUsQ0FBQyxJQUFJLEtBQUssT0FBTyxJQUFJLFVBQVUsQ0FBQyxVQUFVO29CQUNuRSxDQUFDLENBQUMsUUFBUSxVQUFVLENBQUMsU0FBUyxXQUFXLFVBQVUsQ0FBQyxVQUFVLEVBQUU7b0JBQ2hFLENBQUMsQ0FBQyxFQUFFLENBQUM7Z0JBQ1AsT0FBTyxJQUFJLENBQUE7O2dCQUVMLFFBQVE7b0JBQ1IsQ0FBQyxDQUFDLElBQUksQ0FBQSxvQ0FBb0MsUUFBUSxRQUFRLFVBQVUsQ0FBQyxJQUFJLEtBQUs7b0JBQzlFLENBQUMsQ0FBQyxJQUFJLENBQUEsZ0dBQWdHOztvREFFbEUsVUFBVSxDQUFDLElBQUksSUFBSSxVQUFVLENBQUMsSUFBSTs7b0JBRWxFLFVBQVUsQ0FBQyxTQUFTLElBQUksTUFBTSxNQUFNLGtCQUFrQixDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsR0FBRyxVQUFVLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxjQUFjLENBQUMsQ0FBQyxDQUFDLEVBQUU7Ozs7V0FJN0gsQ0FBQztZQUNKLENBQUMsQ0FBQzs7S0FFTCxDQUFDO1FBQ0osQ0FBQztRQUVELDRFQUE0RTtRQUVyRSxZQUFZLENBQUMsaUJBQW1DO1lBQ3JELEtBQUssQ0FBQyxZQUFZLENBQUMsaUJBQWlCLENBQUMsQ0FBQztZQUN0QyxJQUFJLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztnQkFDdkIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDakMsQ0FBQztRQUNILENBQUM7UUFFTSxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFtQztZQUN0RCxLQUFLLENBQUMsT0FBTyxDQUFDLGlCQUFpQixDQUFDLENBQUM7WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUk7Z0JBQUUsT0FBTztZQUN2RCxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxLQUFLLElBQUksQ0FBQyxjQUFjO2dCQUFFLE9BQU87WUFDdEQsSUFBSSxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLHNCQUFzQjtvQkFBRSxPQUFPO2dCQUN6QyxJQUFJLENBQUMsc0JBQXNCLEVBQUUsQ0FBQztnQkFDOUIsT0FBTztZQUNULENBQUM7WUFDRCxNQUFNLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztRQUM3QixDQUFDO1FBRU8sc0JBQXNCO1lBQzVCLElBQUksSUFBSSxDQUFDLHVCQUF1QjtnQkFBRSxPQUFPO1lBQ3pDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxVQUFVLENBQUMsR0FBRyxFQUFFO2dCQUM3QyxJQUFJLENBQUMsdUJBQXVCLEdBQUcsSUFBSSxDQUFDO2dCQUNwQyxLQUFLLElBQUksQ0FBQyxhQUFhLEVBQUUsQ0FBQztZQUM1QixDQUFDLEVBQUUsdUJBQXVCLENBQUMsQ0FBQztRQUM5QixDQUFDO1FBRU8sS0FBSyxDQUFDLGFBQWE7WUFDekIsTUFBTSxLQUFLLEdBQUcsRUFBRSxJQUFJLENBQUMsa0JBQWtCLENBQUM7WUFDeEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUM7WUFDeEMsTUFBTSxVQUFVLEdBQUcsTUFBTSxlQUFlLENBQUMsV0FBVyxFQUFFLENBQUMsWUFBWSxDQUFDLGFBQWEsQ0FBQyxDQUFDO1lBQ25GLElBQUksS0FBSyxLQUFLLElBQUksQ0FBQyxrQkFBa0I7Z0JBQUUsT0FBTztZQUM5QyxJQUFJLENBQUMsY0FBYyxHQUFHLGFBQWEsQ0FBQztZQUNwQyxJQUFJLENBQUMsb0JBQW9CLEdBQUcsVUFBVSxDQUFDO1lBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsRUFBRSxDQUFDO2dCQUM1QixNQUFNLElBQUksQ0FBQyxjQUFjLENBQUM7Z0JBQzFCLE1BQU0sSUFBSSxDQUFDLG1CQUFtQixDQUFDLEtBQUssQ0FBQyxDQUFDO1lBQ3hDLENBQUM7UUFDSCxDQUFDO1FBRUQsNEVBQTRFO1FBQ3BFLEtBQUssQ0FBQyxtQkFBbUIsQ0FBQyxLQUFhO1lBQzdDLE1BQU0sWUFBWSxHQUFHLEtBQUssQ0FBQyxJQUFJLENBQzdCLElBQUksQ0FBQyxVQUFVLEVBQUUsZ0JBQWdCLENBQWMseUJBQXlCLENBQUMsSUFBSSxFQUFFLENBQ2hGLENBQUMsTUFBTSxDQUFDLENBQUMsV0FBVyxFQUFFLEVBQUUsQ0FBQyxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxDQUFDLENBQUM7WUFDNUQsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNO2dCQUFFLE9BQU87WUFDakMsSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsQ0FBQztnQkFDdEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLG9CQUFvQixDQUFDLFdBQVcsRUFBRSxDQUFDLGVBQWUsRUFBRSxDQUFDO1lBQ2hGLENBQUM7WUFDRCxJQUFJLEtBQUssS0FBSyxJQUFJLENBQUMsa0JBQWtCO2dCQUFFLE9BQU87WUFDOUMsS0FBSyxNQUFNLFdBQVcsSUFBSSxZQUFZLEVBQUUsQ0FBQztnQkFDdkMsTUFBTSxhQUFhLEdBQUcsbUJBQW1CLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztnQkFDdEUsSUFBSSxDQUFDO29CQUNILE1BQU0sV0FBVyxHQUFHLGFBQWE7d0JBQy9CLENBQUMsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLFNBQVMsQ0FBQyxXQUFXLENBQUMsV0FBVyxJQUFJLEVBQUUsRUFBRTs0QkFDeEQsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7NEJBQzFCLGNBQWMsRUFBRSxJQUFJO3lCQUNyQixDQUFDLENBQUMsS0FBSzt3QkFDVixDQUFDLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxhQUFhLENBQUMsV0FBVyxDQUFDLFdBQVcsSUFBSSxFQUFFLENBQUMsQ0FBQyxLQUFLLENBQUM7b0JBQ3hFLFdBQVcsQ0FBQyxTQUFTLEdBQUcsV0FBVyxDQUFDO29CQUNwQyxXQUFXLENBQUMsT0FBTyxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7Z0JBQzNDLENBQUM7Z0JBQUMsTUFBTSxDQUFDO29CQUNQLFdBQVcsQ0FBQyxPQUFPLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQztnQkFDM0MsQ0FBQztZQUNILENBQUM7UUFDSCxDQUFDO1FBRU0sS0FBSyxDQUFDLG9CQUFvQjtZQUMvQixJQUFJLElBQUksQ0FBQyx1QkFBdUIsRUFBRSxDQUFDO2dCQUNqQyxZQUFZLENBQUMsSUFBSSxDQUFDLHVCQUF1QixDQUFDLENBQUM7Z0JBQzNDLElBQUksQ0FBQyx1QkFBdUIsR0FBRyxJQUFJLENBQUM7WUFDdEMsQ0FBQztZQUNELE1BQU0sS0FBSyxDQUFDLG9CQUFvQixFQUFFLENBQUM7UUFDckMsQ0FBQzs7WUF2Y1UsdURBQWtCOzs7OztTQUFsQixrQkFBa0IifQ==
@@ -7,18 +7,28 @@ declare global {
7
7
  }
8
8
  }
9
9
  /**
10
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
11
- * the part is streaming (no endedAt) unless the user has interacted; the
12
- * user's expand/collapse choice wins afterwards and survives re-renders
13
- * because it lives on this element, not in the parent's template.
10
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
11
+ * Collapsed it shows a one-line summary the trace's first line, or the
12
+ * latest line while streaming and expanding reveals the FULL concatenated
13
+ * trace of every part in one flat body. Auto-opens while streaming (no
14
+ * endedAt on some part) unless the user has interacted; the user's
15
+ * expand/collapse choice wins afterwards and survives re-renders because it
16
+ * lives on this element, not in the parent's template.
14
17
  */
15
18
  export declare class DeesHarnessReasoning extends DeesElement {
16
19
  static demo: () => TemplateResult<1>;
17
20
  static demoGroups: string[];
18
- accessor reasoningPart: IHarnessReasoningPart;
21
+ accessor reasoningParts: IHarnessReasoningPart[];
19
22
  accessor expanded: boolean | undefined;
20
23
  static styles: import("@design.estate/dees-element").CSSResult[];
21
24
  get isStreaming(): boolean;
22
25
  get isOpen(): boolean;
26
+ /** All parts joined into the one full trace the expanded body shows. */
27
+ get fullText(): string;
28
+ /**
29
+ * One line for the collapsed state: the latest line while streaming (live
30
+ * progress), the first line once finished (the trace's own summary).
31
+ */
32
+ get previewLine(): string;
23
33
  render(): TemplateResult;
24
34
  }
@@ -13,20 +13,30 @@ export const demoFunc = () => html `
13
13
  </style>
14
14
  <div class="reasoningDemo">
15
15
  <dees-harness-reasoning
16
- .reasoningPart=${{
17
- id: 'r1',
18
- text: 'The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
19
- startedAt: Date.now() - 4200,
20
- endedAt: Date.now(),
21
- }}
16
+ .reasoningParts=${[
17
+ {
18
+ id: 'r1',
19
+ text: 'Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
20
+ startedAt: Date.now() - 9200,
21
+ endedAt: Date.now() - 5200,
22
+ },
23
+ {
24
+ id: 'r2',
25
+ text: 'The fixture predates the schema change; regenerating it should settle both assertions.',
26
+ startedAt: Date.now() - 5200,
27
+ endedAt: Date.now() - 4100,
28
+ },
29
+ ]}
22
30
  ></dees-harness-reasoning>
23
31
  <dees-harness-reasoning
24
- .reasoningPart=${{
25
- id: 'r2',
26
- text: 'Considering the tradeoffs between the two migration paths',
27
- startedAt: Date.now() - 1500,
28
- }}
32
+ .reasoningParts=${[
33
+ {
34
+ id: 'r3',
35
+ text: 'Considering the tradeoffs between the two migration paths',
36
+ startedAt: Date.now() - 1500,
37
+ },
38
+ ]}
29
39
  ></dees-harness-reasoning>
30
40
  </div>
31
41
  `;
32
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5kZW1vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nL2RlZXMtaGFybmVzcy1yZWFzb25pbmcuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7Ozs7dUJBY1g7SUFDZixFQUFFLEVBQUUsSUFBSTtJQUNSLElBQUksRUFBRSw0SkFBNEo7SUFDbEssU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO0lBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0NBQ3BCOzs7dUJBR2dCO0lBQ2YsRUFBRSxFQUFFLElBQUk7SUFDUixJQUFJLEVBQUUsMkRBQTJEO0lBQ2pFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtDQUM3Qjs7O0NBR04sQ0FBQyJ9
42
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5kZW1vLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nL2RlZXMtaGFybmVzcy1yZWFzb25pbmcuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxDQUFDLE1BQU0sUUFBUSxHQUFHLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQTs7Ozs7Ozs7Ozs7Ozs7d0JBY1Y7SUFDaEI7UUFDRSxFQUFFLEVBQUUsSUFBSTtRQUNSLElBQUksRUFBRSw4TUFBOE07UUFDcE4sU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsR0FBRyxJQUFJO1FBQzVCLE9BQU8sRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtLQUMzQjtJQUNEO1FBQ0UsRUFBRSxFQUFFLElBQUk7UUFDUixJQUFJLEVBQUUsd0ZBQXdGO1FBQzlGLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEdBQUcsSUFBSTtRQUM1QixPQUFPLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7S0FDM0I7Q0FDRjs7O3dCQUdpQjtJQUNoQjtRQUNFLEVBQUUsRUFBRSxJQUFJO1FBQ1IsSUFBSSxFQUFFLDJEQUEyRDtRQUNqRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxHQUFHLElBQUk7S0FDN0I7Q0FDRjs7O0NBR04sQ0FBQyJ9
@@ -38,10 +38,13 @@ import { themeDefaultStyles } from '../../00theme.js';
38
38
  import { harnessFormatDuration } from '../harness.helpers.js';
39
39
  import '../../00group-utility/dees-icon/dees-icon.js';
40
40
  /**
41
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
42
- * the part is streaming (no endedAt) unless the user has interacted; the
43
- * user's expand/collapse choice wins afterwards and survives re-renders
44
- * because it lives on this element, not in the parent's template.
41
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
42
+ * Collapsed it shows a one-line summary the trace's first line, or the
43
+ * latest line while streaming and expanding reveals the FULL concatenated
44
+ * trace of every part in one flat body. Auto-opens while streaming (no
45
+ * endedAt on some part) unless the user has interacted; the user's
46
+ * expand/collapse choice wins afterwards and survives re-renders because it
47
+ * lives on this element, not in the parent's template.
45
48
  */
46
49
  let DeesHarnessReasoning = (() => {
47
50
  let _classDecorators = [customElement('dees-harness-reasoning')];
@@ -49,9 +52,9 @@ let DeesHarnessReasoning = (() => {
49
52
  let _classExtraInitializers = [];
50
53
  let _classThis;
51
54
  let _classSuper = DeesElement;
52
- let _reasoningPart_decorators;
53
- let _reasoningPart_initializers = [];
54
- let _reasoningPart_extraInitializers = [];
55
+ let _reasoningParts_decorators;
56
+ let _reasoningParts_initializers = [];
57
+ let _reasoningParts_extraInitializers = [];
55
58
  let _expanded_decorators;
56
59
  let _expanded_initializers = [];
57
60
  let _expanded_extraInitializers = [];
@@ -59,9 +62,9 @@ let DeesHarnessReasoning = (() => {
59
62
  static { _classThis = this; }
60
63
  static {
61
64
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
62
- _reasoningPart_decorators = [property({ attribute: false })];
65
+ _reasoningParts_decorators = [property({ attribute: false })];
63
66
  _expanded_decorators = [state()];
64
- __esDecorate(this, null, _reasoningPart_decorators, { kind: "accessor", name: "reasoningPart", static: false, private: false, access: { has: obj => "reasoningPart" in obj, get: obj => obj.reasoningPart, set: (obj, value) => { obj.reasoningPart = value; } }, metadata: _metadata }, _reasoningPart_initializers, _reasoningPart_extraInitializers);
67
+ __esDecorate(this, null, _reasoningParts_decorators, { kind: "accessor", name: "reasoningParts", static: false, private: false, access: { has: obj => "reasoningParts" in obj, get: obj => obj.reasoningParts, set: (obj, value) => { obj.reasoningParts = value; } }, metadata: _metadata }, _reasoningParts_initializers, _reasoningParts_extraInitializers);
65
68
  __esDecorate(this, null, _expanded_decorators, { kind: "accessor", name: "expanded", static: false, private: false, access: { has: obj => "expanded" in obj, get: obj => obj.expanded, set: (obj, value) => { obj.expanded = value; } }, metadata: _metadata }, _expanded_initializers, _expanded_extraInitializers);
66
69
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
67
70
  DeesHarnessReasoning = _classThis = _classDescriptor.value;
@@ -69,10 +72,10 @@ let DeesHarnessReasoning = (() => {
69
72
  }
70
73
  static demo = demoFunc;
71
74
  static demoGroups = ['Agent Chat'];
72
- #reasoningPart_accessor_storage = __runInitializers(this, _reasoningPart_initializers, { id: '', text: '' });
73
- get reasoningPart() { return this.#reasoningPart_accessor_storage; }
74
- set reasoningPart(value) { this.#reasoningPart_accessor_storage = value; }
75
- #expanded_accessor_storage = (__runInitializers(this, _reasoningPart_extraInitializers), __runInitializers(this, _expanded_initializers, undefined));
75
+ #reasoningParts_accessor_storage = __runInitializers(this, _reasoningParts_initializers, []);
76
+ get reasoningParts() { return this.#reasoningParts_accessor_storage; }
77
+ set reasoningParts(value) { this.#reasoningParts_accessor_storage = value; }
78
+ #expanded_accessor_storage = (__runInitializers(this, _reasoningParts_extraInitializers), __runInitializers(this, _expanded_initializers, undefined));
76
79
  get expanded() { return this.#expanded_accessor_storage; }
77
80
  set expanded(value) { this.#expanded_accessor_storage = value; }
78
81
  static styles = [
@@ -154,6 +157,7 @@ let DeesHarnessReasoning = (() => {
154
157
  .chevron {
155
158
  display: grid;
156
159
  place-items: center;
160
+ flex: 0 0 auto;
157
161
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
158
162
  }
159
163
 
@@ -161,8 +165,23 @@ let DeesHarnessReasoning = (() => {
161
165
  transform: rotate(90deg);
162
166
  }
163
167
 
168
+ .label {
169
+ flex: 0 0 auto;
170
+ }
171
+
172
+ .preview {
173
+ min-width: 0;
174
+ overflow: hidden;
175
+ text-overflow: ellipsis;
176
+ white-space: nowrap;
177
+ color: var(--dees-color-text-muted);
178
+ font-weight: 400;
179
+ font-style: italic;
180
+ }
181
+
164
182
  .duration {
165
183
  margin-left: auto;
184
+ flex: 0 0 auto;
166
185
  color: var(--dees-color-text-muted);
167
186
  font-weight: 400;
168
187
  }
@@ -194,13 +213,45 @@ let DeesHarnessReasoning = (() => {
194
213
  `,
195
214
  ];
196
215
  get isStreaming() {
197
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
216
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
198
217
  }
199
218
  get isOpen() {
200
219
  return this.expanded ?? this.isStreaming;
201
220
  }
221
+ /** All parts joined into the one full trace the expanded body shows. */
222
+ get fullText() {
223
+ return this.reasoningParts
224
+ .map((part) => part.text.trim())
225
+ .filter((text) => text.length > 0)
226
+ .join('\n\n');
227
+ }
228
+ /**
229
+ * One line for the collapsed state: the latest line while streaming (live
230
+ * progress), the first line once finished (the trace's own summary).
231
+ */
232
+ get previewLine() {
233
+ const lines = this.fullText
234
+ .split('\n')
235
+ .map((line) => line.trim())
236
+ .filter((line) => line.length > 0);
237
+ if (lines.length === 0)
238
+ return '';
239
+ const line = this.isStreaming ? lines[lines.length - 1] : lines[0];
240
+ // Reasoning summaries often arrive as markdown headings; the one-line
241
+ // preview shows plain text.
242
+ return line
243
+ .replace(/^#+\s*/, '')
244
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
245
+ .replace(/\*([^*]+)\*/g, '$1')
246
+ .replace(/`([^`]+)`/g, '$1');
247
+ }
202
248
  render() {
203
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
249
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
250
+ const endedAt = this.isStreaming
251
+ ? undefined
252
+ : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
253
+ const duration = harnessFormatDuration(startedAt, endedAt);
254
+ const preview = this.previewLine;
204
255
  return html `
205
256
  <div class="reasoning">
206
257
  <button
@@ -214,14 +265,15 @@ let DeesHarnessReasoning = (() => {
214
265
  <span class="chevron ${this.isOpen ? 'open' : ''}">
215
266
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
216
267
  </span>
217
- <span class=${this.isStreaming ? 'thinkingDots' : ''}>
268
+ <span class="label ${this.isStreaming ? 'thinkingDots' : ''}">
218
269
  ${this.isStreaming ? 'Thinking' : 'Thought'}
219
270
  </span>
271
+ ${!this.isOpen && preview ? html `<span class="preview">${preview}</span>` : ''}
220
272
  ${duration ? html `<span class="duration">${duration}</span>` : ''}
221
273
  </button>
222
274
  <div class="bodyWrap ${this.isOpen ? 'open' : ''}" aria-hidden=${this.isOpen ? 'false' : 'true'}>
223
275
  <div class="bodyClip">
224
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
276
+ <pre class="body">${this.fullText || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
225
277
  </div>
226
278
  </div>
227
279
  </div>
@@ -238,4 +290,4 @@ let DeesHarnessReasoning = (() => {
238
290
  return DeesHarnessReasoning = _classThis;
239
291
  })();
240
292
  export { DeesHarnessReasoning };
241
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXJlYXNvbmluZy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sOENBQThDLENBQUM7QUFRdEQ7Ozs7O0dBS0c7SUFFVSxvQkFBb0I7NEJBRGhDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7O29DQUFuQixTQUFRLFdBQVc7Ozs7eUNBSWxELFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHOUIsS0FBSyxFQUFFO1lBRlIsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUErQztZQUdyRSw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQWtDO1lBUnJELDZLQXFLQzs7OztRQXBLUSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHMUMsdUZBQWdELEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLEVBQUM7UUFBckUsSUFBUyxhQUFhLG1EQUErQztRQUFyRSxJQUFTLGFBQWEseURBQStDO1FBR3JFLHlJQUF5QyxTQUFTLEdBQUM7UUFBbkQsSUFBUyxRQUFRLDhDQUFrQztRQUFuRCxJQUFTLFFBQVEsb0RBQWtDO1FBRTVDLE1BQU0sQ0FBQyxNQUFNLEdBQUc7WUFDckIsa0JBQWtCO1lBQ2xCLFVBQVUsQ0FBQyxhQUFhO1lBQ3hCLEdBQUcsQ0FBQTs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0FpSEY7U0FDRixDQUFDO1FBRUYsSUFBVyxXQUFXO1lBQ3BCLE9BQU8sT0FBTyxDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQztRQUM5RSxDQUFDO1FBRUQsSUFBVyxNQUFNO1lBQ2YsT0FBTyxJQUFJLENBQUMsUUFBUSxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDM0MsQ0FBQztRQUVNLE1BQU07WUFDWCxNQUFNLFFBQVEsR0FBRyxxQkFBcUIsQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsYUFBYSxDQUFDLE9BQU8sQ0FBQyxDQUFDO1lBQ2pHLE9BQU8sSUFBSSxDQUFBOzs7OzswQkFLVyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE9BQU87bUJBQ3JDLEdBQUcsRUFBRTtnQkFDWixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQztZQUMvQixDQUFDOztpQ0FFc0IsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFOzs7d0JBR2xDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQyxDQUFDLGNBQWMsQ0FBQyxDQUFDLENBQUMsRUFBRTtjQUNoRCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLFNBQVM7O1lBRTNDLFFBQVEsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLDBCQUEwQixRQUFRLFNBQVMsQ0FBQyxDQUFDLENBQUMsRUFBRTs7K0JBRTVDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxpQkFBaUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxNQUFNOztnQ0FFdkUsSUFBSSxDQUFDLGFBQWEsQ0FBQyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyx3QkFBd0IsQ0FBQyxDQUFDLENBQUMsdUJBQXVCLENBQUM7Ozs7S0FJN0gsQ0FBQztRQUNKLENBQUM7Ozs7OztZQXBLVSx1REFBb0I7Ozs7O1NBQXBCLG9CQUFvQiJ9
293
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXJlYXNvbmluZy5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXJlYXNvbmluZy9kZWVzLWhhcm5lc3MtcmVhc29uaW5nLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sa0NBQWtDLENBQUM7QUFDNUQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsR0FDWCxNQUFNLDZCQUE2QixDQUFDO0FBQ3JDLE9BQU8sRUFBRSxrQkFBa0IsRUFBRSxNQUFNLGtCQUFrQixDQUFDO0FBRXRELE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQzlELE9BQU8sOENBQThDLENBQUM7QUFRdEQ7Ozs7Ozs7O0dBUUc7SUFFVSxvQkFBb0I7NEJBRGhDLGFBQWEsQ0FBQyx3QkFBd0IsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7O29DQUFuQixTQUFRLFdBQVc7Ozs7MENBSWxELFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztvQ0FHOUIsS0FBSyxFQUFFO1lBRlIsK0xBQVMsY0FBYyw2QkFBZCxjQUFjLHVHQUErQjtZQUd0RCw2S0FBUyxRQUFRLDZCQUFSLFFBQVEsMkZBQWtDO1lBUnJELDZLQXVOQzs7OztRQXROUSxNQUFNLENBQUMsSUFBSSxHQUFHLFFBQVEsQ0FBQztRQUN2QixNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsWUFBWSxDQUFDLENBQUM7UUFHMUMseUZBQW1ELEVBQUUsRUFBQztRQUF0RCxJQUFTLGNBQWMsb0RBQStCO1FBQXRELElBQVMsY0FBYywwREFBK0I7UUFHdEQsMElBQXlDLFNB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
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@design.estate/dees-catalog",
3
- "version": "3.104.0",
3
+ "version": "4.0.1",
4
4
  "private": false,
5
5
  "description": "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.",
6
6
  "main": "dist_ts_web/index.js",
@@ -3,6 +3,6 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.104.0',
6
+ version: '4.0.1',
7
7
  description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
8
8
  }
@@ -351,9 +351,7 @@ export class DeesHarnessMessage extends DeesElement {
351
351
  ${message.reasoning?.length
352
352
  ? html`
353
353
  <div class="reasoningStack">
354
- ${message.reasoning.map(
355
- (part) => html`<dees-harness-reasoning .reasoningPart=${part}></dees-harness-reasoning>`,
356
- )}
354
+ <dees-harness-reasoning .reasoningParts=${message.reasoning}></dees-harness-reasoning>
357
355
  </div>
358
356
  `
359
357
  : ''}
@@ -14,19 +14,29 @@ export const demoFunc = () => html`
14
14
  </style>
15
15
  <div class="reasoningDemo">
16
16
  <dees-harness-reasoning
17
- .reasoningPart=${{
18
- id: 'r1',
19
- text: 'The user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
20
- startedAt: Date.now() - 4200,
21
- endedAt: Date.now(),
22
- }}
17
+ .reasoningParts=${[
18
+ {
19
+ id: 'r1',
20
+ text: 'Summarize the failing test before touching code.\nThe user wants a summary of the failing test. I should read the test output first, then check the assertion that failed and compare with the fixture data.',
21
+ startedAt: Date.now() - 9200,
22
+ endedAt: Date.now() - 5200,
23
+ },
24
+ {
25
+ id: 'r2',
26
+ text: 'The fixture predates the schema change; regenerating it should settle both assertions.',
27
+ startedAt: Date.now() - 5200,
28
+ endedAt: Date.now() - 4100,
29
+ },
30
+ ]}
23
31
  ></dees-harness-reasoning>
24
32
  <dees-harness-reasoning
25
- .reasoningPart=${{
26
- id: 'r2',
27
- text: 'Considering the tradeoffs between the two migration paths',
28
- startedAt: Date.now() - 1500,
29
- }}
33
+ .reasoningParts=${[
34
+ {
35
+ id: 'r3',
36
+ text: 'Considering the tradeoffs between the two migration paths',
37
+ startedAt: Date.now() - 1500,
38
+ },
39
+ ]}
30
40
  ></dees-harness-reasoning>
31
41
  </div>
32
42
  `;
@@ -21,10 +21,13 @@ declare global {
21
21
  }
22
22
 
23
23
  /**
24
- * Reasoning ("thinking") disclosure for one reasoning part. Auto-opens while
25
- * the part is streaming (no endedAt) unless the user has interacted; the
26
- * user's expand/collapse choice wins afterwards and survives re-renders
27
- * because it lives on this element, not in the parent's template.
24
+ * Reasoning ("thinking") disclosure for a message's complete reasoning trace.
25
+ * Collapsed it shows a one-line summary the trace's first line, or the
26
+ * latest line while streaming and expanding reveals the FULL concatenated
27
+ * trace of every part in one flat body. Auto-opens while streaming (no
28
+ * endedAt on some part) unless the user has interacted; the user's
29
+ * expand/collapse choice wins afterwards and survives re-renders because it
30
+ * lives on this element, not in the parent's template.
28
31
  */
29
32
  @customElement('dees-harness-reasoning')
30
33
  export class DeesHarnessReasoning extends DeesElement {
@@ -32,7 +35,7 @@ export class DeesHarnessReasoning extends DeesElement {
32
35
  public static demoGroups = ['Agent Chat'];
33
36
 
34
37
  @property({ attribute: false })
35
- accessor reasoningPart: IHarnessReasoningPart = { id: '', text: '' };
38
+ accessor reasoningParts: IHarnessReasoningPart[] = [];
36
39
 
37
40
  @state()
38
41
  accessor expanded: boolean | undefined = undefined;
@@ -116,6 +119,7 @@ export class DeesHarnessReasoning extends DeesElement {
116
119
  .chevron {
117
120
  display: grid;
118
121
  place-items: center;
122
+ flex: 0 0 auto;
119
123
  transition: transform var(--dees-transition-fast) var(--dees-ease-standard);
120
124
  }
121
125
 
@@ -123,8 +127,23 @@ export class DeesHarnessReasoning extends DeesElement {
123
127
  transform: rotate(90deg);
124
128
  }
125
129
 
130
+ .label {
131
+ flex: 0 0 auto;
132
+ }
133
+
134
+ .preview {
135
+ min-width: 0;
136
+ overflow: hidden;
137
+ text-overflow: ellipsis;
138
+ white-space: nowrap;
139
+ color: var(--dees-color-text-muted);
140
+ font-weight: 400;
141
+ font-style: italic;
142
+ }
143
+
126
144
  .duration {
127
145
  margin-left: auto;
146
+ flex: 0 0 auto;
128
147
  color: var(--dees-color-text-muted);
129
148
  font-weight: 400;
130
149
  }
@@ -157,15 +176,48 @@ export class DeesHarnessReasoning extends DeesElement {
157
176
  ];
158
177
 
159
178
  public get isStreaming(): boolean {
160
- return Boolean(this.reasoningPart.startedAt) && !this.reasoningPart.endedAt;
179
+ return this.reasoningParts.some((part) => Boolean(part.startedAt) && !part.endedAt);
161
180
  }
162
181
 
163
182
  public get isOpen(): boolean {
164
183
  return this.expanded ?? this.isStreaming;
165
184
  }
166
185
 
186
+ /** All parts joined into the one full trace the expanded body shows. */
187
+ public get fullText(): string {
188
+ return this.reasoningParts
189
+ .map((part) => part.text.trim())
190
+ .filter((text) => text.length > 0)
191
+ .join('\n\n');
192
+ }
193
+
194
+ /**
195
+ * One line for the collapsed state: the latest line while streaming (live
196
+ * progress), the first line once finished (the trace's own summary).
197
+ */
198
+ public get previewLine(): string {
199
+ const lines = this.fullText
200
+ .split('\n')
201
+ .map((line) => line.trim())
202
+ .filter((line) => line.length > 0);
203
+ if (lines.length === 0) return '';
204
+ const line = this.isStreaming ? lines[lines.length - 1] : lines[0];
205
+ // Reasoning summaries often arrive as markdown headings; the one-line
206
+ // preview shows plain text.
207
+ return line
208
+ .replace(/^#+\s*/, '')
209
+ .replace(/\*\*([^*]+)\*\*/g, '$1')
210
+ .replace(/\*([^*]+)\*/g, '$1')
211
+ .replace(/`([^`]+)`/g, '$1');
212
+ }
213
+
167
214
  public render(): TemplateResult {
168
- const duration = harnessFormatDuration(this.reasoningPart.startedAt, this.reasoningPart.endedAt);
215
+ const startedAt = this.reasoningParts.find((part) => part.startedAt)?.startedAt;
216
+ const endedAt = this.isStreaming
217
+ ? undefined
218
+ : [...this.reasoningParts].reverse().find((part) => part.endedAt)?.endedAt;
219
+ const duration = harnessFormatDuration(startedAt, endedAt);
220
+ const preview = this.previewLine;
169
221
  return html`
170
222
  <div class="reasoning">
171
223
  <button
@@ -179,14 +231,15 @@ export class DeesHarnessReasoning extends DeesElement {
179
231
  <span class="chevron ${this.isOpen ? 'open' : ''}">
180
232
  <dees-icon icon="lucide:ChevronRight" iconSize="12"></dees-icon>
181
233
  </span>
182
- <span class=${this.isStreaming ? 'thinkingDots' : ''}>
234
+ <span class="label ${this.isStreaming ? 'thinkingDots' : ''}">
183
235
  ${this.isStreaming ? 'Thinking' : 'Thought'}
184
236
  </span>
237
+ ${!this.isOpen && preview ? html`<span class="preview">${preview}</span>` : ''}
185
238
  ${duration ? html`<span class="duration">${duration}</span>` : ''}
186
239
  </button>
187
240
  <div class="bodyWrap ${this.isOpen ? 'open' : ''}" aria-hidden=${this.isOpen ? 'false' : 'true'}>
188
241
  <div class="bodyClip">
189
- <pre class="body">${this.reasoningPart.text || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
242
+ <pre class="body">${this.fullText || (this.isStreaming ? 'Waiting for reasoning…' : 'No reasoning emitted.')}</pre>
190
243
  </div>
191
244
  </div>
192
245
  </div>