@design.estate/dees-catalog 3.92.0 → 3.94.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.
Files changed (42) hide show
  1. package/dist_bundle/bundle.js +2125 -1392
  2. package/dist_ts_web/00_commitinfo_data.js +1 -1
  3. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +15 -3
  4. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +159 -18
  5. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +126 -49
  6. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.d.ts +13 -0
  7. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.js +5 -2
  8. package/dist_ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.js +118 -3
  9. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.d.ts +25 -3
  10. package/dist_ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.js +156 -48
  11. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.d.ts +2 -0
  12. package/dist_ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.js +9 -5
  13. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.d.ts +31 -0
  14. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.d.ts +1 -0
  15. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.js +69 -0
  16. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.js +382 -0
  17. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/index.d.ts +1 -0
  18. package/dist_ts_web/elements/00group-harness/dees-harness-question-card/index.js +2 -0
  19. package/dist_ts_web/elements/00group-harness/index.d.ts +1 -0
  20. package/dist_ts_web/elements/00group-harness/index.js +2 -1
  21. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +33 -0
  22. package/dist_ts_web/elements/00group-harness/toolregistry.js +9 -1
  23. package/dist_ts_web/elements/00theme.js +6 -1
  24. package/dist_watch/bundle.js +2126 -1393
  25. package/dist_watch/bundle.js.map +4 -4
  26. package/package.json +1 -1
  27. package/readme.md +14 -4
  28. package/readme.playbook.md +1 -1
  29. package/ts_web/00_commitinfo_data.ts +1 -1
  30. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +168 -21
  31. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +98 -49
  32. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.demo.ts +4 -1
  33. package/ts_web/elements/00group-harness/dees-harness-composer/dees-harness-composer.ts +99 -0
  34. package/ts_web/elements/00group-harness/dees-harness-message-list/dees-harness-message-list.ts +148 -46
  35. package/ts_web/elements/00group-harness/dees-harness-permission-card/dees-harness-permission-card.ts +9 -4
  36. package/ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.demo.ts +70 -0
  37. package/ts_web/elements/00group-harness/dees-harness-question-card/dees-harness-question-card.ts +319 -0
  38. package/ts_web/elements/00group-harness/dees-harness-question-card/index.ts +1 -0
  39. package/ts_web/elements/00group-harness/index.ts +1 -0
  40. package/ts_web/elements/00group-harness/interfaces.ts +36 -0
  41. package/ts_web/elements/00group-harness/toolregistry.ts +8 -0
  42. package/ts_web/elements/00theme.ts +7 -0
