@design.estate/dees-catalog 9.7.0 → 9.8.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/dist_bundle/bundle.js +194 -45
- package/dist_bundle/bundle.js.map +1 -1
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-appui/dees-appui/dees-appui.js +6 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +14 -4
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +4 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +52 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +4 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +93 -20
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +7 -21
- package/dist_ts_web/elements/00group-harness/harness.helpers.d.ts +20 -0
- package/dist_ts_web/elements/00group-harness/harness.helpers.js +58 -1
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +6 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.d.ts +8 -0
- package/dist_ts_web/elements/00group-harness/toolregistry.js +10 -2
- package/package.json +2 -2
- package/readme.md +2 -2
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-appui/dees-appui/dees-appui.ts +4 -0
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +12 -3
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +50 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +95 -23
- package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +7 -20
- package/ts_web/elements/00group-harness/harness.helpers.ts +63 -0
- package/ts_web/elements/00group-harness/interfaces.ts +6 -0
- package/ts_web/elements/00group-harness/toolregistry.ts +22 -1
package/dist_bundle/bundle.js
CHANGED
|
@@ -165269,6 +165269,8 @@ var _DeesAppui = class _DeesAppui extends (_a75 = DeesElement, _appbarMenuItems_
|
|
|
165269
165269
|
this.searchCallback = config2.onSearch;
|
|
165270
165270
|
}
|
|
165271
165271
|
const initialRoute = this.viewRegistry.findByRoute(window.location.hash.slice(1));
|
|
165272
|
+
const initialViewId = initialRoute?.view.id ?? config2.defaultView;
|
|
165273
|
+
if (initialViewId) this.setMainMenuSelection(initialViewId);
|
|
165272
165274
|
if (initialRoute) {
|
|
165273
165275
|
void this.queueNavigation(initialRoute.view.id, initialRoute.params, initialRoute.query, "replace");
|
|
165274
165276
|
} else if (config2.defaultView) {
|
|
@@ -168585,6 +168587,45 @@ var harnessSummarizeValue = /* @__PURE__ */ __name((value2) => {
|
|
|
168585
168587
|
var harnessSummaryLine = /* @__PURE__ */ __name((value2) => {
|
|
168586
168588
|
return harnessSummarizeValue(value2).split("\n")[0] || "";
|
|
168587
168589
|
}, "harnessSummaryLine");
|
|
168590
|
+
var ansiEscapePattern = /\x1b\[[0-9;?]*[A-Za-z]|\x1b\][^\x07]*(?:\x07|\x1b\\)|\x1b[=>]/g;
|
|
168591
|
+
var harnessStripAnsi = /* @__PURE__ */ __name((text8) => text8.replace(ansiEscapePattern, ""), "harnessStripAnsi");
|
|
168592
|
+
var harnessTerminalOutcome = /* @__PURE__ */ __name((callArg) => {
|
|
168593
|
+
const output = callArg.output;
|
|
168594
|
+
let stdout = "";
|
|
168595
|
+
let stderr = "";
|
|
168596
|
+
let nestedExitCode;
|
|
168597
|
+
if (harnessIsRecord(output)) {
|
|
168598
|
+
stdout = typeof output.stdout === "string" ? output.stdout : harnessStringifyValue(output.stdout ?? "");
|
|
168599
|
+
stderr = typeof output.stderr === "string" ? output.stderr : "";
|
|
168600
|
+
nestedExitCode = typeof output.exitCode === "number" ? output.exitCode : void 0;
|
|
168601
|
+
} else {
|
|
168602
|
+
stdout = harnessStringifyValue(output);
|
|
168603
|
+
}
|
|
168604
|
+
const exitCode3 = typeof callArg.exitCode === "number" ? callArg.exitCode : nestedExitCode;
|
|
168605
|
+
return { stdout, stderr, ...exitCode3 === void 0 ? {} : { exitCode: exitCode3 } };
|
|
168606
|
+
}, "harnessTerminalOutcome");
|
|
168607
|
+
var harnessLastMeaningfulLine = /* @__PURE__ */ __name((text8) => {
|
|
168608
|
+
const lines = harnessStripAnsi(text8).split("\n");
|
|
168609
|
+
for (let index3 = lines.length - 1; index3 >= 0; index3 -= 1) {
|
|
168610
|
+
const line = lines[index3].trim();
|
|
168611
|
+
if (line) return line;
|
|
168612
|
+
}
|
|
168613
|
+
return "";
|
|
168614
|
+
}, "harnessLastMeaningfulLine");
|
|
168615
|
+
var harnessTerminalResultSummary = /* @__PURE__ */ __name((callArg) => {
|
|
168616
|
+
const { stdout, stderr, exitCode: exitCode3 } = harnessTerminalOutcome(callArg);
|
|
168617
|
+
const parts = [];
|
|
168618
|
+
if (exitCode3 !== void 0) parts.push(exitCode3 === 0 ? "exit 0" : `exit ${exitCode3}`);
|
|
168619
|
+
const combined = `${stdout}${stdout && stderr ? "\n" : ""}${stderr}`;
|
|
168620
|
+
const lineCount = combined ? harnessStripAnsi(combined).split("\n").filter((line) => line.trim()).length : 0;
|
|
168621
|
+
if (lineCount > 0) parts.push(`${lineCount} ${lineCount === 1 ? "line" : "lines"}`);
|
|
168622
|
+
else if (exitCode3 !== void 0) parts.push("no output");
|
|
168623
|
+
const lastLine = harnessLastMeaningfulLine(stderr) || harnessLastMeaningfulLine(stdout);
|
|
168624
|
+
const prefix = parts.join(" \xB7 ");
|
|
168625
|
+
if (!lastLine) return prefix;
|
|
168626
|
+
const trimmed = lastLine.length > 160 ? `${lastLine.slice(0, 160)}\u2026` : lastLine;
|
|
168627
|
+
return prefix ? `${prefix} \xB7 ${trimmed}` : trimmed;
|
|
168628
|
+
}, "harnessTerminalResultSummary");
|
|
168588
168629
|
|
|
168589
168630
|
// ts_web/elements/00group-harness/toolregistry.ts
|
|
168590
168631
|
var parseMcpName = /* @__PURE__ */ __name((rawName) => {
|
|
@@ -168620,7 +168661,15 @@ var defaultDescriptors = [
|
|
|
168620
168661
|
return command2 ? `${command2}${cwd2 ? ` \u2014 in ${cwd2}` : ""}` : harnessSummaryLine(call.input);
|
|
168621
168662
|
}, "subtitle"),
|
|
168622
168663
|
defaultExpanded: true,
|
|
168623
|
-
layout: "full-row"
|
|
168664
|
+
layout: "full-row",
|
|
168665
|
+
/*
|
|
168666
|
+
* Only a command that can be PROVEN to have succeeded collapses. An absent exit code is not
|
|
168667
|
+
* evidence of success: a producer that reports a failed command as completed and encodes the
|
|
168668
|
+
* failure in its output would otherwise have that failure hidden behind a one-line summary.
|
|
168669
|
+
* Such a card stays open, and the producer reporting an exit code is the real fix.
|
|
168670
|
+
*/
|
|
168671
|
+
collapseWhenFinished: /* @__PURE__ */ __name((call) => harnessTerminalOutcome(call).exitCode === 0, "collapseWhenFinished"),
|
|
168672
|
+
summary: harnessTerminalResultSummary
|
|
168624
168673
|
},
|
|
168625
168674
|
{
|
|
168626
168675
|
kind: "file-read",
|
|
@@ -171326,30 +171375,17 @@ var applyPatchFirstPath = /* @__PURE__ */ __name((call) => {
|
|
|
171326
171375
|
const match2 = patchText.match(/^\*\*\* (?:Add|Update|Delete) File: (.+)$/m);
|
|
171327
171376
|
return match2 ? match2[1].trim() : "";
|
|
171328
171377
|
}, "applyPatchFirstPath");
|
|
171329
|
-
var ansiEscapePattern = /\x1b\[[0-9;?]*[A-Za-z]|\x1b\][^\x07]*(?:\x07|\x1b\\)|\x1b[=>]/g;
|
|
171330
|
-
var stripAnsi = /* @__PURE__ */ __name((text8) => text8.replace(ansiEscapePattern, ""), "stripAnsi");
|
|
171331
171378
|
var renderTerminal = /* @__PURE__ */ __name((call, helpers) => {
|
|
171332
171379
|
const input = inputRecord(call);
|
|
171333
171380
|
const command2 = String(input.command ?? "");
|
|
171334
|
-
const
|
|
171335
|
-
let stdout = "";
|
|
171336
|
-
let stderr = "";
|
|
171337
|
-
let nestedExitCode;
|
|
171338
|
-
if (harnessIsRecord(output)) {
|
|
171339
|
-
stdout = typeof output.stdout === "string" ? output.stdout : harnessStringifyValue(output.stdout ?? "");
|
|
171340
|
-
stderr = typeof output.stderr === "string" ? output.stderr : "";
|
|
171341
|
-
nestedExitCode = typeof output.exitCode === "number" ? output.exitCode : void 0;
|
|
171342
|
-
} else {
|
|
171343
|
-
stdout = harnessStringifyValue(output);
|
|
171344
|
-
}
|
|
171345
|
-
const exitCode3 = typeof call.exitCode === "number" ? call.exitCode : nestedExitCode;
|
|
171381
|
+
const { stdout, stderr, exitCode: exitCode3 } = harnessTerminalOutcome(call);
|
|
171346
171382
|
const running = call.status === "pending" || call.status === "running";
|
|
171347
171383
|
return b2`
|
|
171348
171384
|
<div class="harness-terminal">
|
|
171349
171385
|
${command2 ? b2`<div class="harness-terminal-command"><span class="prompt">$</span> ${command2}</div>` : ""}
|
|
171350
|
-
${stdout ? b2`<pre class="harness-terminal-output">${
|
|
171351
|
-
${stderr ? b2`<pre class="harness-terminal-output tone-error">${
|
|
171352
|
-
${call.errorText ? b2`<pre class="harness-terminal-output tone-error">${
|
|
171386
|
+
${stdout ? b2`<pre class="harness-terminal-output">${harnessStripAnsi(stdout)}</pre>` : ""}
|
|
171387
|
+
${stderr ? b2`<pre class="harness-terminal-output tone-error">${harnessStripAnsi(stderr)}</pre>` : ""}
|
|
171388
|
+
${call.errorText ? b2`<pre class="harness-terminal-output tone-error">${harnessStripAnsi(call.errorText)}</pre>` : ""}
|
|
171353
171389
|
${running && !stdout && !stderr ? b2`<div class="harness-terminal-running"><span class="cursor"></span> running…</div>` : ""}
|
|
171354
171390
|
${exitCode3 !== void 0 ? b2`<div class="harness-terminal-exit ${exitCode3 === 0 ? "tone-success" : ""}">exit code ${exitCode3}</div>` : ""}
|
|
171355
171391
|
</div>
|
|
@@ -171930,7 +171966,7 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
171930
171966
|
__publicField(this, "fullscreenPortal", null);
|
|
171931
171967
|
__publicField(this, "disclosureFrame", null);
|
|
171932
171968
|
__publicField(this, "returnScrollFrame", null);
|
|
171933
|
-
__publicField(this, "
|
|
171969
|
+
__publicField(this, "subtaskDetailElements", []);
|
|
171934
171970
|
__publicField(this, "subtaskResultResizeObserver", null);
|
|
171935
171971
|
__publicField(this, "terminalTailFollowing", true);
|
|
171936
171972
|
__publicField(this, "terminalScrollHydrated", false);
|
|
@@ -172036,13 +172072,13 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172036
172072
|
if (this.viewState) this.viewState.toolDiffView = this.diffViewOverride;
|
|
172037
172073
|
}, "handleDiffViewChange"));
|
|
172038
172074
|
__publicField(this, "syncSubtaskResultScroll", /* @__PURE__ */ __name(() => {
|
|
172039
|
-
const
|
|
172040
|
-
|
|
172041
|
-
|
|
172042
|
-
|
|
172043
|
-
|
|
172044
|
-
|
|
172045
|
-
|
|
172075
|
+
for (const panel of this.subtaskDetailElements) {
|
|
172076
|
+
panel.classList.toggle("fadeTop", panel.scrollTop > 1);
|
|
172077
|
+
panel.classList.toggle(
|
|
172078
|
+
"fadeBottom",
|
|
172079
|
+
panel.scrollHeight - panel.scrollTop - panel.clientHeight > 1
|
|
172080
|
+
);
|
|
172081
|
+
}
|
|
172046
172082
|
}, "syncSubtaskResultScroll"));
|
|
172047
172083
|
}
|
|
172048
172084
|
get descriptor() {
|
|
@@ -172062,9 +172098,21 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172062
172098
|
return this.allowSubtaskStreams && (this.call.subtask.status.type === "busy" || this.call.subtask.status.type === "error");
|
|
172063
172099
|
}
|
|
172064
172100
|
if (this.call.status === "error" || this.call.isError) return true;
|
|
172101
|
+
if (this.call.status === "completed" && this.resolvedCollapseWhenFinished) return false;
|
|
172065
172102
|
if (typeof descriptor.defaultExpanded === "function") return descriptor.defaultExpanded(this.enrichedCall);
|
|
172066
172103
|
return descriptor.defaultExpanded ?? false;
|
|
172067
172104
|
}
|
|
172105
|
+
get resolvedCollapseWhenFinished() {
|
|
172106
|
+
const collapseWhenFinished = this.descriptor.collapseWhenFinished;
|
|
172107
|
+
if (typeof collapseWhenFinished === "function") return collapseWhenFinished(this.enrichedCall);
|
|
172108
|
+
return collapseWhenFinished ?? false;
|
|
172109
|
+
}
|
|
172110
|
+
/** Outcome line shown only while collapsed; the subtitle already carries the request. */
|
|
172111
|
+
get collapsedSummary() {
|
|
172112
|
+
if (this.isOpen || !this.descriptor.summary) return "";
|
|
172113
|
+
if (this.call.status !== "completed" && this.call.status !== "stopped") return "";
|
|
172114
|
+
return this.descriptor.summary(this.enrichedCall).trim();
|
|
172115
|
+
}
|
|
172068
172116
|
get hasSubtaskPreview() {
|
|
172069
172117
|
return this.allowSubtaskStreams && this.descriptor.kind === "subtask" && this.call.subtask !== void 0;
|
|
172070
172118
|
}
|
|
@@ -172080,10 +172128,15 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172080
172128
|
const open = this.isOpen;
|
|
172081
172129
|
const renderBody = this.bodyMounted || open;
|
|
172082
172130
|
const label = typeof descriptor.label === "function" ? descriptor.label(call) : descriptor.label;
|
|
172083
|
-
const
|
|
172131
|
+
const derivedSubtitle = descriptor.subtitle?.(call) ?? "";
|
|
172132
|
+
const producerTitle = typeof call.title === "string" ? call.title.trim() : "";
|
|
172133
|
+
const subtitle = producerTitle || derivedSubtitle;
|
|
172134
|
+
const subtitleTooltip = producerTitle && derivedSubtitle && derivedSubtitle !== producerTitle ? `${producerTitle}
|
|
172135
|
+
${derivedSubtitle}` : subtitle;
|
|
172084
172136
|
const effectiveStatus = harnessEffectiveToolStatus(call);
|
|
172085
172137
|
const statusTone = effectiveStatus === "completed" ? "success" : effectiveStatus === "stopped" ? "warning" : effectiveStatus;
|
|
172086
172138
|
const duration = harnessFormatDuration(call.startedAt, call.finishedAt);
|
|
172139
|
+
const collapsedSummary = this.collapsedSummary;
|
|
172087
172140
|
return b2`
|
|
172088
172141
|
<div class="harness-card status-${effectiveStatus} ${descriptor.destructive ? "destructive" : ""} ${this.hasSubtaskPreview ? "subtaskPreviewCard" : ""} ${this.hasSubtaskPreview && open ? "subtaskPreviewOpen" : ""} ${this.returnFlash ? "returnFlash" : ""} ${this.outcomeScanTone ? `outcomeScan outcomeScan-${this.outcomeScanTone}` : ""}"
|
|
172089
172142
|
@mouseenter=${this.cancelTerminalTailReturn}
|
|
@@ -172108,7 +172161,8 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172108
172161
|
<span class="toolLabel">${label}</span>
|
|
172109
172162
|
${this.renderMcpBadges(call)}
|
|
172110
172163
|
</span>
|
|
172111
|
-
${subtitle ? b2`<dees-harness-overflow-text class="subtitle" title=${
|
|
172164
|
+
${subtitle ? b2`<dees-harness-overflow-text class="subtitle" title=${subtitleTooltip}>${subtitle}</dees-harness-overflow-text>` : ""}
|
|
172165
|
+
${collapsedSummary ? b2`<dees-harness-overflow-text class="resultSummary" title=${collapsedSummary}>${collapsedSummary}</dees-harness-overflow-text>` : ""}
|
|
172112
172166
|
</span>
|
|
172113
172167
|
<span class="metaColumn">
|
|
172114
172168
|
${call.startedAt ? b2`<span class="duration">${harnessFormatClockTime(call.startedAt)}</span>` : ""}
|
|
@@ -172284,20 +172338,25 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172284
172338
|
frameArg.scrollTop = scrollTopArg;
|
|
172285
172339
|
}
|
|
172286
172340
|
connectSubtaskResultScroll() {
|
|
172287
|
-
const
|
|
172288
|
-
".harness-subtask-detail-result .harness-subtask-detail-text"
|
|
172289
|
-
) ??
|
|
172290
|
-
|
|
172341
|
+
const nextPanels = [...this.shadowRoot?.querySelectorAll(
|
|
172342
|
+
".harness-subtask-detail-brief .harness-subtask-detail-text, .harness-subtask-detail-result .harness-subtask-detail-text"
|
|
172343
|
+
) ?? []];
|
|
172344
|
+
const unchanged = nextPanels.length === this.subtaskDetailElements.length && nextPanels.every((panel, index3) => panel === this.subtaskDetailElements[index3]);
|
|
172345
|
+
if (unchanged) {
|
|
172291
172346
|
this.syncSubtaskResultScroll();
|
|
172292
172347
|
return;
|
|
172293
172348
|
}
|
|
172294
|
-
|
|
172349
|
+
for (const panel of this.subtaskDetailElements) {
|
|
172350
|
+
panel.removeEventListener("scroll", this.syncSubtaskResultScroll);
|
|
172351
|
+
}
|
|
172295
172352
|
this.subtaskResultResizeObserver?.disconnect();
|
|
172296
|
-
this.
|
|
172297
|
-
if (!
|
|
172298
|
-
nextResult.addEventListener("scroll", this.syncSubtaskResultScroll, { passive: true });
|
|
172353
|
+
this.subtaskDetailElements = nextPanels;
|
|
172354
|
+
if (!nextPanels.length) return;
|
|
172299
172355
|
this.subtaskResultResizeObserver ??= new ResizeObserver(this.syncSubtaskResultScroll);
|
|
172300
|
-
|
|
172356
|
+
for (const panel of nextPanels) {
|
|
172357
|
+
panel.addEventListener("scroll", this.syncSubtaskResultScroll, { passive: true });
|
|
172358
|
+
this.subtaskResultResizeObserver.observe(panel);
|
|
172359
|
+
}
|
|
172301
172360
|
this.syncSubtaskResultScroll();
|
|
172302
172361
|
}
|
|
172303
172362
|
async connectedCallback() {
|
|
@@ -172341,8 +172400,10 @@ var _DeesHarnessToolCard = class _DeesHarnessToolCard extends (_a89 = DeesElemen
|
|
|
172341
172400
|
this.bodyResizeObserver?.disconnect();
|
|
172342
172401
|
this.bodyResizeObserver = null;
|
|
172343
172402
|
this.observedBodyInner = null;
|
|
172344
|
-
|
|
172345
|
-
|
|
172403
|
+
for (const panel of this.subtaskDetailElements) {
|
|
172404
|
+
panel.removeEventListener("scroll", this.syncSubtaskResultScroll);
|
|
172405
|
+
}
|
|
172406
|
+
this.subtaskDetailElements = [];
|
|
172346
172407
|
this.subtaskResultResizeObserver?.disconnect();
|
|
172347
172408
|
this.subtaskResultResizeObserver = null;
|
|
172348
172409
|
await super.disconnectedCallback();
|
|
@@ -172564,7 +172625,11 @@ __publicField(_DeesHarnessToolCard, "styles", [
|
|
|
172564
172625
|
.harness-card.subtaskPreviewOpen {
|
|
172565
172626
|
display: flex;
|
|
172566
172627
|
flex-direction: column;
|
|
172567
|
-
|
|
172628
|
+
/*
|
|
172629
|
+
* A cap, not a fixed height: a short brief and result let the card size to their own
|
|
172630
|
+
* text, and only content taller than the cap hands the overflow to the inner scrollers.
|
|
172631
|
+
*/
|
|
172632
|
+
max-height: var(--dees-harness-active-subtask-height, 320px);
|
|
172568
172633
|
box-sizing: border-box;
|
|
172569
172634
|
overflow: hidden;
|
|
172570
172635
|
}
|
|
@@ -172592,7 +172657,27 @@ __publicField(_DeesHarnessToolCard, "styles", [
|
|
|
172592
172657
|
overflow: hidden;
|
|
172593
172658
|
}
|
|
172594
172659
|
|
|
172595
|
-
|
|
172660
|
+
/*
|
|
172661
|
+
* The body takes its height from flex layout rather than a percentage: a capped card has no
|
|
172662
|
+
* definite height for a percentage to resolve against, so a 100% height would collapse to
|
|
172663
|
+
* auto and the inner scrollers would never engage. As a flex item it shrinks to the cap when
|
|
172664
|
+
* the content overflows and sizes to its text when it does not.
|
|
172665
|
+
*/
|
|
172666
|
+
.harness-card.subtaskPreviewOpen .bodyClipFrame {
|
|
172667
|
+
display: flex;
|
|
172668
|
+
flex-direction: column;
|
|
172669
|
+
}
|
|
172670
|
+
|
|
172671
|
+
.harness-card.subtaskPreviewOpen .body {
|
|
172672
|
+
flex: 1;
|
|
172673
|
+
min-height: 0;
|
|
172674
|
+
}
|
|
172675
|
+
|
|
172676
|
+
/* A streaming child fills the cap so its transcript has a stable window to scroll in. */
|
|
172677
|
+
.harness-card.subtaskPreviewOpen:has(.liveSubtaskBody) {
|
|
172678
|
+
height: var(--dees-harness-active-subtask-height, 320px);
|
|
172679
|
+
}
|
|
172680
|
+
|
|
172596
172681
|
.harness-card.subtaskPreviewOpen .subtaskPreview {
|
|
172597
172682
|
min-height: 0;
|
|
172598
172683
|
height: 100%;
|
|
@@ -172682,6 +172767,15 @@ __publicField(_DeesHarnessToolCard, "styles", [
|
|
|
172682
172767
|
font-size: 12px;
|
|
172683
172768
|
}
|
|
172684
172769
|
|
|
172770
|
+
/* Stands in for the body while a finished card is collapsed. */
|
|
172771
|
+
.resultSummary {
|
|
172772
|
+
display: block;
|
|
172773
|
+
margin-top: 2px;
|
|
172774
|
+
color: var(--dees-color-text-secondary);
|
|
172775
|
+
font-family: var(--dees-font-family-mono, monospace);
|
|
172776
|
+
font-size: 11px;
|
|
172777
|
+
}
|
|
172778
|
+
|
|
172685
172779
|
.metaColumn {
|
|
172686
172780
|
display: flex;
|
|
172687
172781
|
align-items: center;
|
|
@@ -175105,6 +175199,8 @@ var _DeesHarnessMessageList = class _DeesHarnessMessageList extends (_a94 = Dees
|
|
|
175105
175199
|
<article
|
|
175106
175200
|
class="virtualItem"
|
|
175107
175201
|
data-virtual-key=${entry.item.key}
|
|
175202
|
+
data-tool-layout=${this.timelineItemLayout(entry.item)}
|
|
175203
|
+
data-tool-count=${this.timelineItemCount(entry.item)}
|
|
175108
175204
|
aria-posinset=${entry.index + 1}
|
|
175109
175205
|
aria-setsize=${this.timelineRenderItems.length}
|
|
175110
175206
|
style=${`--harness-virtual-offset: ${this.virtualOffsets[entry.index] ?? 0}px;`}
|
|
@@ -175127,6 +175223,17 @@ var _DeesHarnessMessageList = class _DeesHarnessMessageList extends (_a94 = Dees
|
|
|
175127
175223
|
}
|
|
175128
175224
|
return indexes.sort((left, right) => left - right);
|
|
175129
175225
|
}
|
|
175226
|
+
/** Mirrors the row's layout onto the virtual wrapper so width rules match the flowed stack. */
|
|
175227
|
+
timelineItemLayout(itemArg) {
|
|
175228
|
+
if (itemArg.kind === "tool-group") return itemArg.layout;
|
|
175229
|
+
if (itemArg.kind === "message") return itemArg.toolLayout ?? "message";
|
|
175230
|
+
return itemArg.kind;
|
|
175231
|
+
}
|
|
175232
|
+
/** Group size, mirrored onto the virtual wrapper so width rules match the flowed stack. */
|
|
175233
|
+
timelineItemCount(itemArg) {
|
|
175234
|
+
if (itemArg.kind !== "tool-group") return 1;
|
|
175235
|
+
return itemArg.messages.length >= 4 ? 4 : itemArg.messages.length;
|
|
175236
|
+
}
|
|
175130
175237
|
renderTimelineItem(itemArg, logicalIndexArg) {
|
|
175131
175238
|
if (itemArg.kind === "tool-group") return this.renderToolGroup(itemArg);
|
|
175132
175239
|
if (itemArg.kind === "message") return this.renderMessage(itemArg, itemArg.key);
|
|
@@ -175193,6 +175300,7 @@ var _DeesHarnessMessageList = class _DeesHarnessMessageList extends (_a94 = Dees
|
|
|
175193
175300
|
data-timeline-key=${groupArg.key}
|
|
175194
175301
|
data-tool-group-id=${groupArg.key}
|
|
175195
175302
|
data-tool-layout=${groupArg.layout}
|
|
175303
|
+
data-tool-count=${count2 >= 4 ? 4 : count2}
|
|
175196
175304
|
>
|
|
175197
175305
|
<div class=${`toolGrid ${countClass}`}>
|
|
175198
175306
|
${repeat4(
|
|
@@ -176089,8 +176197,42 @@ __publicField(_DeesHarnessMessageList, "styles", [
|
|
|
176089
176197
|
transform: translate3d(0, var(--harness-virtual-offset), 0);
|
|
176090
176198
|
}
|
|
176091
176199
|
|
|
176200
|
+
/*
|
|
176201
|
+
* Prose is held to a readable measure while wide payloads keep the whole pane. Applied to
|
|
176202
|
+
* the transcript rows themselves because a message host clips on both axes, so nothing
|
|
176203
|
+
* nested inside one can bleed back out.
|
|
176204
|
+
*/
|
|
176205
|
+
.stack > *,
|
|
176206
|
+
.virtualItem {
|
|
176207
|
+
width: min(var(--dees-harness-content-width, 820px), 100%);
|
|
176208
|
+
margin-inline: auto;
|
|
176209
|
+
}
|
|
176210
|
+
|
|
176211
|
+
.stack > [data-tool-layout='full-row'],
|
|
176212
|
+
.stack > [data-tool-layout='subtask'],
|
|
176213
|
+
.virtualItem[data-tool-layout='full-row'],
|
|
176214
|
+
.virtualItem[data-tool-layout='subtask'] {
|
|
176215
|
+
width: 100%;
|
|
176216
|
+
}
|
|
176217
|
+
|
|
176218
|
+
/*
|
|
176219
|
+
* One or two subagents are read like any other content, so they stay on the measure. The
|
|
176220
|
+
* pane is only worth taking once three or more cards have to sit side by side.
|
|
176221
|
+
*/
|
|
176222
|
+
.stack > [data-tool-layout='subtask'][data-tool-count='1'],
|
|
176223
|
+
.stack > [data-tool-layout='subtask'][data-tool-count='2'],
|
|
176224
|
+
.virtualItem[data-tool-layout='subtask'][data-tool-count='1'],
|
|
176225
|
+
.virtualItem[data-tool-layout='subtask'][data-tool-count='2'] {
|
|
176226
|
+
width: min(var(--dees-harness-content-width, 820px), 100%);
|
|
176227
|
+
}
|
|
176228
|
+
|
|
176092
176229
|
.toolGroup {
|
|
176093
176230
|
min-width: 0;
|
|
176231
|
+
/*
|
|
176232
|
+
* Column packing has to measure the row it happens in, not the scroller, now that a
|
|
176233
|
+
* compact row is narrower than the pane.
|
|
176234
|
+
*/
|
|
176235
|
+
container: harness-transcript / inline-size;
|
|
176094
176236
|
}
|
|
176095
176237
|
|
|
176096
176238
|
.toolGrid {
|
|
@@ -176293,7 +176435,6 @@ var _DeesHarnessComposer = class _DeesHarnessComposer extends (_a95 = DeesElemen
|
|
|
176293
176435
|
this.value = event.currentTarget.value;
|
|
176294
176436
|
this.resetSuggestionInteraction();
|
|
176295
176437
|
this.emitInput(this.value);
|
|
176296
|
-
this.autogrow();
|
|
176297
176438
|
}, "handleTextInput"));
|
|
176298
176439
|
__publicField(this, "handleKeydown", /* @__PURE__ */ __name((event) => {
|
|
176299
176440
|
if (event.isComposing || this.composing) return;
|
|
@@ -176396,7 +176537,6 @@ var _DeesHarnessComposer = class _DeesHarnessComposer extends (_a95 = DeesElemen
|
|
|
176396
176537
|
this.value = "";
|
|
176397
176538
|
this.resetSuggestionInteraction();
|
|
176398
176539
|
this.emitInput("");
|
|
176399
|
-
this.autogrow();
|
|
176400
176540
|
}
|
|
176401
176541
|
willUpdate(changedProperties) {
|
|
176402
176542
|
super.willUpdate(changedProperties);
|
|
@@ -176408,6 +176548,7 @@ var _DeesHarnessComposer = class _DeesHarnessComposer extends (_a95 = DeesElemen
|
|
|
176408
176548
|
this.attachmentGeneration++;
|
|
176409
176549
|
if (!this.attachmentsEnabled || this.disabled) this.handleDragLeave();
|
|
176410
176550
|
}
|
|
176551
|
+
if (changedProperties.has("value")) this.autogrow();
|
|
176411
176552
|
this.syncTextareaSuggestionAria();
|
|
176412
176553
|
}
|
|
176413
176554
|
render() {
|
|
@@ -176909,7 +177050,12 @@ __publicField(_DeesHarnessComposer, "styles", [
|
|
|
176909
177050
|
border: 0;
|
|
176910
177051
|
border-top: 1px solid var(--dees-color-border-subtle);
|
|
176911
177052
|
border-radius: 0;
|
|
176912
|
-
|
|
177053
|
+
/*
|
|
177054
|
+
* The docked bar stays full-bleed — its background and top border belong to the whole
|
|
177055
|
+
* column — while its content is inset to the transcript's measure, so the prompt lines up
|
|
177056
|
+
* with the messages above it instead of floating as a narrower block.
|
|
177057
|
+
*/
|
|
177058
|
+
padding: 10px max(16px, calc((100% - var(--dees-harness-content-width, 820px)) / 2)) 12px;
|
|
176913
177059
|
}
|
|
176914
177060
|
|
|
176915
177061
|
:host([docked]) .composer.dragOver {
|
|
@@ -223321,7 +223467,7 @@ init_group_runtime();
|
|
|
223321
223467
|
// ts_web/00_commitinfo_data.ts
|
|
223322
223468
|
var commitinfo = {
|
|
223323
223469
|
name: "@design.estate/dees-catalog",
|
|
223324
|
-
version: "9.
|
|
223470
|
+
version: "9.8.0",
|
|
223325
223471
|
description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
|
|
223326
223472
|
};
|
|
223327
223473
|
|
|
@@ -223519,10 +223665,13 @@ export {
|
|
|
223519
223665
|
harnessParseTodos,
|
|
223520
223666
|
harnessPillStyles,
|
|
223521
223667
|
harnessStringifyValue,
|
|
223668
|
+
harnessStripAnsi,
|
|
223522
223669
|
harnessSummarizeValue,
|
|
223523
223670
|
harnessSummaryLine,
|
|
223524
223671
|
harnessSupportedImageTypes,
|
|
223525
223672
|
harnessSupportedTextTypes,
|
|
223673
|
+
harnessTerminalOutcome,
|
|
223674
|
+
harnessTerminalResultSummary,
|
|
223526
223675
|
harnessTruncate,
|
|
223527
223676
|
isInViewport,
|
|
223528
223677
|
makeStreamingSimulator,
|