@design.estate/dees-catalog 6.10.1 → 6.11.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 +178 -102
- package/dist_ts_web/00_commitinfo_data.js +1 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +17 -3
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +17 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +60 -10
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +22 -3
- package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +3 -1
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +12 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.js +13 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.js +13 -4
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +2 -0
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +12 -2
- package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/renderers.js +5 -2
- package/dist_ts_web/elements/00group-harness/harness.helpers.js +6 -2
- package/dist_ts_web/elements/00group-harness/interfaces.d.ts +1 -1
- package/package.json +1 -1
- package/readme.hints.md +1 -0
- package/readme.md +21 -9
- package/readme.playbook.md +1 -1
- package/ts_web/00_commitinfo_data.ts +1 -1
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +17 -1
- package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +43 -5
- package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +15 -1
- package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +2 -0
- package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +5 -0
- package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.ts +5 -0
- package/ts_web/elements/00group-harness/dees-harness-todos/dees-harness-todos.ts +12 -3
- package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +5 -0
- package/ts_web/elements/00group-harness/dees-harness-tool-card/renderers.ts +4 -1
- package/ts_web/elements/00group-harness/harness.helpers.ts +5 -1
- package/ts_web/elements/00group-harness/interfaces.ts +1 -1
|
@@ -266,7 +266,11 @@ export const harnessParseTodos = (value) => {
|
|
|
266
266
|
const content = String(entry.content ?? entry.subject ?? entry.title ?? '').trim();
|
|
267
267
|
if (!content)
|
|
268
268
|
continue;
|
|
269
|
-
const status = entry.status === 'completed'
|
|
269
|
+
const status = entry.status === 'completed'
|
|
270
|
+
|| entry.status === 'in_progress'
|
|
271
|
+
|| entry.status === 'cancelled'
|
|
272
|
+
? entry.status
|
|
273
|
+
: 'pending';
|
|
270
274
|
result.push({
|
|
271
275
|
id: entry.id !== undefined ? String(entry.id) : undefined,
|
|
272
276
|
content,
|
|
@@ -301,4 +305,4 @@ export const harnessSummarizeValue = (value) => {
|
|
|
301
305
|
export const harnessSummaryLine = (value) => {
|
|
302
306
|
return harnessSummarizeValue(value).split('\n')[0] || '';
|
|
303
307
|
};
|
|
304
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFybmVzcy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9oYXJuZXNzLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEQsV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQy9DLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLFlBQVk7SUFDWixVQUFVO0lBQ1YsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQTJCO0lBQ25ELEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixJQUFJLEVBQUUsV0FBVztJQUNqQixJQUFJLEVBQUUsWUFBWTtJQUNsQixHQUFHLEVBQUUsWUFBWTtJQUNqQixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixHQUFHLEVBQUUsWUFBWTtJQUNqQixFQUFFLEVBQUUsZUFBZTtJQUNuQixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLEVBQUUsRUFB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
|
|
308
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaGFybmVzcy5oZWxwZXJzLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaGFybmVzcy9oYXJuZXNzLmhlbHBlcnMudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBYUEsTUFBTSxDQUFDLE1BQU0seUJBQXlCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDMUQsTUFBTSxDQUFDLE1BQU0sOEJBQThCLEdBQUcsRUFBRSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFFL0QsTUFBTSxDQUFDLE1BQU0sMEJBQTBCLEdBQUcsSUFBSSxHQUFHLENBQUM7SUFDaEQsV0FBVztJQUNYLFlBQVk7SUFDWixZQUFZO0lBQ1osV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sQ0FBQyxNQUFNLHlCQUF5QixHQUFHLElBQUksR0FBRyxDQUFDO0lBQy9DLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIscUJBQXFCO0lBQ3JCLGlCQUFpQjtJQUNqQixrQkFBa0I7SUFDbEIsVUFBVTtJQUNWLFdBQVc7SUFDWCxpQkFBaUI7SUFDakIsZUFBZTtJQUNmLFlBQVk7SUFDWixVQUFVO0lBQ1YsV0FBVztDQUNaLENBQUMsQ0FBQztBQUVILE1BQU0sb0JBQW9CLEdBQTJCO0lBQ25ELEdBQUcsRUFBRSxVQUFVO0lBQ2YsR0FBRyxFQUFFLFVBQVU7SUFDZixJQUFJLEVBQUUsV0FBVztJQUNqQixJQUFJLEVBQUUsWUFBWTtJQUNsQixHQUFHLEVBQUUsWUFBWTtJQUNqQixFQUFFLEVBQUUsaUJBQWlCO0lBQ3JCLElBQUksRUFBRSxrQkFBa0I7SUFDeEIsS0FBSyxFQUFFLGtCQUFrQjtJQUN6QixHQUFHLEVBQUUsWUFBWTtJQUNqQixFQUFFLEVBQUUsZUFBZTtJQUNuQixHQUFHLEVBQUUsaUJBQWlCO0lBQ3RCLEdBQUcsRUFBRSxXQUFXO0lBQ2hCLEdBQUcsRUFBRSxlQUFlO0lBQ3BCLEVBQUUsRUFB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
|
|
@@ -398,7 +398,7 @@ export interface IHarnessGroupContextDetail {
|
|
|
398
398
|
clientY: number;
|
|
399
399
|
originalEvent: MouseEvent;
|
|
400
400
|
}
|
|
401
|
-
export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed';
|
|
401
|
+
export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled';
|
|
402
402
|
export interface IHarnessTodoItem {
|
|
403
403
|
id?: string;
|
|
404
404
|
content: string;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@design.estate/dees-catalog",
|
|
3
|
-
"version": "6.
|
|
3
|
+
"version": "6.11.0",
|
|
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",
|
package/readme.hints.md
CHANGED
|
@@ -13,6 +13,7 @@
|
|
|
13
13
|
- Group identity is retained through front-window eviction while any card remains. Untouched projected subtasks collapse individually on completion without adding a second grid-level disclosure; other tools keep descriptor or user disclosure state.
|
|
14
14
|
- `IHarnessToolCall.subtask` is an authoritative bounded child-session preview owned by the host. dees-catalog never fetches or subscribes to a runtime.
|
|
15
15
|
- Existing child messages may receive deltas with one `parentMessageId`. Newly introduced child messages require a complete parent `tool-update` snapshot first.
|
|
16
|
+
- `markdownWhileStreaming` defaults to true across chat, message-list, message, and tool-card hosts. Setting it false at an outer host keeps outer and nested child streams plain until the final message-end parse; forward it through render bindings and never add it to timeline rebuild conditions.
|
|
16
17
|
- Inline subagent streams stop after one level through `allowSubtaskStreams`; deeper sessions use `harness-subtask-open`. A projection's `subtask.sessionId` is authoritative for drill-in; calls without a projection continue to use the existing `childSessionId` field.
|
|
17
18
|
- Busy subtask cards slot Agent Brief into the nested message list's scroll flow. Terminal subtasks remove the nested chat and render Agent Brief, then Result, then the bottom drill-in action.
|
|
18
19
|
- Subtask scroll surfaces hide visual scrollbars and toggle 40px top/bottom fades from actual remaining scroll content; never show an edge fade when already at that edge.
|
package/readme.md
CHANGED
|
@@ -1768,7 +1768,7 @@ The `00group-harness` family renders what an agent harness produces — streamin
|
|
|
1768
1768
|
|
|
1769
1769
|
#### `DeesHarnessChat`
|
|
1770
1770
|
|
|
1771
|
-
The assembled chat: optional toolbar (heading, usage chip, and session-details control), streaming message list with inline permission cards, transcript status line, and docked composer.
|
|
1771
|
+
The assembled chat: optional toolbar (heading, usage chip, host-supplied actions, and session-details control), streaming message list with inline permission cards, transcript status line, and docked composer.
|
|
1772
1772
|
|
|
1773
1773
|
```typescript
|
|
1774
1774
|
const chat = document.querySelector('dees-harness-chat');
|
|
@@ -1782,6 +1782,16 @@ chat.accountOptions = [
|
|
|
1782
1782
|
];
|
|
1783
1783
|
chat.modelOptions = ['gpt-5.5', 'o4-mini'];
|
|
1784
1784
|
chat.effortOptions = ['high', 'medium', 'low'];
|
|
1785
|
+
chat.markdownWhileStreaming = false; // optional: plain streams, one final parse at message end
|
|
1786
|
+
chat.toolbarActions = [
|
|
1787
|
+
{
|
|
1788
|
+
id: 'refresh',
|
|
1789
|
+
label: 'Refresh conversation',
|
|
1790
|
+
iconName: 'lucide:RefreshCw',
|
|
1791
|
+
tooltip: 'Refresh conversation',
|
|
1792
|
+
action: () => refreshConversation(),
|
|
1793
|
+
},
|
|
1794
|
+
];
|
|
1785
1795
|
const commandSuggestions = [
|
|
1786
1796
|
{ label: 'Explain code', value: 'Explain the selected code' },
|
|
1787
1797
|
{ label: 'Review diff', value: 'Review the current diff', description: 'Focus on bugs and regressions.' },
|
|
@@ -1815,21 +1825,23 @@ chat.applyDelta({
|
|
|
1815
1825
|
});
|
|
1816
1826
|
```
|
|
1817
1827
|
|
|
1818
|
-
Key props: `messages`, `permissions`, `questions`, `status`, `transcriptKey`, `hasEarlierMessages`/`loadingEarlier`, `usage`, `todos`/`showTodosPanel`, `sessionMetrics`, `scratchpad`/`scratchpadBusy`/`scratchpadError`, `sessionIntelligenceEnabled`/`intelligenceExchanges`/`intelligenceBusy`/`intelligenceError`, `showSessionSidebar`, `heading`, `subheading`, `showToolbar`, `busy`, `queuedCount`, `disabled`, `suggestions`, `account`/`accountOptions`, `model`/`modelOptions`, `reasoningEffort`/`effortOptions`, `mode`/`modeOptions`, `toolRegistry`. `suggestions` is forwarded unchanged to the controlled composer. Account options use human-readable `label` values and opaque stable `value` identifiers. The status line renders inside the transcript column (it never pushes between the session panel and the composer), and both the toolbar and the docked composer cast a subtle shadow over the scrolling messages.
|
|
1828
|
+
Key props: `messages`, `permissions`, `questions`, `status`, `transcriptKey`, `hasEarlierMessages`/`loadingEarlier`, `usage`, `todos`/`todosAuthoritative`/`showTodosPanel`, `sessionMetrics`, `scratchpad`/`scratchpadBusy`/`scratchpadError`, `sessionIntelligenceEnabled`/`intelligenceExchanges`/`intelligenceBusy`/`intelligenceError`, `showSessionSidebar`, `heading`, `subheading`, `toolbarActions`, `showToolbar`, `busy`, `queuedCount`, `steeringEnabled`, `disabled`, `suggestions`, `account`/`accountOptions`, `model`/`modelOptions`, `reasoningEffort`/`effortOptions`, `mode`/`modeOptions`, `markdownWhileStreaming`, `toolRegistry`. `toolbarActions` accepts `IHarnessChatToolbarAction[]`; each action has `id`, human-readable `label`, `iconName`, `action`, and optional `tooltip`/`disabled`, and renders immediately before the session-details toggle. `disabled: true` makes only that toolbar action inert and prevents its callback without changing the chat-level `disabled` state. `markdownWhileStreaming` defaults to `true`; setting it to `false` keeps active outer and nested subtask markdown as plain text, then performs the final markdown parse when `message-end` arrives. `suggestions` is forwarded unchanged to the controlled composer. Account options use human-readable `label` values and opaque stable `value` identifiers. The status line renders inside the transcript column (it never pushes between the session panel and the composer), and both the toolbar and the docked composer cast a subtle shadow over the scrolling messages.
|
|
1819
1829
|
|
|
1820
1830
|
A **session side panel** shows Tasks, Tools & Subagents, Tokens, Session Scratchpad, and Session Intelligence next to the transcript. Its sections form a single-open accordion: opening one collapses the others, clicking the open heading collapses all, and each expanded section owns its scrolling while every heading remains visible. Collapsed sections retain their region wrapper but omit the content subtree until expansion; sidebar-owned scratchpad and intelligence drafts survive that lazy remount. Tools & Subagents separates active calls from terminal history and derives both directly from top-level tool messages still present in the host's retained transcript window; evicted calls are not cached. Long activity labels and descriptions use a 40px right-edge fade instead of ellipses, reveal the full line on hover, and run through once after the two-second delay when their section has measurable width. Session Intelligence keeps its exchange history scrollable above a docked, chat-style question composer. Set `.todos` explicitly, or leave it empty and the chat derives tasks from the newest todo tool call in `messages`; `showTodosPanel={false}` hides only that section. Unknown token metrics remain absent. The toolbar controls the session panel; host-owned navigation controls belong outside the chat component. In narrow containers the session panel becomes an accessible overlay; when the toolbar is disabled, an inline Session details control keeps it reachable. `showSessionSidebar={false}` disables the complete panel. Methods: `applyDelta()`, `focusComposer()`, `clearComposer()`, `scrollToBottom()`. Events (also from children, all composed): `harness-send`, `harness-steer`, `harness-abort`, `harness-input`, `harness-attachments-change`, `harness-attachment-error`, `harness-account-change`, `harness-model-change`, `harness-mode-change`, `harness-permission-response`, `harness-question-response`, `harness-subtask-open`, `harness-scratchpad-save`, `harness-session-intelligence-ask`.
|
|
1821
1831
|
|
|
1832
|
+
Set `.todosAuthoritative=${true}` when an empty host-owned task list must suppress transcript-derived fallback. A changed `transcriptKey` also clears the previous session's unsent Session Intelligence question while preserving the existing scratchpad revision handling.
|
|
1833
|
+
|
|
1822
1834
|
History paging adds the composed child event `harness-load-earlier`.
|
|
1823
1835
|
|
|
1824
1836
|
#### `DeesHarnessMessageList`
|
|
1825
1837
|
|
|
1826
1838
|
Scrollable streaming-safe log. Up to 40 canonical entries (`messages` + `permissions` + `questions`) keep keyed full-timeline DOM; larger inputs activate a measured variable-height window with 800px overscan and return to full rendering when they shrink. Rows outside that overscanned window are unmounted, except focused rows, both endpoints of an active selection, and fullscreen-owned cards, which remain mounted until the interaction ends; threshold-mode changes are likewise deferred while protected DOM is active. `applyDelta()` targets a mounted message or mutates its offscreen backing model. Markdown output, disclosures, reasoning expansion, question drafts, permission choices, diff layout, terminal scroll state, and live nested-transcript state restore from retained data after an actual eviction. Hosts may pass a stable mutable `IHarnessTranscriptViewState` through `viewState`; it must contain `messages`, `permissions`, and `questions` maps. The list creates entries for current canonical IDs, deletes records for removed IDs, and session-keys and prunes live nested-subtask records. Without that prop, equivalent state remains list-local. Set `transcriptKey` to the stable identity of the displayed transcript so reused components reset scroll-local state between chats. When `hasEarlierMessages` is true, an intentional upward gesture reaching the top emits one bubbling, composed `harness-load-earlier` event. Set `loadingEarlier` while handling it; the next `true` to `false` transition rearms the event. Initial rendering, anchor restoration, and other component-owned scrolling never emit it.
|
|
1827
1839
|
|
|
1828
|
-
Producers with authoritative source chronology can set `IHarnessMessage.order` to `{ messageIndex, partIndex }`; explicitly ordered messages retain that relative order while timestamps continue to place legacy messages and ancillary cards. Consecutive tool calls use one generic responsive-grid pipeline at their chronological position, partitioned by descriptor layout: compact tools share rows with compact tools, subagents share rows only with subagents, and terminal plus file-write cards span a whole row. Consecutive same-layout runs are always capped at four cards per group row, even when their tool kinds differ. Columns respond to transcript content width rather than the viewport, and status changes never regroup cards. Untouched projected subtask cards collapse individually on completion with the normal disclosure animation; other cards retain their descriptor or user-selected disclosure state. Auto-follow responds to streamed growth but does not repeatedly repin while a disclosure shrinks. Permission requests, questions, and nested-stream limits behave as before. Props: `messages`, `permissions`/`permissionsBusy`, `questions`, `status`, `viewState`, `transcriptKey`, `hasEarlierMessages`, `loadingEarlier`, `autoFollow`, `hideScrollbar`, `fadeScrollEdges`, `showRoles`, `showTimestamps`, `allowSubtaskStreams`, `emptyTitle`/`emptyText` (+ `slot="empty"`). Native browser find and selection cover the mounted window; hosts that require complete-history search or copy should operate on their canonical `messages`, `permissions`, and `questions` models.
|
|
1840
|
+
Producers with authoritative source chronology can set `IHarnessMessage.order` to `{ messageIndex, partIndex }`; explicitly ordered messages retain that relative order while timestamps continue to place legacy messages and ancillary cards. Consecutive tool calls use one generic responsive-grid pipeline at their chronological position, partitioned by descriptor layout: compact tools share rows with compact tools, subagents share rows only with subagents, and terminal plus file-write cards span a whole row. Consecutive same-layout runs are always capped at four cards per group row, even when their tool kinds differ. Columns respond to transcript content width rather than the viewport, and status changes never regroup cards. Untouched projected subtask cards collapse individually on completion with the normal disclosure animation; other cards retain their descriptor or user-selected disclosure state. Auto-follow responds to streamed growth but does not repeatedly repin while a disclosure shrinks. Permission requests, questions, and nested-stream limits behave as before. Props: `messages`, `permissions`/`permissionsBusy`, `questions`, `status`, `viewState`, `transcriptKey`, `hasEarlierMessages`, `loadingEarlier`, `autoFollow`, `hideScrollbar`, `fadeScrollEdges`, `showRoles`, `showTimestamps`, `allowSubtaskStreams`, `markdownWhileStreaming` (default `true`), `emptyTitle`/`emptyText` (+ `slot="empty"`). Native browser find and selection cover the mounted window; hosts that require complete-history search or copy should operate on their canonical `messages`, `permissions`, and `questions` models.
|
|
1829
1841
|
|
|
1830
1842
|
#### `DeesHarnessMessage`
|
|
1831
1843
|
|
|
1832
|
-
One message: role accent, markdown (assistant default, `message.markdown` overrides), attachments grid, reasoning parts, streaming cursor, usage/error footer. Markdown renders through `domtools.plugins.smartmarkdown` (GFM, sanitized)
|
|
1844
|
+
One message: role accent, markdown (assistant default, `message.markdown` overrides), attachments grid, reasoning parts, streaming cursor, usage/error footer. Markdown renders through `domtools.plugins.smartmarkdown` (GFM, sanitized). `markdownWhileStreaming` defaults to `true`, with throttled ≥150 ms re-parses while streaming; set it to `false` to retain plain text during the stream and parse once when the message ends. Fenced code is highlighted lazily after the final parse. Streaming methods: `appendTextDelta()`, `appendReasoningDelta()`, `endReasoning()`, `endStream(usage?, error?)`. Direct consumers may set `allowSubtaskStreams` false to suppress nested previews. Subtask drill-in emits the composed `harness-subtask-open` event with `{ sessionId, call }`.
|
|
1833
1845
|
|
|
1834
1846
|
#### `DeesHarnessReasoning`
|
|
1835
1847
|
|
|
@@ -1839,7 +1851,7 @@ One message: role accent, markdown (assistant default, `message.markdown` overri
|
|
|
1839
1851
|
|
|
1840
1852
|
Tool-call card: shared chrome (icon, label, subtitle, status pill, duration, MCP badges) with a per-kind body. Kind resolution goes through `DeesHarnessToolRegistry` (see below); bodies for the seeded kinds — terminal, file-read, file-write (renders a before/after diff via `dees-dataview-codebox` when the input carries previous content), file-delete, dir-list, browser (inline screenshots), http, json, search, subtask, project-task, todo, mcp, unknown — live in `renderers.ts`. File-write cards retain the user's inline/split choice while the same call updates. Numeric patch hunks preserve their source line numbers; patches and replacement snippets without coordinates hide gutters rather than presenting fabricated positions. Overflowing subtitles use a 40px right-edge fade and reveal the full line on hover plus once after a two-second initial delay. Expand/collapse always uses a smooth disclosure transition. Initially closed bodies mount lazily on first expansion, then retain the same DOM and become inert plus `aria-hidden` while closed. Long outputs truncate at 6,000 chars with a "Show all" expander. Terminal and error cards open by default. Terminal output uses a black inner log surface and follows the live tail after reaching the card-height cap. Scrolling upward detaches the tail; leaving the card returns to the bottom after five seconds, while re-entering cancels that pending return. Terminal calls may provide `exitCode` separately when `output` is one combined process stream; the renderer retains support for `{ stdout, stderr, exitCode }` output objects.
|
|
1841
1853
|
|
|
1842
|
-
Subtask calls may carry `subtask: IHarnessSubtaskStream`. While a projected child is busy, its Agent Brief is the leading item inside the same independently scrolling child transcript as its messages, permissions, questions, and status; no extra pinned or boxed brief sits above it. Dynamic 40px edge fades appear at the top only when content exists above and at the bottom only when content exists below, while wheel/touch scrolling remains available without visible scrollbars. Loading and unavailable projections reserve the same stable space. Once the child becomes idle or errored, the live transcript is removed from the card body and the disclosure cleanly renders Agent Brief followed by a scrollbar-free scrolling Result with the same position-aware edge fades; the full transcript remains available through the final bottom-positioned Open subagent chat action. `subtask.sessionId` is authoritative for drill-in when a projection exists; calls without a projection continue to use the existing `childSessionId` field. Authoritatively busy previews open by default and every expanded preview is bounded by `--dees-harness-active-subtask-height` (default `320px`), including its completion transition. The user's local expand/collapse choice wins. Completed subtask cards stay in their subtask-only chronological grid and untouched cards collapse individually without a grid-level summary. Hidden retained previews pause auto-follow observation without unmounting their DOM and catch up to the newest child content when reopened. Set `allowSubtaskStreams` false on a direct tool-card consumer to suppress the preview. The host remains responsible for hydration, transfer limits, authorization, gap recovery, and updating the shared objects; `truncated` projections visibly disclose omitted earlier messages.
|
|
1854
|
+
Subtask calls may carry `subtask: IHarnessSubtaskStream`. While a projected child is busy, its Agent Brief is the leading item inside the same independently scrolling child transcript as its messages, permissions, questions, and status; no extra pinned or boxed brief sits above it. Dynamic 40px edge fades appear at the top only when content exists above and at the bottom only when content exists below, while wheel/touch scrolling remains available without visible scrollbars. Loading and unavailable projections reserve the same stable space. Once the child becomes idle or errored, the live transcript is removed from the card body and the disclosure cleanly renders Agent Brief followed by a scrollbar-free scrolling Result with the same position-aware edge fades; the full transcript remains available through the final bottom-positioned Open subagent chat action. `subtask.sessionId` is authoritative for drill-in when a projection exists; calls without a projection continue to use the existing `childSessionId` field. Authoritatively busy previews open by default and every expanded preview is bounded by `--dees-harness-active-subtask-height` (default `320px`), including its completion transition. The user's local expand/collapse choice wins. Completed subtask cards stay in their subtask-only chronological grid and untouched cards collapse individually without a grid-level summary. Hidden retained previews pause auto-follow observation without unmounting their DOM and catch up to the newest child content when reopened. `markdownWhileStreaming` defaults to `true` and is forwarded to the nested child transcript; direct tool-card hosts can set it to `false` for the same parse-on-completion policy. Set `allowSubtaskStreams` false on a direct tool-card consumer to suppress the preview. The host remains responsible for hydration, transfer limits, authorization, gap recovery, and updating the shared objects; `truncated` projections visibly disclose omitted earlier messages.
|
|
1843
1855
|
|
|
1844
1856
|
```typescript
|
|
1845
1857
|
delegateMessage.toolCall = {
|
|
@@ -1874,7 +1886,7 @@ Custom tool renderers receive `IHarnessToolRenderHelpers`. Its `diffBlock(before
|
|
|
1874
1886
|
|
|
1875
1887
|
`server__tool` names resolve automatically to the MCP kind with server + annotation badges (`readOnlyHint` → success, `destructiveHint` → error, `openWorldHint` → warning). Per-element isolation: assign a forked registry to `.toolRegistry`.
|
|
1876
1888
|
|
|
1877
|
-
Descriptors may set `layout: 'compact' | 'full-row' | 'subtask'` to control transcript grid packing; omitted custom descriptors default to `compact`. The built-in terminal and file-write descriptors are `full-row`, while `delegate`, `subagent`, and `task` calls with child-session metadata use the isolated `subtask` lane. A `task` call without child-session metadata uses compact project-task presentation only when its input has a `list`, `create`, `update`, `delete`, or `clear` action; other `task` calls remain subtasks for OpenCode compatibility. Project tasks prefer authoritative `{ tasks }`, `{ task }`, or `{ state: { tasks } }` output
|
|
1889
|
+
Descriptors may set `layout: 'compact' | 'full-row' | 'subtask'` to control transcript grid packing; omitted custom descriptors default to `compact`. The built-in terminal and file-write descriptors are `full-row`, while `delegate`, `subagent`, and `task` calls with child-session metadata use the isolated `subtask` lane. A `task` call without child-session metadata uses compact project-task presentation only when its input has a `list`, `create`, `update`, `delete`, or `clear` action; other `task` calls remain subtasks for OpenCode compatibility. Project tasks prefer authoritative `{ tasks }`, `{ task }`, or `{ state: { tasks } }` output. `pending`, `in_progress`, `completed`, and `cancelled` statuses use task-list presentation; other statuses remain visible as raw output instead of being normalized. `todowrite`, `todo_write`, and `todoread` retain todo presentation.
|
|
1878
1890
|
|
|
1879
1891
|
Live tool cards use a subtle moving scan while pending or running. When the same call reaches a terminal state, the continuing scan fades toward the normal card and a faster, subtle green success scan or red error scan sweeps across it. Historical calls rendered as already complete do not replay the outcome scan.
|
|
1880
1892
|
|
|
@@ -1902,13 +1914,13 @@ Prompt input: autogrow textarea, attachment picker/paste/drag-drop with configur
|
|
|
1902
1914
|
|
|
1903
1915
|
Set `suggestions` to `IHarnessComposerSuggestion[]`, where each item is `{ label, value, description? }`. The composer does not filter or generate suggestions: listen for `harness-input`, update the controlled `value`, and provide a fresh filtered array. While the textarea owns focus, the listbox stays anchored above the composer; moving focus to another control closes it. Arrow keys wrap through rows, Enter chooses the active row, and Escape dismisses the current list until the next text input or fresh suggestions array. Choosing a row sets `value` to the suggestion's `value` and emits the existing bubbling/composed `harness-input` event; it does not emit `harness-send`.
|
|
1904
1916
|
|
|
1905
|
-
While `busy`, Stop renders as an additional button and Send stays available so hosts can queue messages. With an empty prompt
|
|
1917
|
+
While `busy`, Stop renders as an additional button and Send stays available so hosts can queue messages. A positive `queuedCount` remains visible independently of steering support. With an empty prompt, `queuedCount > 0`, and `steeringEnabled` left true, the primary action becomes **Steer now** (`harness-steer` event) to force the agent to continue with the queued messages immediately. Set `steeringEnabled` false when the host can queue but does not implement that action.
|
|
1906
1918
|
|
|
1907
1919
|
Set `modeOptions` (e.g. `['Planning', 'Building']`) to render a segmented **mode switcher**; the active `mode` changes on click — or **Shift+Tab** inside the prompt cycles it — and emits `harness-mode-change`. Inside `dees-harness-chat` the composer renders `docked` — flush edge-to-edge with a top border and an upward shadow (`--dees-shadow-up-sm`) so it meets the transcript and the session panel like the toolbar does; standalone composers keep the floating-card chrome.
|
|
1908
1920
|
|
|
1909
1921
|
#### `DeesHarnessTodos`
|
|
1910
1922
|
|
|
1911
|
-
Agent task list for `IHarnessTodoItem[]` — completed items dim with a check and strikethrough, the in-progress item leads with a pulsing accent marker, and an optional heading shows `completed/total` progress. Used automatically as the todo tool-card body (`harnessParseTodos` normalizes tool input shapes) and standalone for a "current tasks" sidebar panel fed from the latest `todowrite` call.
|
|
1923
|
+
Agent task list for `IHarnessTodoItem[]` — completed items dim with a check and strikethrough, cancelled items use a muted X and strikethrough, the in-progress item leads with a pulsing accent marker, and an optional heading shows `completed/total` progress. Used automatically as the todo tool-card body (`harnessParseTodos` normalizes tool input shapes) and standalone for a "current tasks" sidebar panel fed from the latest `todowrite` call.
|
|
1912
1924
|
|
|
1913
1925
|
#### `DeesHarnessStatus`
|
|
1914
1926
|
|
|
@@ -1922,7 +1934,7 @@ Token usage chip (`in · out · total`, `compact` shows the total only); cache r
|
|
|
1922
1934
|
|
|
1923
1935
|
Generic session-detail panel that composes Tasks, Tools & Subagents, Tokens, Session Scratchpad, and Session Intelligence sections. Headings stay fixed in a single-open accordion; Session Intelligence splits its expanded body into independently scrolling history and a docked question composer. Set `.toolMessages` to top-level tool messages from the currently retained transcript window and `.toolRegistry` for matching labels/icons; active subagents use authoritative child status, and removed messages disappear without a second history cache. The host also supplies `IHarnessSessionMetrics`, `IHarnessScratchpad`, and `IHarnessIntelligenceExchange[]`; the component never loads or persists data itself. Context percentage and its progress bar render only when both `currentContextTokens` and a positive `maxContextTokens` are present.
|
|
1924
1936
|
|
|
1925
|
-
Scratchpad edits emit `harness-scratchpad-save` with `{ text, expectedRevision }`. A newer incoming revision preserves a dirty local draft and offers explicit **Discard draft** and **Keep draft on latest** actions before saving can continue. Intelligence questions emit `harness-session-intelligence-ask` with `{ question }`; exchanges and busy/error states remain host-controlled.
|
|
1937
|
+
Scratchpad edits emit `harness-scratchpad-save` with `{ text, expectedRevision }`. A newer incoming revision preserves a dirty local draft and offers explicit **Discard draft** and **Keep draft on latest** actions before saving can continue. Intelligence questions emit `harness-session-intelligence-ask` with `{ question }`; exchanges and busy/error states remain host-controlled. Direct sidebar hosts should update `sessionKey` when changing sessions; `DeesHarnessChat` forwards `transcriptKey` automatically.
|
|
1926
1938
|
|
|
1927
1939
|
#### `DeesHarnessSessionList`
|
|
1928
1940
|
|
package/readme.playbook.md
CHANGED
|
@@ -438,7 +438,7 @@ Components that render continuously arriving data (agent chat, logs) follow the
|
|
|
438
438
|
|
|
439
439
|
- **Props are the source of truth; deltas are the fast path.** The host owns the array (e.g. `.messages`). Incremental updates go through `applyDelta()`, which mutates the same object instance held in the array and normally calls `requestUpdate()` on the one affected child element. Top-level tool updates also refresh derived activity. A later wholesale re-assignment of the array is therefore idempotent — no divergence between streamed and re-set state.
|
|
440
440
|
- **Keyed `repeat` for identity.** List children render via `directives.repeat` keyed by a stable id so streaming never recreates sibling DOM (which would drop scroll position, expansion state, and selection).
|
|
441
|
-
- **Cheap while streaming, rich when done.**
|
|
441
|
+
- **Cheap while streaming, rich when done.** `markdownWhileStreaming` defaults to `true`, so active markdown is parsed on a throttled ≥150 ms, token-guarded path while syntax highlighting waits for the final parse. Set the policy to `false` on a chat, message list, message, or tool card to keep active text plain and perform one final parse at `message-end`; the assembled chat forwards the setting through outer messages and nested subtask transcripts.
|
|
442
442
|
- **Scroll follow with user override.** Auto-scroll only when the user is already pinned to the bottom (`scrollHeight - scrollTop - clientHeight < threshold`); otherwise show a "jump to latest" chip. Intent-based following remains active until explicit user scroll intent, while deferred frame checks and the `ResizeObserver` re-pin only when the scroll content grows. Streamed growth and the scroll therefore move as one motion without treating disclosure shrink as new content. Disconnect the observer and clear its size baseline in `disconnectedCallback`; retained hidden nested transcripts disable auto-follow observation until reopened.
|
|
443
443
|
- **Interaction state lives on the child.** Expand/collapse (reasoning, tool cards) is element-local state seeded from streaming state, descriptor defaults, errors, and authoritative subtask status; once the user toggles it, parent re-renders cannot reset that choice.
|
|
444
444
|
- **Nested streams replace authoritatively, then delta in place.** A subtask preview arrives through the parent tool call as a complete bounded snapshot. Existing child messages may then receive one-level deltas addressed by `parentMessageId`; a delta never invents a missing child message. The producer adds that message to its source-of-truth snapshot first.
|
|
@@ -3,6 +3,6 @@
|
|
|
3
3
|
*/
|
|
4
4
|
export const commitinfo = {
|
|
5
5
|
name: '@design.estate/dees-catalog',
|
|
6
|
-
version: '6.
|
|
6
|
+
version: '6.11.0',
|
|
7
7
|
description: 'A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript.'
|
|
8
8
|
}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { html } from '@design.estate/dees-element';
|
|
2
|
-
import type { DeesHarnessChat } from './dees-harness-chat.js';
|
|
2
|
+
import type { DeesHarnessChat, IHarnessChatToolbarAction } from './dees-harness-chat.js';
|
|
3
3
|
import type { IHarnessMessage, IHarnessPermissionRequest, IHarnessToolCall } from '../interfaces.js';
|
|
4
4
|
import { harnessDemoConversation } from '../harness.demodata.js';
|
|
5
5
|
|
|
@@ -990,6 +990,22 @@ export const demoFunc = () => html`
|
|
|
990
990
|
.modeOptions=${['Planning', 'Building']}
|
|
991
991
|
.modelOptions=${['gpt-5.5', 'gpt-5', 'o4-mini']}
|
|
992
992
|
.effortOptions=${['xhigh', 'high', 'medium', 'low']}
|
|
993
|
+
.toolbarActions=${([
|
|
994
|
+
{
|
|
995
|
+
id: 'refresh',
|
|
996
|
+
label: 'Refresh conversation',
|
|
997
|
+
iconName: 'lucide:RefreshCw',
|
|
998
|
+
action: () => console.log('refresh conversation'),
|
|
999
|
+
},
|
|
1000
|
+
{
|
|
1001
|
+
id: 'delete',
|
|
1002
|
+
label: 'Delete conversation',
|
|
1003
|
+
iconName: 'lucide:Trash2',
|
|
1004
|
+
disabled: true,
|
|
1005
|
+
action: () => console.log('delete conversation'),
|
|
1006
|
+
},
|
|
1007
|
+
] satisfies IHarnessChatToolbarAction[])}
|
|
1008
|
+
.markdownWhileStreaming=${false}
|
|
993
1009
|
.usage=${{ inputTokens: 18_400, outputTokens: 3_100, totalTokens: 21_500 }}
|
|
994
1010
|
.sessionMetrics=${{
|
|
995
1011
|
lifetimeUsedTokens: 184_320,
|
|
@@ -46,6 +46,14 @@ declare global {
|
|
|
46
46
|
}
|
|
47
47
|
}
|
|
48
48
|
|
|
49
|
+
export interface IHarnessChatToolbarAction {
|
|
50
|
+
id: string;
|
|
51
|
+
label: string;
|
|
52
|
+
iconName: string;
|
|
53
|
+
action: () => void | Promise<void>;
|
|
54
|
+
tooltip?: string;
|
|
55
|
+
disabled?: boolean;
|
|
56
|
+
}
|
|
49
57
|
|
|
50
58
|
/**
|
|
51
59
|
* The assembled agent chat: optional toolbar, streaming message list,
|
|
@@ -85,13 +93,16 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
85
93
|
accessor usage: IHarnessUsage = {};
|
|
86
94
|
|
|
87
95
|
/**
|
|
88
|
-
* Current task list for the side panel.
|
|
89
|
-
* from the newest todo tool call in `messages
|
|
90
|
-
* hosts that stream todowrite calls get the sidebar for free.
|
|
96
|
+
* Current task list for the side panel. Unless todosAuthoritative is true,
|
|
97
|
+
* an empty list derives from the newest todo tool call in `messages`.
|
|
91
98
|
*/
|
|
92
99
|
@property({ attribute: false })
|
|
93
100
|
accessor todos: IHarnessTodoItem[] = [];
|
|
94
101
|
|
|
102
|
+
/** Treat an empty host-provided task list as authoritative instead of deriving transcript tasks. */
|
|
103
|
+
@property({ type: Boolean })
|
|
104
|
+
accessor todosAuthoritative: boolean = false;
|
|
105
|
+
|
|
95
106
|
@property({ type: Boolean })
|
|
96
107
|
accessor showTodosPanel: boolean = true;
|
|
97
108
|
|
|
@@ -139,6 +150,9 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
139
150
|
@property()
|
|
140
151
|
accessor subheading: string = '';
|
|
141
152
|
|
|
153
|
+
@property({ attribute: false })
|
|
154
|
+
accessor toolbarActions: IHarnessChatToolbarAction[] = [];
|
|
155
|
+
|
|
142
156
|
@property({ type: Boolean })
|
|
143
157
|
accessor showToolbar: boolean = true;
|
|
144
158
|
|
|
@@ -148,6 +162,10 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
148
162
|
@property({ type: Boolean })
|
|
149
163
|
accessor showTimestamps: boolean = true;
|
|
150
164
|
|
|
165
|
+
/** Parse markdown during active streams; disable to parse only at message end. */
|
|
166
|
+
@property({ type: Boolean })
|
|
167
|
+
accessor markdownWhileStreaming: boolean = true;
|
|
168
|
+
|
|
151
169
|
@property({ type: Boolean })
|
|
152
170
|
accessor disabled: boolean = false;
|
|
153
171
|
|
|
@@ -158,6 +176,10 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
158
176
|
@property({ type: Number })
|
|
159
177
|
accessor queuedCount: number = 0;
|
|
160
178
|
|
|
179
|
+
/** Whether the host implements the optional harness-steer action. */
|
|
180
|
+
@property({ type: Boolean })
|
|
181
|
+
accessor steeringEnabled: boolean = true;
|
|
182
|
+
|
|
161
183
|
@property()
|
|
162
184
|
accessor composerValue: string = '';
|
|
163
185
|
|
|
@@ -504,7 +526,7 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
504
526
|
}
|
|
505
527
|
|
|
506
528
|
public get effectiveTodos(): IHarnessTodoItem[] {
|
|
507
|
-
if (this.todos.length) return this.todos;
|
|
529
|
+
if (this.todosAuthoritative || this.todos.length) return this.todos;
|
|
508
530
|
// the newest todo call is the current state — an empty write clears
|
|
509
531
|
// the panel instead of falling back to an older list
|
|
510
532
|
for (let index = this.messages.length - 1; index >= 0; index--) {
|
|
@@ -524,7 +546,7 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
524
546
|
public get hasSessionSidebar(): boolean {
|
|
525
547
|
if (!this.showSessionSidebar) return false;
|
|
526
548
|
return (
|
|
527
|
-
(this.showTodosPanel && this.effectiveTodos.length > 0)
|
|
549
|
+
(this.showTodosPanel && (this.todosAuthoritative || this.effectiveTodos.length > 0))
|
|
528
550
|
|| this.toolActivityMessages.length > 0
|
|
529
551
|
|| Object.values(this.sessionMetrics).some((value) => value !== undefined)
|
|
530
552
|
|| this.scratchpad !== undefined
|
|
@@ -589,6 +611,7 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
589
611
|
.loadingEarlier=${this.loadingEarlier}
|
|
590
612
|
.showRoles=${this.showRoles}
|
|
591
613
|
.showTimestamps=${this.showTimestamps}
|
|
614
|
+
.markdownWhileStreaming=${this.markdownWhileStreaming}
|
|
592
615
|
.toolRegistry=${this.toolRegistry}
|
|
593
616
|
></dees-harness-message-list>
|
|
594
617
|
${this.heading
|
|
@@ -664,6 +687,7 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
664
687
|
.intelligenceExchanges=${this.intelligenceExchanges}
|
|
665
688
|
.intelligenceBusy=${this.intelligenceBusy}
|
|
666
689
|
.intelligenceError=${this.intelligenceError}
|
|
690
|
+
.sessionKey=${this.transcriptKey}
|
|
667
691
|
.disabled=${this.disabled}
|
|
668
692
|
></dees-harness-session-sidebar>
|
|
669
693
|
</aside>
|
|
@@ -682,6 +706,7 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
682
706
|
.disabled=${this.disabled}
|
|
683
707
|
.busy=${this.busy || this.status.type === 'busy'}
|
|
684
708
|
.queuedCount=${this.queuedCount}
|
|
709
|
+
.steeringEnabled=${this.steeringEnabled}
|
|
685
710
|
.account=${this.account}
|
|
686
711
|
.accountOptions=${this.accountOptions}
|
|
687
712
|
.model=${this.model}
|
|
@@ -720,6 +745,19 @@ export class DeesHarnessChat extends DeesElement {
|
|
|
720
745
|
</div>
|
|
721
746
|
<div class="toolbarActions">
|
|
722
747
|
<dees-harness-usage compact .usage=${this.usage}></dees-harness-usage>
|
|
748
|
+
${this.toolbarActions.map((actionArg) => {
|
|
749
|
+
return html`
|
|
750
|
+
<dees-button
|
|
751
|
+
size="icon"
|
|
752
|
+
type="ghost"
|
|
753
|
+
.icon=${actionArg.iconName}
|
|
754
|
+
.text=${actionArg.label}
|
|
755
|
+
.disabled=${Boolean(actionArg.disabled)}
|
|
756
|
+
title=${actionArg.tooltip ?? actionArg.label}
|
|
757
|
+
@clicked=${() => actionArg.action()}
|
|
758
|
+
></dees-button>
|
|
759
|
+
`;
|
|
760
|
+
})}
|
|
723
761
|
${this.hasSessionSidebar ? html`
|
|
724
762
|
<button
|
|
725
763
|
class="toolbarSessionPanelToggle"
|
|
@@ -92,6 +92,10 @@ export class DeesHarnessComposer extends DeesElement {
|
|
|
92
92
|
@property({ type: Number })
|
|
93
93
|
accessor queuedCount: number = 0;
|
|
94
94
|
|
|
95
|
+
/** Whether the host implements the optional harness-steer action. */
|
|
96
|
+
@property({ type: Boolean })
|
|
97
|
+
accessor steeringEnabled: boolean = true;
|
|
98
|
+
|
|
95
99
|
@property({ attribute: false })
|
|
96
100
|
accessor attachments: IHarnessAttachment[] = [];
|
|
97
101
|
|
|
@@ -419,6 +423,13 @@ export class DeesHarnessComposer extends DeesElement {
|
|
|
419
423
|
flex: 1;
|
|
420
424
|
}
|
|
421
425
|
|
|
426
|
+
.queuedStatus {
|
|
427
|
+
flex: 0 0 auto;
|
|
428
|
+
color: var(--dees-color-text-muted);
|
|
429
|
+
font-size: var(--dees-font-caption1-size, 11px);
|
|
430
|
+
font-variant-numeric: tabular-nums;
|
|
431
|
+
}
|
|
432
|
+
|
|
422
433
|
@container (max-width: 760px) {
|
|
423
434
|
.controlsRow {
|
|
424
435
|
flex-wrap: wrap;
|
|
@@ -584,6 +595,9 @@ export class DeesHarnessComposer extends DeesElement {
|
|
|
584
595
|
`
|
|
585
596
|
: ''}
|
|
586
597
|
<span class="spacer"></span>
|
|
598
|
+
${this.busy && this.queuedCount > 0
|
|
599
|
+
? html`<span class="queuedStatus" aria-live="polite">${this.queuedCount} queued</span>`
|
|
600
|
+
: ''}
|
|
587
601
|
${this.busy
|
|
588
602
|
? html`
|
|
589
603
|
<dees-button type="destructive" size="sm" @clicked=${() => this.emit('harness-abort', {})}>
|
|
@@ -591,7 +605,7 @@ export class DeesHarnessComposer extends DeesElement {
|
|
|
591
605
|
</dees-button>
|
|
592
606
|
`
|
|
593
607
|
: ''}
|
|
594
|
-
${this.busy && !this.value.trim() && this.queuedCount > 0
|
|
608
|
+
${this.busy && this.steeringEnabled && !this.value.trim() && this.queuedCount > 0
|
|
595
609
|
? html`
|
|
596
610
|
<dees-button type="accent" size="sm" @clicked=${() => this.emit('harness-steer', { queuedCount: this.queuedCount })}>
|
|
597
611
|
Steer now
|
|
@@ -450,6 +450,7 @@ export class DeesHarnessMessage extends DeesElement {
|
|
|
450
450
|
.call=${message.toolCall}
|
|
451
451
|
.toolRegistry=${this.toolRegistry}
|
|
452
452
|
.allowSubtaskStreams=${this.allowSubtaskStreams}
|
|
453
|
+
.markdownWhileStreaming=${this.markdownWhileStreaming}
|
|
453
454
|
.viewState=${this.viewState}
|
|
454
455
|
></dees-harness-tool-card>
|
|
455
456
|
`;
|
|
@@ -496,6 +497,7 @@ export class DeesHarnessMessage extends DeesElement {
|
|
|
496
497
|
.call=${message.toolCall}
|
|
497
498
|
.toolRegistry=${this.toolRegistry}
|
|
498
499
|
.allowSubtaskStreams=${this.allowSubtaskStreams}
|
|
500
|
+
.markdownWhileStreaming=${this.markdownWhileStreaming}
|
|
499
501
|
.viewState=${this.viewState}
|
|
500
502
|
></dees-harness-tool-card>`
|
|
501
503
|
: ''}
|
package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts
CHANGED
|
@@ -140,6 +140,10 @@ export class DeesHarnessMessageList extends DeesElement {
|
|
|
140
140
|
@property({ type: Boolean })
|
|
141
141
|
accessor allowSubtaskStreams: boolean = true;
|
|
142
142
|
|
|
143
|
+
/** Parse markdown during active streams; disable to parse only at message end. */
|
|
144
|
+
@property({ type: Boolean })
|
|
145
|
+
accessor markdownWhileStreaming: boolean = true;
|
|
146
|
+
|
|
143
147
|
@property({ type: Boolean })
|
|
144
148
|
accessor showRoles: boolean = true;
|
|
145
149
|
|
|
@@ -940,6 +944,7 @@ export class DeesHarnessMessageList extends DeesElement {
|
|
|
940
944
|
.showTimestamp=${this.showTimestamps}
|
|
941
945
|
.toolRegistry=${this.toolRegistry}
|
|
942
946
|
.allowSubtaskStreams=${this.allowSubtaskStreams}
|
|
947
|
+
.markdownWhileStreaming=${this.markdownWhileStreaming}
|
|
943
948
|
.viewState=${this.messageViewState(itemArg.message.id)}
|
|
944
949
|
.suppressEntry=${!this.entryAnimationsEnabled || !this.currentNewContentKeys.has(itemArg.key)}
|
|
945
950
|
></dees-harness-message>
|
package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.ts
CHANGED
|
@@ -93,6 +93,10 @@ export class DeesHarnessSessionSidebar extends DeesElement {
|
|
|
93
93
|
@property()
|
|
94
94
|
accessor intelligenceError: string = '';
|
|
95
95
|
|
|
96
|
+
/** Stable host session identity used to scope local editor drafts. */
|
|
97
|
+
@property()
|
|
98
|
+
accessor sessionKey: string = '';
|
|
99
|
+
|
|
96
100
|
@property({ type: Boolean })
|
|
97
101
|
accessor disabled: boolean = false;
|
|
98
102
|
|
|
@@ -590,6 +594,7 @@ export class DeesHarnessSessionSidebar extends DeesElement {
|
|
|
590
594
|
) {
|
|
591
595
|
this.expandedSection = this.defaultExpandedSection;
|
|
592
596
|
}
|
|
597
|
+
if (changedPropertiesArg.has('sessionKey')) this.intelligenceQuestion = '';
|
|
593
598
|
if (!changedPropertiesArg.has('scratchpad')) return;
|
|
594
599
|
const next = this.scratchpad;
|
|
595
600
|
if (!next) {
|
|
@@ -133,15 +133,22 @@ export class DeesHarnessTodos extends DeesElement {
|
|
|
133
133
|
color: #fff;
|
|
134
134
|
}
|
|
135
135
|
|
|
136
|
+
.item.cancelled .marker {
|
|
137
|
+
background: var(--dees-color-fill-secondary);
|
|
138
|
+
color: var(--dees-color-text-muted);
|
|
139
|
+
}
|
|
140
|
+
|
|
136
141
|
.item.in_progress .content {
|
|
137
142
|
font-weight: 600;
|
|
138
143
|
}
|
|
139
144
|
|
|
140
|
-
.item.completed
|
|
145
|
+
.item.completed,
|
|
146
|
+
.item.cancelled {
|
|
141
147
|
opacity: 0.62;
|
|
142
148
|
}
|
|
143
149
|
|
|
144
|
-
.item.completed .content
|
|
150
|
+
.item.completed .content,
|
|
151
|
+
.item.cancelled .content {
|
|
145
152
|
text-decoration: line-through;
|
|
146
153
|
text-decoration-color: var(--dees-color-text-muted);
|
|
147
154
|
}
|
|
@@ -192,7 +199,9 @@ export class DeesHarnessTodos extends DeesElement {
|
|
|
192
199
|
<span class="marker">
|
|
193
200
|
${todo.status === 'completed'
|
|
194
201
|
? html`<dees-icon icon="lucide:Check" iconSize="10"></dees-icon>`
|
|
195
|
-
: ''
|
|
202
|
+
: todo.status === 'cancelled'
|
|
203
|
+
? html`<dees-icon icon="lucide:X" iconSize="10"></dees-icon>`
|
|
204
|
+
: ''}
|
|
196
205
|
</span>
|
|
197
206
|
<span class="content">${todo.content}</span>
|
|
198
207
|
</div>
|
|
@@ -70,6 +70,10 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
70
70
|
@property({ type: Boolean })
|
|
71
71
|
accessor allowSubtaskStreams: boolean = true;
|
|
72
72
|
|
|
73
|
+
/** Parse markdown during active child streams; disable to parse only at message end. */
|
|
74
|
+
@property({ type: Boolean })
|
|
75
|
+
accessor markdownWhileStreaming: boolean = true;
|
|
76
|
+
|
|
73
77
|
@property({ attribute: false })
|
|
74
78
|
accessor viewState: IHarnessMessageViewState | undefined = undefined;
|
|
75
79
|
|
|
@@ -1172,6 +1176,7 @@ export class DeesHarnessToolCard extends DeesElement {
|
|
|
1172
1176
|
.toolRegistry=${this.toolRegistry}
|
|
1173
1177
|
.viewState=${this.viewState?.subtaskTranscript}
|
|
1174
1178
|
.allowSubtaskStreams=${false}
|
|
1179
|
+
.markdownWhileStreaming=${this.markdownWhileStreaming}
|
|
1175
1180
|
.autoFollow=${this.isOpen}
|
|
1176
1181
|
.hideScrollbar=${true}
|
|
1177
1182
|
.fadeScrollEdges=${true}
|
|
@@ -345,7 +345,10 @@ const projectTaskOutputItems = (output: unknown): unknown[] | undefined => {
|
|
|
345
345
|
|
|
346
346
|
const hasUnsupportedTodoStatus = (items: unknown[]): boolean => items.some((item) => {
|
|
347
347
|
if (!harnessIsRecord(item) || typeof item.status !== 'string') return false;
|
|
348
|
-
return item.status !== 'pending'
|
|
348
|
+
return item.status !== 'pending'
|
|
349
|
+
&& item.status !== 'in_progress'
|
|
350
|
+
&& item.status !== 'completed'
|
|
351
|
+
&& item.status !== 'cancelled';
|
|
349
352
|
});
|
|
350
353
|
|
|
351
354
|
const renderProjectTask = (call: IHarnessToolCall, helpers: IHarnessToolRenderHelpers): TemplateResult => {
|
|
@@ -274,7 +274,11 @@ export const harnessParseTodos = (value: unknown): IHarnessTodoItem[] => {
|
|
|
274
274
|
if (!harnessIsRecord(entry)) continue;
|
|
275
275
|
const content = String(entry.content ?? entry.subject ?? entry.title ?? '').trim();
|
|
276
276
|
if (!content) continue;
|
|
277
|
-
const status = entry.status === 'completed'
|
|
277
|
+
const status = entry.status === 'completed'
|
|
278
|
+
|| entry.status === 'in_progress'
|
|
279
|
+
|| entry.status === 'cancelled'
|
|
280
|
+
? entry.status
|
|
281
|
+
: 'pending';
|
|
278
282
|
result.push({
|
|
279
283
|
id: entry.id !== undefined ? String(entry.id) : undefined,
|
|
280
284
|
content,
|
|
@@ -444,7 +444,7 @@ export interface IHarnessGroupContextDetail {
|
|
|
444
444
|
originalEvent: MouseEvent;
|
|
445
445
|
}
|
|
446
446
|
|
|
447
|
-
export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed';
|
|
447
|
+
export type THarnessTodoStatus = 'pending' | 'in_progress' | 'completed' | 'cancelled';
|
|
448
448
|
|
|
449
449
|
export interface IHarnessTodoItem {
|
|
450
450
|
id?: string;
|