@@ -35,17 +35,14 @@ var __runInitializers = (this && this.__runInitializers) || function (thisArg, i
35
35
  import { demoFunc } from './dees-harness-chat.demo.js';
36
36
  import { DeesElement, html, css, customElement, property, cssManager, } from '@design.estate/dees-element';
37
37
  import { themeDefaultStyles } from '../../00theme.js';
38
+ import { harnessParseTodos } from '../harness.helpers.js';
38
39
  import { DeesHarnessToolRegistry } from '../toolregistry.js';
39
40
  import { DeesHarnessMessageList } from '../dees-harness-message-list/dees-harness-message-list.js';
40
41
  import { DeesHarnessComposer } from '../dees-harness-composer/dees-harness-composer.js';
41
- import '../dees-harness-permission-card/dees-harness-permission-card.js';
42
- import '../dees-harness-status/dees-harness-status.js';
42
+ import '../dees-harness-todos/dees-harness-todos.js';
43
43
  import '../dees-harness-usage/dees-harness-usage.js';
44
44
  import '../../00group-button/dees-button/dees-button.js';
45
45
  import '../../00group-utility/dees-icon/dees-icon.js';
46
- // stable idle binding for the embedded list — a fresh object literal per
47
- // render would re-trigger its follow logic on every chat render
48
- const idleStatus = { type: 'idle' };
49
46
  /**
50
47
  * The assembled agent chat: optional toolbar, streaming message list,
51
48
  * pinned permission queue, status line, and composer. Owns no business
@@ -66,12 +63,21 @@ let DeesHarnessChat = (() => {
66
63
  let _permissions_decorators;
67
64
  let _permissions_initializers = [];
68
65
  let _permissions_extraInitializers = [];
66
+ let _questions_decorators;
67
+ let _questions_initializers = [];
68
+ let _questions_extraInitializers = [];
69
69
  let _status_decorators;
70
70
  let _status_initializers = [];
71
71
  let _status_extraInitializers = [];
72
72
  let _usage_decorators;
73
73
  let _usage_initializers = [];
74
74
  let _usage_extraInitializers = [];
75
+ let _todos_decorators;
76
+ let _todos_initializers = [];
77
+ let _todos_extraInitializers = [];
78
+ let _showTodosPanel_decorators;
79
+ let _showTodosPanel_initializers = [];
80
+ let _showTodosPanel_extraInitializers = [];
75
81
  let _heading_decorators;
76
82
  let _heading_initializers = [];
77
83
  let _heading_extraInitializers = [];
@@ -111,6 +117,12 @@ let DeesHarnessChat = (() => {
111
117
  let _effortOptions_decorators;
112
118
  let _effortOptions_initializers = [];
113
119
  let _effortOptions_extraInitializers = [];
120
+ let _mode_decorators;
121
+ let _mode_initializers = [];
122
+ let _mode_extraInitializers = [];
123
+ let _modeOptions_decorators;
124
+ let _modeOptions_initializers = [];
125
+ let _modeOptions_extraInitializers = [];
114
126
  let _toolRegistry_decorators;
115
127
  let _toolRegistry_initializers = [];
116
128
  let _toolRegistry_extraInitializers = [];
@@ -120,8 +132,11 @@ let DeesHarnessChat = (() => {
120
132
  const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
121
133
  _messages_decorators = [property({ attribute: false })];
122
134
  _permissions_decorators = [property({ attribute: false })];
135
+ _questions_decorators = [property({ attribute: false })];
123
136
  _status_decorators = [property({ attribute: false })];
124
137
  _usage_decorators = [property({ attribute: false })];
138
+ _todos_decorators = [property({ attribute: false })];
139
+ _showTodosPanel_decorators = [property({ type: Boolean })];
125
140
  _heading_decorators = [property()];
126
141
  _subheading_decorators = [property()];
127
142
  _showToolbar_decorators = [property({ type: Boolean })];
@@ -135,11 +150,16 @@ let DeesHarnessChat = (() => {
135
150
  _modelOptions_decorators = [property({ attribute: false })];
136
151
  _reasoningEffort_decorators = [property()];
137
152
  _effortOptions_decorators = [property({ attribute: false })];
153
+ _mode_decorators = [property()];
154
+ _modeOptions_decorators = [property({ attribute: false })];
138
155
  _toolRegistry_decorators = [property({ attribute: false })];
139
156
  __esDecorate(this, null, _messages_decorators, { kind: "accessor", name: "messages", static: false, private: false, access: { has: obj => "messages" in obj, get: obj => obj.messages, set: (obj, value) => { obj.messages = value; } }, metadata: _metadata }, _messages_initializers, _messages_extraInitializers);
140
157
  __esDecorate(this, null, _permissions_decorators, { kind: "accessor", name: "permissions", static: false, private: false, access: { has: obj => "permissions" in obj, get: obj => obj.permissions, set: (obj, value) => { obj.permissions = value; } }, metadata: _metadata }, _permissions_initializers, _permissions_extraInitializers);
158
+ __esDecorate(this, null, _questions_decorators, { kind: "accessor", name: "questions", static: false, private: false, access: { has: obj => "questions" in obj, get: obj => obj.questions, set: (obj, value) => { obj.questions = value; } }, metadata: _metadata }, _questions_initializers, _questions_extraInitializers);
141
159
  __esDecorate(this, null, _status_decorators, { kind: "accessor", name: "status", static: false, private: false, access: { has: obj => "status" in obj, get: obj => obj.status, set: (obj, value) => { obj.status = value; } }, metadata: _metadata }, _status_initializers, _status_extraInitializers);
142
160
  __esDecorate(this, null, _usage_decorators, { kind: "accessor", name: "usage", static: false, private: false, access: { has: obj => "usage" in obj, get: obj => obj.usage, set: (obj, value) => { obj.usage = value; } }, metadata: _metadata }, _usage_initializers, _usage_extraInitializers);
161
+ __esDecorate(this, null, _todos_decorators, { kind: "accessor", name: "todos", static: false, private: false, access: { has: obj => "todos" in obj, get: obj => obj.todos, set: (obj, value) => { obj.todos = value; } }, metadata: _metadata }, _todos_initializers, _todos_extraInitializers);
162
+ __esDecorate(this, null, _showTodosPanel_decorators, { kind: "accessor", name: "showTodosPanel", static: false, private: false, access: { has: obj => "showTodosPanel" in obj, get: obj => obj.showTodosPanel, set: (obj, value) => { obj.showTodosPanel = value; } }, metadata: _metadata }, _showTodosPanel_initializers, _showTodosPanel_extraInitializers);
143
163
  __esDecorate(this, null, _heading_decorators, { kind: "accessor", name: "heading", static: false, private: false, access: { has: obj => "heading" in obj, get: obj => obj.heading, set: (obj, value) => { obj.heading = value; } }, metadata: _metadata }, _heading_initializers, _heading_extraInitializers);
144
164
  __esDecorate(this, null, _subheading_decorators, { kind: "accessor", name: "subheading", static: false, private: false, access: { has: obj => "subheading" in obj, get: obj => obj.subheading, set: (obj, value) => { obj.subheading = value; } }, metadata: _metadata }, _subheading_initializers, _subheading_extraInitializers);
145
165
  __esDecorate(this, null, _showToolbar_decorators, { kind: "accessor", name: "showToolbar", static: false, private: false, access: { has: obj => "showToolbar" in obj, get: obj => obj.showToolbar, set: (obj, value) => { obj.showToolbar = value; } }, metadata: _metadata }, _showToolbar_initializers, _showToolbar_extraInitializers);
@@ -153,6 +173,8 @@ let DeesHarnessChat = (() => {
153
173
  __esDecorate(this, null, _modelOptions_decorators, { kind: "accessor", name: "modelOptions", static: false, private: false, access: { has: obj => "modelOptions" in obj, get: obj => obj.modelOptions, set: (obj, value) => { obj.modelOptions = value; } }, metadata: _metadata }, _modelOptions_initializers, _modelOptions_extraInitializers);
154
174
  __esDecorate(this, null, _reasoningEffort_decorators, { kind: "accessor", name: "reasoningEffort", static: false, private: false, access: { has: obj => "reasoningEffort" in obj, get: obj => obj.reasoningEffort, set: (obj, value) => { obj.reasoningEffort = value; } }, metadata: _metadata }, _reasoningEffort_initializers, _reasoningEffort_extraInitializers);
155
175
  __esDecorate(this, null, _effortOptions_decorators, { kind: "accessor", name: "effortOptions", static: false, private: false, access: { has: obj => "effortOptions" in obj, get: obj => obj.effortOptions, set: (obj, value) => { obj.effortOptions = value; } }, metadata: _metadata }, _effortOptions_initializers, _effortOptions_extraInitializers);
176
+ __esDecorate(this, null, _mode_decorators, { kind: "accessor", name: "mode", static: false, private: false, access: { has: obj => "mode" in obj, get: obj => obj.mode, set: (obj, value) => { obj.mode = value; } }, metadata: _metadata }, _mode_initializers, _mode_extraInitializers);
177
+ __esDecorate(this, null, _modeOptions_decorators, { kind: "accessor", name: "modeOptions", static: false, private: false, access: { has: obj => "modeOptions" in obj, get: obj => obj.modeOptions, set: (obj, value) => { obj.modeOptions = value; } }, metadata: _metadata }, _modeOptions_initializers, _modeOptions_extraInitializers);
156
178
  __esDecorate(this, null, _toolRegistry_decorators, { kind: "accessor", name: "toolRegistry", static: false, private: false, access: { has: obj => "toolRegistry" in obj, get: obj => obj.toolRegistry, set: (obj, value) => { obj.toolRegistry = value; } }, metadata: _metadata }, _toolRegistry_initializers, _toolRegistry_extraInitializers);
157
179
  __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
158
180
  DeesHarnessChat = _classThis = _classDescriptor.value;
@@ -166,13 +188,28 @@ let DeesHarnessChat = (() => {
166
188
  #permissions_accessor_storage = (__runInitializers(this, _messages_extraInitializers), __runInitializers(this, _permissions_initializers, []));
167
189
  get permissions() { return this.#permissions_accessor_storage; }
168
190
  set permissions(value) { this.#permissions_accessor_storage = value; }
169
- #status_accessor_storage = (__runInitializers(this, _permissions_extraInitializers), __runInitializers(this, _status_initializers, { type: 'idle' }));
191
+ #questions_accessor_storage = (__runInitializers(this, _permissions_extraInitializers), __runInitializers(this, _questions_initializers, []));
192
+ /** agent questions render inline like permissions; answered ones persist */
193
+ get questions() { return this.#questions_accessor_storage; }
194
+ set questions(value) { this.#questions_accessor_storage = value; }
195
+ #status_accessor_storage = (__runInitializers(this, _questions_extraInitializers), __runInitializers(this, _status_initializers, { type: 'idle' }));
170
196
  get status() { return this.#status_accessor_storage; }
171
197
  set status(value) { this.#status_accessor_storage = value; }
172
198
  #usage_accessor_storage = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _usage_initializers, {}));
173
199
  get usage() { return this.#usage_accessor_storage; }
174
200
  set usage(value) { this.#usage_accessor_storage = value; }
175
- #heading_accessor_storage = (__runInitializers(this, _usage_extraInitializers), __runInitializers(this, _heading_initializers, ''));
201
+ #todos_accessor_storage = (__runInitializers(this, _usage_extraInitializers), __runInitializers(this, _todos_initializers, []));
202
+ /**
203
+ * Current task list for the side panel. When empty, the panel derives it
204
+ * from the newest todo tool call in `messages` (registry kind 'todo'), so
205
+ * hosts that stream todowrite calls get the sidebar for free.
206
+ */
207
+ get todos() { return this.#todos_accessor_storage; }
208
+ set todos(value) { this.#todos_accessor_storage = value; }
209
+ #showTodosPanel_accessor_storage = (__runInitializers(this, _todos_extraInitializers), __runInitializers(this, _showTodosPanel_initializers, true));
210
+ get showTodosPanel() { return this.#showTodosPanel_accessor_storage; }
211
+ set showTodosPanel(value) { this.#showTodosPanel_accessor_storage = value; }
212
+ #heading_accessor_storage = (__runInitializers(this, _showTodosPanel_extraInitializers), __runInitializers(this, _heading_initializers, ''));
176
213
  get heading() { return this.#heading_accessor_storage; }
177
214
  set heading(value) { this.#heading_accessor_storage = value; }
178
215
  #subheading_accessor_storage = (__runInitializers(this, _heading_extraInitializers), __runInitializers(this, _subheading_initializers, ''));
@@ -212,7 +249,14 @@ let DeesHarnessChat = (() => {
212
249
  #effortOptions_accessor_storage = (__runInitializers(this, _reasoningEffort_extraInitializers), __runInitializers(this, _effortOptions_initializers, []));
213
250
  get effortOptions() { return this.#effortOptions_accessor_storage; }
214
251
  set effortOptions(value) { this.#effortOptions_accessor_storage = value; }
215
- #toolRegistry_accessor_storage = (__runInitializers(this, _effortOptions_extraInitializers), __runInitializers(this, _toolRegistry_initializers, DeesHarnessToolRegistry.default));
252
+ #mode_accessor_storage = (__runInitializers(this, _effortOptions_extraInitializers), __runInitializers(this, _mode_initializers, ''));
253
+ /** agent mode switcher (e.g. Planning / Building); empty hides it */
254
+ get mode() { return this.#mode_accessor_storage; }
255
+ set mode(value) { this.#mode_accessor_storage = value; }
256
+ #modeOptions_accessor_storage = (__runInitializers(this, _mode_extraInitializers), __runInitializers(this, _modeOptions_initializers, []));
257
+ get modeOptions() { return this.#modeOptions_accessor_storage; }
258
+ set modeOptions(value) { this.#modeOptions_accessor_storage = value; }
259
+ #toolRegistry_accessor_storage = (__runInitializers(this, _modeOptions_extraInitializers), __runInitializers(this, _toolRegistry_initializers, DeesHarnessToolRegistry.default));
216
260
  get toolRegistry() { return this.#toolRegistry_accessor_storage; }
217
261
  set toolRegistry(value) { this.#toolRegistry_accessor_storage = value; }
218
262
  static styles = [
@@ -227,6 +271,32 @@ let DeesHarnessChat = (() => {
227
271
  font-family: var(--dees-font-family);
228
272
  color: var(--dees-color-text-primary);
229
273
  background: var(--dees-color-bg-primary);
274
+ container-type: inline-size;
275
+ }
276
+
277
+ .chatBody {
278
+ flex: 1;
279
+ min-height: 0;
280
+ display: flex;
281
+ }
282
+
283
+ .todosPanel {
284
+ flex: 0 0 232px;
285
+ min-width: 0;
286
+ overflow-y: auto;
287
+ scrollbar-width: thin;
288
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
289
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
290
+ border-left: 1px solid var(--dees-color-border-subtle);
291
+ background: var(--dees-color-bg-secondary);
292
+ }
293
+
294
+ /* narrow hosts (e.g. a sidebar chat) drop the panel; todo tool cards
295
+ in the transcript still carry the same information */
296
+ @container (max-width: 520px) {
297
+ .todosPanel {
298
+ display: none;
299
+ }
230
300
  }
231
301
 
232
302
  .toolbar {
@@ -237,6 +307,10 @@ let DeesHarnessChat = (() => {
237
307
  padding: var(--dees-spacing-sm) var(--dees-spacing-md);
238
308
  border-bottom: 1px solid var(--dees-color-border-subtle);
239
309
  background: var(--dees-color-bg-secondary);
310
+ /* chrome floats above the scrolling transcript */
311
+ position: relative;
312
+ z-index: 1;
313
+ box-shadow: var(--dees-shadow-sm);
240
314
  }
241
315
 
242
316
  .headingBlock {
@@ -269,37 +343,18 @@ let DeesHarnessChat = (() => {
269
343
  flex: 0 0 auto;
270
344
  }
271
345
 
272
- dees-harness-message-list {
346
+ .chatBody dees-harness-message-list {
273
347
  flex: 1;
274
348
  min-height: 0;
275
349
  }
276
350
 
277
- .permissionQueue {
278
- flex: 0 0 auto;
279
- display: block;
280
- padding: 0 var(--dees-spacing-md);
281
- max-height: 40%;
282
- overflow-y: auto;
283
- }
284
-
285
- .permissionQueue > * + * {
286
- margin-top: var(--dees-spacing-xs);
287
- }
288
-
289
- /* always mounted so the status leave transition can play; the status
290
- element renders empty when idle, collapsing the row to zero height */
291
- .statusRow {
292
- flex: 0 0 auto;
293
- padding: 0 var(--dees-spacing-md);
294
- }
295
-
296
- .statusRow dees-harness-status {
297
- margin: 0;
298
- }
299
-
351
+ /* the composer docks edge-to-edge like the toolbar, so the tasks
352
+ panel's border meets its top border cleanly; z-order keeps its
353
+ upward shadow above the transcript */
300
354
  .composerRow {
301
355
  flex: 0 0 auto;
302
- padding: var(--dees-spacing-sm) var(--dees-spacing-md) var(--dees-spacing-md);
356
+ position: relative;
357
+ z-index: 1;
303
358
  }
304
359
  `,
305
360
  ];
@@ -319,6 +374,21 @@ let DeesHarnessChat = (() => {
319
374
  scrollToBottom(force = false) {
320
375
  this.listElement?.scrollToBottom(force);
321
376
  }
377
+ get effectiveTodos() {
378
+ if (this.todos.length)
379
+ return this.todos;
380
+ // the newest todo call is the current state — an empty write clears
381
+ // the panel instead of falling back to an older list
382
+ for (let index = this.messages.length - 1; index >= 0; index--) {
383
+ const call = this.messages[index]?.toolCall;
384
+ if (!call)
385
+ continue;
386
+ if (this.toolRegistry.resolve(call).kind !== 'todo')
387
+ continue;
388
+ return harnessParseTodos(call.input);
389
+ }
390
+ return [];
391
+ }
322
392
  get listElement() {
323
393
  const element = this.shadowRoot?.querySelector('dees-harness-message-list');
324
394
  return element instanceof DeesHarnessMessageList ? element : undefined;
@@ -331,26 +401,27 @@ let DeesHarnessChat = (() => {
331
401
  render() {
332
402
  return html `
333
403
  ${this.showToolbar ? this.renderToolbar() : ''}
334
- <dees-harness-message-list
335
- .messages=${this.messages}
336
- .status=${idleStatus}
337
- .showRoles=${this.showRoles}
338
- .toolRegistry=${this.toolRegistry}
339
- ></dees-harness-message-list>
340
- ${this.permissions.length
404
+ <div class="chatBody">
405
+ <dees-harness-message-list
406
+ .messages=${this.messages}
407
+ .permissions=${this.permissions}
408
+ .permissionsBusy=${this.disabled}
409
+ .questions=${this.questions}
410
+ .status=${this.status}
411
+ .showRoles=${this.showRoles}
412
+ .toolRegistry=${this.toolRegistry}
413
+ ></dees-harness-message-list>
414
+ ${this.showTodosPanel && this.effectiveTodos.length
341
415
  ? html `
342
- <div class="permissionQueue">
343
- ${this.permissions.map((request) => html `
344
- <dees-harness-permission-card .request=${request} .busy=${this.disabled}></dees-harness-permission-card>
345
- `)}
346
- </div>
347
- `
416
+ <aside class="todosPanel">
417
+ <dees-harness-todos heading="Tasks" .todos=${this.effectiveTodos}></dees-harness-todos>
418
+ </aside>
419
+ `
348
420
  : ''}
349
- <div class="statusRow">
350
- <dees-harness-status .status=${this.status}></dees-harness-status>
351
421
  </div>
352
422
  <div class="composerRow">
353
423
  <dees-harness-composer
424
+ docked
354
425
  .value=${this.composerValue}
355
426
  .attachments=${this.attachments}
356
427
  .disabled=${this.disabled}
@@ -360,6 +431,8 @@ let DeesHarnessChat = (() => {
360
431
  .modelOptions=${this.modelOptions}
361
432
  .reasoningEffort=${this.reasoningEffort}
362
433
  .effortOptions=${this.effortOptions}
434
+ .mode=${this.mode}
435
+ .modeOptions=${this.modeOptions}
363
436
  @harness-input=${(event) => {
364
437
  this.composerValue = event.detail?.value ?? '';
365
438
  }}
@@ -372,6 +445,10 @@ let DeesHarnessChat = (() => {
372
445
  if (event.detail?.reasoningEffort)
373
446
  this.reasoningEffort = event.detail.reasoningEffort;
374
447
  }}
448
+ @harness-mode-change=${(event) => {
449
+ if (event.detail?.mode)
450
+ this.mode = event.detail.mode;
451
+ }}
375
452
  ></dees-harness-composer>
376
453
  </div>
377
454
  `;
@@ -409,4 +486,4 @@ let DeesHarnessChat = (() => {
409
486
  return DeesHarnessChat = _classThis;
410
487
  })();
411
488
  export { DeesHarnessChat };
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jaGF0L2RlZXMtaGFybmVzcy1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxpRUFBaUUsQ0FBQztBQUN6RSxPQUFPLCtDQUErQyxDQUFDO0FBQ3ZELE9BQU8sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELHlFQUF5RTtBQUN6RSxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLEdBQW1CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7SUFFVSxlQUFlOzRCQUQzQixhQUFhLENBQUMsbUJBQW1CLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrQkFBbkIsU0FBUSxXQUFXOzs7O29DQUk3QyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FB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
489
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jaGF0L2RlZXMtaGFybmVzcy1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFXdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTyw4Q0FBOEMsQ0FBQztBQVN0RDs7Ozs7OztHQU9HO0lBRVUsZUFBZTs0QkFEM0IsYUFBYSxDQUFDLG1CQUFtQixDQUFDOzs7O3NCQUNFLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7K0JBQW5CLFNBQVEsV0FBVzs7OztvQ0FJN0MsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3VDQUc5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7cUNBSTlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQztrQ0FHOUIsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2lDQUc5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7aUNBUTlCLFFBQVEsQ0FBQyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsQ0FBQzswQ0FHOUIsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO21DQUczQixRQUFRLEVBQUU7c0NBR1YsUUFBUSxFQUFFO3VDQUdWLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQztxQ0FHM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxDQUFDO29DQUczQixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7Z0NBRzNCLFFBQVEsQ0FBQyxFQUFFLElBQUksRUFBRSxPQUFPLEVBQUUsQ0FBQzt1Q0FJM0IsUUFBUSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO3lDQUcxQixRQUFRLEVBQUU7dUNBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2lDQUc5QixRQUFRLEVBQUU7d0NBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDOzJDQUc5QixRQUFRLEVBQUU7eUNBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO2dDQUk5QixRQUFRLEVBQUU7dUNBR1YsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3dDQUc5QixRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FBSyxFQUFFLENBQUM7WUF6RS9CLDZLQUFTLFFBQVEsNkJBQVIsUUFBUSwyRkFBeUI7WUFHMUMsc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUFtQztZQUl2RCxnTEFBUyxTQUFTLDZCQUFULFNBQVMsNkZBQWlDO1lBR25ELHVLQUFTLE1BQU0sNkJBQU4sTUFBTSx1RkFBb0M7WUFHbkQsb0tBQVMsS0FBSyw2QkFBTCxLQUFLLHFGQUFxQjtZQVFuQyxvS0FBUyxLQUFLLDZCQUFMLEtBQUsscUZBQTBCO1lBR3hDLCtMQUFTLGNBQWMsNkJBQWQsY0FBYyx1R0FBaUI7WUFHeEMsMEtBQVMsT0FBTyw2QkFBUCxPQUFPLHlGQUFjO1lBRzlCLG1MQUFTLFVBQVUsNkJBQVYsVUFBVSwrRkFBYztZQUdqQyxzTEFBUyxXQUFXLDZCQUFYLFdBQVcsaUdBQWlCO1lBR3JDLGdMQUFTLFNBQVMsNkJBQVQsU0FBUyw2RkFBaUI7WUFHbkMsNktBQVMsUUFBUSw2QkFBUixRQUFRLDJGQUFrQjtZQUduQyxpS0FBUyxJQUFJLDZCQUFKLElBQUksbUZBQWtCO1lBSS9CLHNMQUFTLFdBQVcsNkJBQVgsV0FBVyxpR0FBYTtZQUdqQyw0TEFBUyxhQUFhLDZCQUFiLGFBQWEscUdBQWM7WUFHcEMsc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUE0QjtZQUdoRCxvS0FBUyxLQUFLLDZCQUFMLEtBQUsscUZBQWM7WUFHNUIseUxBQVMsWUFBWSw2QkFBWixZQUFZLG1HQUFnQjtZQUdyQyxrTUFBUyxlQUFlLDZCQUFmLGVBQWUseUdBQWM7WUFHdEMsNExBQVMsYUFBYSw2QkFBYixhQUFhLHFHQUFnQjtZQUl0QyxpS0FBUyxJQUFJLDZCQUFKLElBQUksbUZBQWM7WUFHM0Isc0xBQVMsV0FBVyw2QkFBWCxXQUFXLGlHQUFnQjtZQUdwQyx5TEFBUyxZQUFZLDZCQUFaLFlBQVksbUdBQTREO1lBL0VuRiw2S0ErU0M7Ozs7UUE5U1EsTUFBTSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7UUFDdkIsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLFlBQVksQ0FBQyxDQUFDO1FBRzFDLDZFQUF1QyxFQUFFLEVBQUM7UUFBMUMsSUFBUyxRQUFRLDhDQUF5QjtRQUExQyxJQUFTLFFBQVEsb0RBQXlCO1FBRzFDLDBJQUFvRCxFQUFFLEdBQUM7UUFBdkQsSUFBUyxXQUFXLGlEQUFtQztRQUF2RCxJQUFTLFdBQVcsdURBQW1DO1FBSXZELHlJQUFnRCxFQUFFLEdBQUM7UUFGbkQsNEVBQTRFO1FBRTVFLElBQVMsU0FBUywrQ0FBaUM7UUFBbkQsSUFBUyxTQUFTLHFEQUFpQztRQUduRCxpSUFBa0MsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLEdBQUM7UUFBbkQsSUFBUyxNQUFNLDRDQUFvQztRQUFuRCxJQUFTLE1BQU0sa0RBQW9DO1FBR25ELDRIQUFnQyxFQUFFLEdBQUM7UUFBbkMsSUFBUyxLQUFLLDJDQUFxQjtRQUFuQyxJQUFTLEtBQUssaURBQXFCO1FBUW5DLDJIQUFxQyxFQUFFLEdBQUM7UUFOeEM7Ozs7V0FJRztRQUVILElBQVMsS0FBSywyQ0FBMEI7UUFBeEMsSUFBUyxLQUFLLGlEQUEwQjtRQUd4Qyw2SUFBbUMsSUFBSSxHQUFDO1FBQXhDLElBQVMsY0FBYyxvREFBaUI7UUFBeEMsSUFBUyxjQUFjLDBEQUFpQjtRQUd4Qyx3SUFBMkIsRUFBRSxHQUFDO1FBQTlCLElBQVMsT0FBTyw2Q0FBYztRQUE5QixJQUFTLE9BQU8sbURBQWM7UUFHOUIsdUlBQThCLEVBQUUsR0FBQztRQUFqQyxJQUFTLFVBQVUsZ0RBQWM7UUFBakMsSUFBUyxVQUFVLHNEQUFjO1FBR2pDLDRJQUFnQyxJQUFJLEdBQUM7UUFBckMsSUFBUyxXQUFXLGlEQUFpQjtRQUFyQyxJQUFTLFdBQVcsdURBQWlCO1FBR3JDLHlJQUE4QixJQUFJLEdBQUM7UUFBbkMsSUFBUyxTQUFTLCtDQUFpQjtRQUFuQyxJQUFTLFNBQVMscURBQWlCO1FBR25DLHFJQUE2QixLQUFLLEdBQUM7UUFBbkMsSUFBUyxRQUFRLDhDQUFrQjtRQUFuQyxJQUFTLFFBQVEsb0RBQWtCO1FBR25DLDRIQUF5QixLQUFLLEdBQUM7UUFBL0IsSUFBUyxJQUFJLDBDQUFrQjtRQUEvQixJQUFTLElBQUksZ0RBQWtCO1FBSS9CLHNJQUErQixDQUFDLEdBQUM7UUFGakMsMEVBQTBFO1FBRTFFLElBQVMsV0FBVyxpREFBYTtRQUFqQyxJQUFTLFdBQVcsdURBQWE7UUFHakMsaUpBQWlDLEVBQUUsR0FBQztRQUFwQyxJQUFTLGFBQWEsbURBQWM7UUFBcEMsSUFBUyxhQUFhLHlEQUFjO1FBR3BDLCtJQUE2QyxFQUFFLEdBQUM7UUFBaEQsSUFBUyxXQUFXLGlEQUE0QjtRQUFoRCxJQUFTLFdBQVcsdURBQTRCO1FBR2hELGlJQUF5QixFQUFFLEdBQUM7UUFBNUIsSUFBUyxLQUFLLDJDQUFjO1FBQTVCLElBQVMsS0FBSyxpREFBYztRQUc1Qix5SUFBa0MsRUFBRSxHQUFDO1FBQXJDLElBQVMsWUFBWSxrREFBZ0I7UUFBckMsSUFBUyxZQUFZLHdEQUFnQjtRQUdyQyxzSkFBbUMsRUFBRSxHQUFDO1FBQXRDLElBQVMsZUFBZSxxREFBYztRQUF0QyxJQUFTLGVBQWUsMkRBQWM7UUFHdEMscUpBQW1DLEVBQUUsR0FBQztRQUF0QyxJQUFTLGFBQWEsbURBQWdCO1FBQXRDLElBQVMsYUFBYSx5REFBZ0I7UUFJdEMsaUlBQXdCLEVBQUUsR0FBQztRQUYzQixxRUFBcUU7UUFFckUsSUFBUyxJQUFJLDBDQUFjO1FBQTNCLElBQVMsSUFBSSxnREFBYztRQUczQixzSUFBaUMsRUFBRSxHQUFDO1FBQXBDLElBQVMsV0FBVyxpREFBZ0I7UUFBcEMsSUFBUyxXQUFXLHVEQUFnQjtRQUdwQywrSUFBaUQsdUJBQXVCLENBQUMsT0FBTyxHQUFDO1FBQWpGLElBQVMsWUFBWSxrREFBNEQ7UUFBakYsSUFBUyxZQUFZLHdEQUE0RDtRQUUxRSxNQUFNLENBQUMsTUFBTSxHQUFHO1lBQ3JCLGtCQUFrQjtZQUNsQixVQUFVLENBQUMsYUFBYTtZQUN4QixHQUFHLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7S0E4RkY7U0FDRixDQUFDO1FBRUYsMkVBQTJFO1FBRTNFLDJEQUEyRDtRQUNwRCxVQUFVLENBQUMsS0FBMEI7WUFDMUMsSUFBSSxDQUFDLFdBQVcsRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDdEMsQ0FBQztRQUVNLEtBQUssQ0FBQyxhQUFhO1lBQ3hCLE1BQU0sSUFBSSxDQUFDLGNBQWMsQ0FBQztZQUMxQixNQUFNLElBQUksQ0FBQyxlQUFlLEVBQUUsV0FBVyxFQUFFLENBQUM7UUFDNUMsQ0FBQztRQUVNLGFBQWE7WUFDbEIsSUFBSSxDQUFDLGFBQWEsR0FBRyxFQUFFLENBQUM7WUFDeEIsSUFBSSxDQUFDLGVBQWUsRUFBRSxLQUFLLEVBQUUsQ0FBQztRQUNoQyxDQUFDO1FBRU0sY0FBYyxDQUFDLEtBQUssR0FBRyxLQUFLO1lBQ2pDLElBQUksQ0FBQyxXQUFXLEVBQUUsY0FBYyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzFDLENBQUM7UUFFRCxJQUFXLGNBQWM7WUFDdkIsSUFBSSxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU07Z0JBQUUsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO1lBQ3pDLG9FQUFvRTtZQUNwRSxxREFBcUQ7WUFDckQsS0FBSyxJQUFJLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sR0FBRyxDQUFDLEVBQUUsS0FBSyxJQUFJLENBQUMsRUFBRSxLQUFLLEVBQUUsRUFBRSxDQUFDO2dCQUMvRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQyxFQUFFLFFBQVEsQ0FBQztnQkFDNUMsSUFBSSxDQUFDLElBQUk7b0JBQUUsU0FBUztnQkFDcEIsSUFBSSxJQUFJLENBQUMsWUFBWSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsQ0FBQyxJQUFJLEtBQUssTUFBTTtvQkFBRSxTQUFTO2dCQUM5RCxPQUFPLGlCQUFpQixDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUN2QyxDQUFDO1lBQ0QsT0FBTyxFQUFFLENBQUM7UUFDWixDQUFDO1FBRUQsSUFBWSxXQUFXO1lBQ3JCLE1BQU0sT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEVBQUUsYUFBYSxDQUFDLDJCQUEyQixDQUFDLENBQUM7WUFDNUUsT0FBTyxPQUFPLFlBQVksc0JBQXNCLENBQUMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxDQUFDLENBQUMsU0FBUyxDQUFDO1FBQ3pFLENBQUM7UUFFRCxJQUFZLGVBQWU7WUFDekIsTUFBTSxPQUFPLEdBQUcsSUFBSSxDQUFDLFVBQVUsRUFBRSxhQUFhLENBQUMsdUJBQXVCLENBQUMsQ0FBQztZQUN4RSxPQUFPLE9BQU8sWUFBWSxtQkFBbUIsQ0FBQyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQyxTQUFTLENBQUM7UUFDdEUsQ0FBQztRQUVELDJFQUEyRTtRQUVwRSxNQUFNO1lBQ1gsT0FBTyxJQUFJLENBQUE7UUFDUCxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsYUFBYSxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUU7OztzQkFHOUIsSUFBSSxDQUFDLFFBQVE7eUJBQ1YsSUFBSSxDQUFDLFdBQVc7NkJBQ1osSUFBSSxDQUFDLFFBQVE7dUJBQ25CLElBQUksQ0FBQyxTQUFTO29CQUNqQixJQUFJLENBQUMsTUFBTTt1QkFDUixJQUFJLENBQUMsU0FBUzswQkFDWCxJQUFJLENBQUMsWUFBWTs7VUFFakMsSUFBSSxDQUFDLGNBQWMsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLE1BQU07Z0JBQ2pELENBQUMsQ0FBQyxJQUFJLENBQUE7OzZEQUU2QyxJQUFJLENBQUMsY0FBYzs7YUFFbkU7Z0JBQ0gsQ0FBQyxDQUFDLEVBQUU7Ozs7O21CQUtLLElBQUksQ0FBQyxhQUFhO3lCQUNaLElBQUksQ0FBQyxXQUFXO3NCQUNuQixJQUFJLENBQUMsUUFBUTtrQkFDakIsSUFBSSxDQUFDLElBQUksSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxNQUFNO3lCQUNqQyxJQUFJLENBQUMsV0FBVzttQkFDdEIsSUFBSSxDQUFDLEtBQUs7MEJBQ0gsSUFBSSxDQUFDLFlBQVk7NkJBQ2QsSUFBSSxDQUFDLGVBQWU7MkJBQ3RCLElBQUksQ0FBQyxhQUFhO2tCQUMzQixJQUFJLENBQUMsSUFBSTt5QkFDRixJQUFJLENBQUMsV0FBVzsyQkFDZCxDQUFDLEtBQXFDLEVBQUUsRUFBRTtnQkFDekQsSUFBSSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUMsTUFBTSxFQUFFLEtBQUssSUFBSSxFQUFFLENBQUM7WUFDakQsQ0FBQzt3Q0FDNkIsQ0FBQyxLQUF5RCxFQUFFLEVBQUU7Z0JBQzFGLElBQUksQ0FBQyxXQUFXLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxXQUFXLElBQUksRUFBRSxDQUFDO1lBQ3JELENBQUM7a0NBQ3VCLENBQUMsS0FBZ0UsRUFBRSxFQUFFO2dCQUMzRixJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsS0FBSztvQkFBRSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsS0FBSyxDQUFDO2dCQUN6RCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsZUFBZTtvQkFBRSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsZUFBZSxDQUFDO1lBQ3pGLENBQUM7aUNBQ3NCLENBQUMsS0FBcUMsRUFBRSxFQUFFO2dCQUMvRCxJQUFJLEtBQUssQ0FBQyxNQUFNLEVBQUUsSUFBSTtvQkFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO1lBQ3hELENBQUM7OztLQUdOLENBQUM7UUFDSixDQUFDO1FBRU8sYUFBYTtZQUNuQixPQUFPLElBQUksQ0FBQTs7O3FDQUdzQixJQUFJLENBQUMsT0FBTyxJQUFJLE9BQU87WUFDaEQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFBLCtCQUErQixJQUFJLENBQUMsVUFBVSxRQUFRLENBQUMsQ0FBQyxDQUFDLEVBQUU7OzsrQ0FHOUMsSUFBSSxDQUFDLEtBQUs7K0VBQ3NCLEdBQUcsRUFBRSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUM7OztrRkFHckMsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxxQkFBcUIsQ0FBQzs7Ozs7S0FLbkgsQ0FBQztRQUNKLENBQUM7UUFFTyxJQUFJLENBQUMsSUFBWTtZQUN2QixJQUFJLENBQUMsYUFBYSxDQUFDLElBQUksV0FBVyxDQUFDLElBQUksRUFBRSxFQUFFLE1BQU0sRUFBRSxFQUFFLEVBQUUsT0FBTyxFQUFFLElBQUksRUFBRSxRQUFRLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO1FBQzNGLENBQUM7Ozs7OztZQTlTVSx1REFBZTs7Ozs7U0FBZixlQUFlIn0=
@@ -25,6 +25,13 @@ export declare class DeesHarnessComposer extends DeesElement {
25
25
  static demoGroups: string[];
26
26
  accessor value: string;
27
27
  accessor placeholder: string;
28
+ /**
29
+ * Docked composers sit flush against their container edge-to-edge (a
30
+ * top border instead of the floating card chrome) — used by
31
+ * dees-harness-chat so the bar meets the transcript and the tasks panel
32
+ * without a gap.
33
+ */
34
+ accessor docked: boolean;
28
35
  accessor disabled: boolean;
29
36
  /**
30
37
  * busy = a run is in flight. Sending stays available (hosts queue the
@@ -42,6 +49,12 @@ export declare class DeesHarnessComposer extends DeesElement {
42
49
  accessor modelOptions: string[];
43
50
  accessor reasoningEffort: string;
44
51
  accessor effortOptions: string[];
52
+ /**
53
+ * Agent mode switcher (e.g. Planning / Building). Renders a segmented
54
+ * control when modeOptions is set; emits harness-mode-change.
55
+ */
56
+ accessor mode: string;
57
+ accessor modeOptions: string[];
45
58
  accessor showModelControls: boolean;
46
59
  static styles: import("@design.estate/dees-element").CSSResult[];
47
60
  focusPrompt(): Promise<void>;
@@ -28,11 +28,14 @@ export const demoFunc = () => html `
28
28
  @harness-attachments-change=${logEvent}
29
29
  @harness-attachment-error=${logEvent}
30
30
  @harness-model-change=${logEvent}
31
+ @harness-mode-change=${logEvent}
31
32
  >
32
- <div class="label">default with model controls (events log to console)</div>
33
+ <div class="label">default with mode switcher + model controls (events log to console)</div>
33
34
  <dees-harness-composer
34
35
  model="gpt-5.5"
35
36
  reasoningEffort="high"
37
+ mode="Planning"
38
+ .modeOptions=${['Planning', 'Building']}
36
39
  .modelOptions=${['gpt-5.5', 'gpt-5', 'o4-mini']}
37
40
  .effortOptions=${['xhigh', 'high', 'medium', 'low']}
38
41
  ></dees-harness-composer>
@@ -52,4 +55,4 @@ export const demoFunc = () => html `
52
55
  ></dees-harness-composer>
53
56
  </div>
54
57
  `;
55
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNvbXBvc2VyLmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jb21wb3Nlci9kZWVzLWhhcm5lc3MtY29tcG9zZXIuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFvQmQsUUFBUTtxQkFDUCxRQUFRO3FCQUNSLFFBQVE7a0NBQ0ssUUFBUTtnQ0FDVixRQUFROzRCQUNaLFFBQVE7Ozs7OztzQkFNZCxDQUFDLFNBQVMsRUFBRSxPQUFPLEVBQUUsU0FBUyxDQUFDO3VCQUM5QixDQUFDLE9BQU8sRUFBRSxNQUFNLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQzs7Ozs7Ozs7OzsyQkFVOUIsS0FBSztxQkFDWDtJQUNiLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsTUFBZSxFQUFFO0lBQzNGLEVBQUUsRUFBRSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsZ0JBQWdCLEVBQUUsU0FBUyxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxPQUFnQixFQUFFO0NBQ25HOzs7Q0FHTixDQUFDIn0=
58
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNvbXBvc2VyLmRlbW8uanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jb21wb3Nlci9kZWVzLWhhcm5lc3MtY29tcG9zZXIuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFFbkQsTUFBTSxRQUFRLEdBQUcsQ0FBQyxLQUFrQixFQUFFLEVBQUU7SUFDdEMsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUN4QyxDQUFDLENBQUM7QUFFRixNQUFNLENBQUMsTUFBTSxRQUFRLEdBQUcsR0FBRyxFQUFFLENBQUMsSUFBSSxDQUFBOzs7Ozs7Ozs7Ozs7Ozs7Ozs7OztvQkFvQmQsUUFBUTtxQkFDUCxRQUFRO3FCQUNSLFFBQVE7a0NBQ0ssUUFBUTtnQ0FDVixRQUFROzRCQUNaLFFBQVE7MkJBQ1QsUUFBUTs7Ozs7OztxQkFPZCxDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7c0JBQ3ZCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7dUJBQzlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDOzs7Ozs7Ozs7OzJCQVU5QixLQUFLO3FCQUNYO0lBQ2IsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsU0FBUyxFQUFFLFlBQVksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxNQUFlLEVBQUU7SUFDM0YsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLElBQUksRUFBRSxnQkFBZ0IsRUFBRSxTQUFTLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE9BQWdCLEVBQUU7Q0FDbkc7OztDQUdOLENBQUMifQ==