@design.estate/dees-catalog 3.92.0 → 3.93.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.
@@ -35,11 +35,13 @@ 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
42
  import '../dees-harness-permission-card/dees-harness-permission-card.js';
42
43
  import '../dees-harness-status/dees-harness-status.js';
44
+ import '../dees-harness-todos/dees-harness-todos.js';
43
45
  import '../dees-harness-usage/dees-harness-usage.js';
44
46
  import '../../00group-button/dees-button/dees-button.js';
45
47
  import '../../00group-utility/dees-icon/dees-icon.js';
@@ -72,6 +74,12 @@ let DeesHarnessChat = (() => {
72
74
  let _usage_decorators;
73
75
  let _usage_initializers = [];
74
76
  let _usage_extraInitializers = [];
77
+ let _todos_decorators;
78
+ let _todos_initializers = [];
79
+ let _todos_extraInitializers = [];
80
+ let _showTodosPanel_decorators;
81
+ let _showTodosPanel_initializers = [];
82
+ let _showTodosPanel_extraInitializers = [];
75
83
  let _heading_decorators;
76
84
  let _heading_initializers = [];
77
85
  let _heading_extraInitializers = [];
@@ -122,6 +130,8 @@ let DeesHarnessChat = (() => {
122
130
  _permissions_decorators = [property({ attribute: false })];
123
131
  _status_decorators = [property({ attribute: false })];
124
132
  _usage_decorators = [property({ attribute: false })];
133
+ _todos_decorators = [property({ attribute: false })];
134
+ _showTodosPanel_decorators = [property({ type: Boolean })];
125
135
  _heading_decorators = [property()];
126
136
  _subheading_decorators = [property()];
127
137
  _showToolbar_decorators = [property({ type: Boolean })];
@@ -140,6 +150,8 @@ let DeesHarnessChat = (() => {
140
150
  __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);
141
151
  __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
152
  __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);
153
+ __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);
154
+ __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
155
  __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
156
  __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
157
  __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);
@@ -172,7 +184,18 @@ let DeesHarnessChat = (() => {
172
184
  #usage_accessor_storage = (__runInitializers(this, _status_extraInitializers), __runInitializers(this, _usage_initializers, {}));
173
185
  get usage() { return this.#usage_accessor_storage; }
174
186
  set usage(value) { this.#usage_accessor_storage = value; }
175
- #heading_accessor_storage = (__runInitializers(this, _usage_extraInitializers), __runInitializers(this, _heading_initializers, ''));
187
+ #todos_accessor_storage = (__runInitializers(this, _usage_extraInitializers), __runInitializers(this, _todos_initializers, []));
188
+ /**
189
+ * Current task list for the side panel. When empty, the panel derives it
190
+ * from the newest todo tool call in `messages` (registry kind 'todo'), so
191
+ * hosts that stream todowrite calls get the sidebar for free.
192
+ */
193
+ get todos() { return this.#todos_accessor_storage; }
194
+ set todos(value) { this.#todos_accessor_storage = value; }
195
+ #showTodosPanel_accessor_storage = (__runInitializers(this, _todos_extraInitializers), __runInitializers(this, _showTodosPanel_initializers, true));
196
+ get showTodosPanel() { return this.#showTodosPanel_accessor_storage; }
197
+ set showTodosPanel(value) { this.#showTodosPanel_accessor_storage = value; }
198
+ #heading_accessor_storage = (__runInitializers(this, _showTodosPanel_extraInitializers), __runInitializers(this, _heading_initializers, ''));
176
199
  get heading() { return this.#heading_accessor_storage; }
177
200
  set heading(value) { this.#heading_accessor_storage = value; }
178
201
  #subheading_accessor_storage = (__runInitializers(this, _heading_extraInitializers), __runInitializers(this, _subheading_initializers, ''));
@@ -227,6 +250,32 @@ let DeesHarnessChat = (() => {
227
250
  font-family: var(--dees-font-family);
228
251
  color: var(--dees-color-text-primary);
229
252
  background: var(--dees-color-bg-primary);
253
+ container-type: inline-size;
254
+ }
255
+
256
+ .chatBody {
257
+ flex: 1;
258
+ min-height: 0;
259
+ display: flex;
260
+ }
261
+
262
+ .todosPanel {
263
+ flex: 0 0 232px;
264
+ min-width: 0;
265
+ overflow-y: auto;
266
+ scrollbar-width: thin;
267
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
268
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
269
+ border-left: 1px solid var(--dees-color-border-subtle);
270
+ background: var(--dees-color-bg-secondary);
271
+ }
272
+
273
+ /* narrow hosts (e.g. a sidebar chat) drop the panel; todo tool cards
274
+ in the transcript still carry the same information */
275
+ @container (max-width: 520px) {
276
+ .todosPanel {
277
+ display: none;
278
+ }
230
279
  }
231
280
 
232
281
  .toolbar {
@@ -269,7 +318,7 @@ let DeesHarnessChat = (() => {
269
318
  flex: 0 0 auto;
270
319
  }
271
320
 
272
- dees-harness-message-list {
321
+ .chatBody dees-harness-message-list {
273
322
  flex: 1;
274
323
  min-height: 0;
275
324
  }
@@ -319,6 +368,21 @@ let DeesHarnessChat = (() => {
319
368
  scrollToBottom(force = false) {
320
369
  this.listElement?.scrollToBottom(force);
321
370
  }
371
+ get effectiveTodos() {
372
+ if (this.todos.length)
373
+ return this.todos;
374
+ // the newest todo call is the current state — an empty write clears
375
+ // the panel instead of falling back to an older list
376
+ for (let index = this.messages.length - 1; index >= 0; index--) {
377
+ const call = this.messages[index]?.toolCall;
378
+ if (!call)
379
+ continue;
380
+ if (this.toolRegistry.resolve(call).kind !== 'todo')
381
+ continue;
382
+ return harnessParseTodos(call.input);
383
+ }
384
+ return [];
385
+ }
322
386
  get listElement() {
323
387
  const element = this.shadowRoot?.querySelector('dees-harness-message-list');
324
388
  return element instanceof DeesHarnessMessageList ? element : undefined;
@@ -331,12 +395,21 @@ let DeesHarnessChat = (() => {
331
395
  render() {
332
396
  return html `
333
397
  ${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>
398
+ <div class="chatBody">
399
+ <dees-harness-message-list
400
+ .messages=${this.messages}
401
+ .status=${idleStatus}
402
+ .showRoles=${this.showRoles}
403
+ .toolRegistry=${this.toolRegistry}
404
+ ></dees-harness-message-list>
405
+ ${this.showTodosPanel && this.effectiveTodos.length
406
+ ? html `
407
+ <aside class="todosPanel">
408
+ <dees-harness-todos heading="Tasks" .todos=${this.effectiveTodos}></dees-harness-todos>
409
+ </aside>
410
+ `
411
+ : ''}
412
+ </div>
340
413
  ${this.permissions.length
341
414
  ? html `
342
415
  <div class="permissionQueue">
@@ -409,4 +482,4 @@ let DeesHarnessChat = (() => {
409
482
  return DeesHarnessChat = _classThis;
410
483
  })();
411
484
  export { DeesHarnessChat };
412
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jaGF0L2RlZXMtaGFybmVzcy1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFTdEQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxpRUFBaUUsQ0FBQztBQUN6RSxPQUFPLCtDQUErQyxDQUFDO0FBQ3ZELE9BQU8sNkNBQTZDLENBQUM7QUFDckQsT0FBTyxpREFBaUQsQ0FBQztBQUN6RCxPQUFPLDhDQUE4QyxDQUFDO0FBUXRELHlFQUF5RTtBQUN6RSxnRUFBZ0U7QUFDaEUsTUFBTSxVQUFVLEdBQW1CLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBRXBEOzs7Ozs7O0dBT0c7SUFFVSxlQUFlOzRCQUQzQixhQUFhLENBQUMsbUJBQW1CLENBQUM7Ozs7c0JBQ0UsV0FBVzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OzsrQkFBbkIsU0FBUSxXQUFXOzs7O29DQUk3QyxRQUFRLENBQUMsRUFBRSxTQUFTLEVBQUUsS0FB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
485
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi90c193ZWIvZWxlbWVudHMvMDBncm91cC1oYXJuZXNzL2RlZXMtaGFybmVzcy1jaGF0L2RlZXMtaGFybmVzcy1jaGF0LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFDdkQsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsVUFBVSxHQUNYLE1BQU0sNkJBQTZCLENBQUM7QUFDckMsT0FBTyxFQUFFLGtCQUFrQixFQUFFLE1BQU0sa0JBQWtCLENBQUM7QUFVdEQsT0FBTyxFQUFFLGlCQUFpQixFQUFFLE1BQU0sdUJBQXVCLENBQUM7QUFDMUQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sb0JBQW9CLENBQUM7QUFDN0QsT0FBTyxFQUFFLHNCQUFzQixFQUFFLE1BQU0sMkRBQTJELENBQUM7QUFDbkcsT0FBTyxFQUFFLG1CQUFtQixFQUFFLE1BQU0sbURBQW1ELENBQUM7QUFDeEYsT0FBTyxpRUFBaUUsQ0FBQztBQUN6RSxPQUFPLCtDQUErQyxDQUFDO0FBQ3ZELE9BQU8sNkNBQTZDLENBQUM7QUFDckQsT0FBTyw2Q0FBNkMsQ0FBQztBQUNyRCxPQUFPLGlEQUFpRCxDQUFDO0FBQ3pELE9BQU8sOENBQThDLENBQUM7QUFRdEQseUVBQXlFO0FBQ3pFLGdFQUFnRTtBQUNoRSxNQUFNLFVBQVUsR0FBbUIsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLENBQUM7QUFFcEQ7Ozs7Ozs7R0FPRztJQUVVLGVBQWU7NEJBRDNCLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQzs7OztzQkFDRSxXQUFXOzs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7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
@@ -207021,26 +207021,150 @@ var simulate = /* @__PURE__ */ __name((event) => {
207021
207021
  const chat = chatOf(event);
207022
207022
  if (!chat) return;
207023
207023
  stopStream?.();
207024
- const message2 = {
207025
- id: `stream-${Date.now()}`,
207024
+ const runId = Date.now();
207025
+ const cancels = [];
207026
+ const at = /* @__PURE__ */ __name((ms, action) => {
207027
+ const timeout2 = setTimeout(action, ms);
207028
+ cancels.push(() => clearTimeout(timeout2));
207029
+ }, "at");
207030
+ stopStream = /* @__PURE__ */ __name(() => {
207031
+ for (const cancel of cancels) cancel();
207032
+ chat.status = { type: "idle" };
207033
+ }, "stopStream");
207034
+ const pushMessage = /* @__PURE__ */ __name((message2) => {
207035
+ chat.messages = [...chat.messages, message2];
207036
+ }, "pushMessage");
207037
+ const updateTool = /* @__PURE__ */ __name((messageId, tool) => {
207038
+ chat.applyDelta({ type: "tool-update", messageId, tool });
207039
+ }, "updateTool");
207040
+ chat.status = { type: "busy", message: "Planning\u2026" };
207041
+ const reasoningMessage = {
207042
+ id: `sim-${runId}-reasoning`,
207026
207043
  role: "assistant",
207027
207044
  text: "",
207028
207045
  createdAt: Date.now(),
207029
207046
  streaming: true
207030
207047
  };
207031
- chat.messages = [...chat.messages, message2];
207032
- chat.status = { type: "busy", message: "Responding\u2026" };
207033
- stopStream = makeStreamingSimulator(
207034
- {
207035
- applyDelta: /* @__PURE__ */ __name((delta) => {
207036
- chat.applyDelta(delta);
207037
- if (delta.type === "message-end") {
207038
- chat.status = { type: "idle" };
207039
- }
207040
- }, "applyDelta")
207041
- },
207042
- message2.id
207043
- );
207048
+ pushMessage(reasoningMessage);
207049
+ chat.applyDelta({ type: "reasoning-start", messageId: reasoningMessage.id, partId: "r1", startedAt: Date.now() });
207050
+ const reasoningText = "The cache key includes the locale list, so every rollout re-crawls. Plan: track the fix as todos, run the tests, then pin the key to the route manifest.";
207051
+ reasoningText.split(" ").forEach((word, index3) => {
207052
+ at(80 + index3 * 45, () => chat.applyDelta({ type: "reasoning", messageId: reasoningMessage.id, partId: "r1", delta: word + " " }));
207053
+ });
207054
+ const reasoningDoneAt = 80 + reasoningText.split(" ").length * 45 + 150;
207055
+ at(reasoningDoneAt, () => {
207056
+ chat.applyDelta({ type: "reasoning-end", messageId: reasoningMessage.id, partId: "r1", endedAt: Date.now() });
207057
+ chat.applyDelta({ type: "message-end", messageId: reasoningMessage.id });
207058
+ });
207059
+ const todoId = `sim-${runId}-todos`;
207060
+ at(reasoningDoneAt + 300, () => {
207061
+ chat.status = { type: "busy", message: "Updating task list\u2026" };
207062
+ pushMessage({
207063
+ id: todoId,
207064
+ role: "tool",
207065
+ text: "",
207066
+ createdAt: Date.now(),
207067
+ toolCall: {
207068
+ id: `${todoId}-call`,
207069
+ name: "todowrite",
207070
+ status: "running",
207071
+ input: { todos: [
207072
+ { content: "Pin sitemap cache key to route manifest hash", status: "in_progress" },
207073
+ { content: "Run the sitemap test suite", status: "pending" },
207074
+ { content: "Apply the cache-key patch", status: "pending" },
207075
+ { content: "Verify staging timings", status: "pending" }
207076
+ ] },
207077
+ startedAt: Date.now()
207078
+ }
207079
+ });
207080
+ });
207081
+ at(reasoningDoneAt + 1e3, () => updateTool(todoId, { id: `${todoId}-call`, status: "completed", finishedAt: Date.now() }));
207082
+ const testId = `sim-${runId}-test`;
207083
+ at(reasoningDoneAt + 1400, () => {
207084
+ chat.status = { type: "busy", message: "Running tests\u2026" };
207085
+ pushMessage({
207086
+ id: testId,
207087
+ role: "tool",
207088
+ text: "",
207089
+ createdAt: Date.now(),
207090
+ toolCall: {
207091
+ id: `${testId}-call`,
207092
+ name: "run_command",
207093
+ status: "running",
207094
+ input: { command: "pnpm test --filter sitemap", cwd: "/srv/app" },
207095
+ startedAt: Date.now()
207096
+ }
207097
+ });
207098
+ });
207099
+ at(reasoningDoneAt + 3200, () => updateTool(testId, {
207100
+ id: `${testId}-call`,
207101
+ status: "completed",
207102
+ output: { exitCode: 0, stdout: "14 tests passed\n0 failed" },
207103
+ finishedAt: Date.now()
207104
+ }));
207105
+ const editId = `sim-${runId}-edit`;
207106
+ at(reasoningDoneAt + 3600, () => {
207107
+ chat.status = { type: "busy", message: "Applying the patch\u2026" };
207108
+ pushMessage({
207109
+ id: editId,
207110
+ role: "tool",
207111
+ text: "",
207112
+ createdAt: Date.now(),
207113
+ toolCall: {
207114
+ id: `${editId}-call`,
207115
+ name: "write_file",
207116
+ status: "running",
207117
+ input: {
207118
+ path: "/srv/app/src/jobs/sitemap.job.ts",
207119
+ oldContent: "const cacheKey = hash(locales);\nconst ttl = 3600;",
207120
+ content: "const cacheKey = hash(routeManifest);\nconst ttl = 3600;"
207121
+ },
207122
+ startedAt: Date.now()
207123
+ }
207124
+ });
207125
+ });
207126
+ at(reasoningDoneAt + 4600, () => updateTool(editId, { id: `${editId}-call`, status: "completed", finishedAt: Date.now() }));
207127
+ const todoDoneId = `sim-${runId}-todos-2`;
207128
+ at(reasoningDoneAt + 5e3, () => {
207129
+ pushMessage({
207130
+ id: todoDoneId,
207131
+ role: "tool",
207132
+ text: "",
207133
+ createdAt: Date.now(),
207134
+ toolCall: {
207135
+ id: `${todoDoneId}-call`,
207136
+ name: "todowrite",
207137
+ status: "completed",
207138
+ input: { todos: [
207139
+ { content: "Pin sitemap cache key to route manifest hash", status: "completed" },
207140
+ { content: "Run the sitemap test suite", status: "completed" },
207141
+ { content: "Apply the cache-key patch", status: "completed" },
207142
+ { content: "Verify staging timings", status: "in_progress" }
207143
+ ] },
207144
+ startedAt: Date.now(),
207145
+ finishedAt: Date.now()
207146
+ }
207147
+ });
207148
+ });
207149
+ const summaryId = `sim-${runId}-summary`;
207150
+ at(reasoningDoneAt + 5400, () => {
207151
+ chat.status = { type: "busy", message: "Responding\u2026" };
207152
+ pushMessage({ id: summaryId, role: "assistant", text: "", createdAt: Date.now(), streaming: true });
207153
+ const summary = "Patched `sitemap.job.ts` to key the cache on the **route manifest hash** \u2014 tests pass (14/14). Staging verification is the last open task.";
207154
+ let offset = 0;
207155
+ const interval3 = setInterval(() => {
207156
+ const chunk = summary.slice(offset, offset + 6);
207157
+ offset += 6;
207158
+ if (!chunk) {
207159
+ clearInterval(interval3);
207160
+ chat.applyDelta({ type: "message-end", messageId: summaryId, usage: { inputTokens: 2100, outputTokens: 260, totalTokens: 2360 } });
207161
+ chat.status = { type: "idle" };
207162
+ return;
207163
+ }
207164
+ chat.applyDelta({ type: "text", messageId: summaryId, delta: chunk });
207165
+ }, 40);
207166
+ cancels.push(() => clearInterval(interval3));
207167
+ });
207044
207168
  }, "simulate");
207045
207169
  var askPermission = /* @__PURE__ */ __name((event) => {
207046
207170
  const chat = chatOf(event);
@@ -210341,30 +210465,32 @@ var DeesHarnessUsage = _DeesHarnessUsage;
210341
210465
  init_dist_ts25();
210342
210466
  init_theme();
210343
210467
  init_dees_icon();
210344
- var _toolRegistry_dec4, _effortOptions_dec2, _reasoningEffort_dec2, _modelOptions_dec2, _model_dec2, _attachments_dec2, _composerValue_dec, _queuedCount_dec2, _busy_dec3, _disabled_dec6, _showRoles_dec2, _showToolbar_dec, _subheading_dec, _heading_dec6, _usage_dec2, _status_dec6, _permissions_dec, _messages_dec2, _a86, _DeesHarnessChat_decorators, _init87, _messages2, _permissions, _status6, _usage2, _heading6, _subheading, _showToolbar, _showRoles2, _disabled6, _busy3, _queuedCount2, _composerValue, _attachments2, _model2, _modelOptions2, _reasoningEffort2, _effortOptions2, _toolRegistry4;
210468
+ var _toolRegistry_dec4, _effortOptions_dec2, _reasoningEffort_dec2, _modelOptions_dec2, _model_dec2, _attachments_dec2, _composerValue_dec, _queuedCount_dec2, _busy_dec3, _disabled_dec6, _showRoles_dec2, _showToolbar_dec, _subheading_dec, _heading_dec6, _showTodosPanel_dec, _todos_dec2, _usage_dec2, _status_dec6, _permissions_dec, _messages_dec2, _a86, _DeesHarnessChat_decorators, _init87, _messages2, _permissions, _status6, _usage2, _todos2, _showTodosPanel, _heading6, _subheading, _showToolbar, _showRoles2, _disabled6, _busy3, _queuedCount2, _composerValue, _attachments2, _model2, _modelOptions2, _reasoningEffort2, _effortOptions2, _toolRegistry4;
210345
210469
  var idleStatus = { type: "idle" };
210346
210470
  _DeesHarnessChat_decorators = [customElement("dees-harness-chat")];
210347
- var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _messages_dec2 = [n5({ attribute: false })], _permissions_dec = [n5({ attribute: false })], _status_dec6 = [n5({ attribute: false })], _usage_dec2 = [n5({ attribute: false })], _heading_dec6 = [n5()], _subheading_dec = [n5()], _showToolbar_dec = [n5({ type: Boolean })], _showRoles_dec2 = [n5({ type: Boolean })], _disabled_dec6 = [n5({ type: Boolean })], _busy_dec3 = [n5({ type: Boolean })], _queuedCount_dec2 = [n5({ type: Number })], _composerValue_dec = [n5()], _attachments_dec2 = [n5({ attribute: false })], _model_dec2 = [n5()], _modelOptions_dec2 = [n5({ attribute: false })], _reasoningEffort_dec2 = [n5()], _effortOptions_dec2 = [n5({ attribute: false })], _toolRegistry_dec4 = [n5({ attribute: false })], _a86) {
210471
+ var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _messages_dec2 = [n5({ attribute: false })], _permissions_dec = [n5({ attribute: false })], _status_dec6 = [n5({ attribute: false })], _usage_dec2 = [n5({ attribute: false })], _todos_dec2 = [n5({ attribute: false })], _showTodosPanel_dec = [n5({ type: Boolean })], _heading_dec6 = [n5()], _subheading_dec = [n5()], _showToolbar_dec = [n5({ type: Boolean })], _showRoles_dec2 = [n5({ type: Boolean })], _disabled_dec6 = [n5({ type: Boolean })], _busy_dec3 = [n5({ type: Boolean })], _queuedCount_dec2 = [n5({ type: Number })], _composerValue_dec = [n5()], _attachments_dec2 = [n5({ attribute: false })], _model_dec2 = [n5()], _modelOptions_dec2 = [n5({ attribute: false })], _reasoningEffort_dec2 = [n5()], _effortOptions_dec2 = [n5({ attribute: false })], _toolRegistry_dec4 = [n5({ attribute: false })], _a86) {
210348
210472
  constructor() {
210349
210473
  super(...arguments);
210350
210474
  __privateAdd(this, _messages2, __runInitializers(_init87, 8, this, [])), __runInitializers(_init87, 11, this);
210351
210475
  __privateAdd(this, _permissions, __runInitializers(_init87, 12, this, [])), __runInitializers(_init87, 15, this);
210352
210476
  __privateAdd(this, _status6, __runInitializers(_init87, 16, this, { type: "idle" })), __runInitializers(_init87, 19, this);
210353
210477
  __privateAdd(this, _usage2, __runInitializers(_init87, 20, this, {})), __runInitializers(_init87, 23, this);
210354
- __privateAdd(this, _heading6, __runInitializers(_init87, 24, this, "")), __runInitializers(_init87, 27, this);
210355
- __privateAdd(this, _subheading, __runInitializers(_init87, 28, this, "")), __runInitializers(_init87, 31, this);
210356
- __privateAdd(this, _showToolbar, __runInitializers(_init87, 32, this, true)), __runInitializers(_init87, 35, this);
210357
- __privateAdd(this, _showRoles2, __runInitializers(_init87, 36, this, true)), __runInitializers(_init87, 39, this);
210358
- __privateAdd(this, _disabled6, __runInitializers(_init87, 40, this, false)), __runInitializers(_init87, 43, this);
210359
- __privateAdd(this, _busy3, __runInitializers(_init87, 44, this, false)), __runInitializers(_init87, 47, this);
210360
- __privateAdd(this, _queuedCount2, __runInitializers(_init87, 48, this, 0)), __runInitializers(_init87, 51, this);
210361
- __privateAdd(this, _composerValue, __runInitializers(_init87, 52, this, "")), __runInitializers(_init87, 55, this);
210362
- __privateAdd(this, _attachments2, __runInitializers(_init87, 56, this, [])), __runInitializers(_init87, 59, this);
210363
- __privateAdd(this, _model2, __runInitializers(_init87, 60, this, "")), __runInitializers(_init87, 63, this);
210364
- __privateAdd(this, _modelOptions2, __runInitializers(_init87, 64, this, [])), __runInitializers(_init87, 67, this);
210365
- __privateAdd(this, _reasoningEffort2, __runInitializers(_init87, 68, this, "")), __runInitializers(_init87, 71, this);
210366
- __privateAdd(this, _effortOptions2, __runInitializers(_init87, 72, this, [])), __runInitializers(_init87, 75, this);
210367
- __privateAdd(this, _toolRegistry4, __runInitializers(_init87, 76, this, DeesHarnessToolRegistry.default)), __runInitializers(_init87, 79, this);
210478
+ __privateAdd(this, _todos2, __runInitializers(_init87, 24, this, [])), __runInitializers(_init87, 27, this);
210479
+ __privateAdd(this, _showTodosPanel, __runInitializers(_init87, 28, this, true)), __runInitializers(_init87, 31, this);
210480
+ __privateAdd(this, _heading6, __runInitializers(_init87, 32, this, "")), __runInitializers(_init87, 35, this);
210481
+ __privateAdd(this, _subheading, __runInitializers(_init87, 36, this, "")), __runInitializers(_init87, 39, this);
210482
+ __privateAdd(this, _showToolbar, __runInitializers(_init87, 40, this, true)), __runInitializers(_init87, 43, this);
210483
+ __privateAdd(this, _showRoles2, __runInitializers(_init87, 44, this, true)), __runInitializers(_init87, 47, this);
210484
+ __privateAdd(this, _disabled6, __runInitializers(_init87, 48, this, false)), __runInitializers(_init87, 51, this);
210485
+ __privateAdd(this, _busy3, __runInitializers(_init87, 52, this, false)), __runInitializers(_init87, 55, this);
210486
+ __privateAdd(this, _queuedCount2, __runInitializers(_init87, 56, this, 0)), __runInitializers(_init87, 59, this);
210487
+ __privateAdd(this, _composerValue, __runInitializers(_init87, 60, this, "")), __runInitializers(_init87, 63, this);
210488
+ __privateAdd(this, _attachments2, __runInitializers(_init87, 64, this, [])), __runInitializers(_init87, 67, this);
210489
+ __privateAdd(this, _model2, __runInitializers(_init87, 68, this, "")), __runInitializers(_init87, 71, this);
210490
+ __privateAdd(this, _modelOptions2, __runInitializers(_init87, 72, this, [])), __runInitializers(_init87, 75, this);
210491
+ __privateAdd(this, _reasoningEffort2, __runInitializers(_init87, 76, this, "")), __runInitializers(_init87, 79, this);
210492
+ __privateAdd(this, _effortOptions2, __runInitializers(_init87, 80, this, [])), __runInitializers(_init87, 83, this);
210493
+ __privateAdd(this, _toolRegistry4, __runInitializers(_init87, 84, this, DeesHarnessToolRegistry.default)), __runInitializers(_init87, 87, this);
210368
210494
  }
210369
210495
  // ---------------------------------------------------------------- methods
210370
210496
  /** Streams an incremental update into the message list. */
@@ -210382,6 +210508,16 @@ var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _mess
210382
210508
  scrollToBottom(force = false) {
210383
210509
  this.listElement?.scrollToBottom(force);
210384
210510
  }
210511
+ get effectiveTodos() {
210512
+ if (this.todos.length) return this.todos;
210513
+ for (let index3 = this.messages.length - 1; index3 >= 0; index3--) {
210514
+ const call = this.messages[index3]?.toolCall;
210515
+ if (!call) continue;
210516
+ if (this.toolRegistry.resolve(call).kind !== "todo") continue;
210517
+ return harnessParseTodos(call.input);
210518
+ }
210519
+ return [];
210520
+ }
210385
210521
  get listElement() {
210386
210522
  const element4 = this.shadowRoot?.querySelector("dees-harness-message-list");
210387
210523
  return element4 instanceof DeesHarnessMessageList ? element4 : void 0;
@@ -210394,12 +210530,19 @@ var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _mess
210394
210530
  render() {
210395
210531
  return b2`
210396
210532
  ${this.showToolbar ? this.renderToolbar() : ""}
210397
- <dees-harness-message-list
210398
- .messages=${this.messages}
210399
- .status=${idleStatus}
210400
- .showRoles=${this.showRoles}
210401
- .toolRegistry=${this.toolRegistry}
210402
- ></dees-harness-message-list>
210533
+ <div class="chatBody">
210534
+ <dees-harness-message-list
210535
+ .messages=${this.messages}
210536
+ .status=${idleStatus}
210537
+ .showRoles=${this.showRoles}
210538
+ .toolRegistry=${this.toolRegistry}
210539
+ ></dees-harness-message-list>
210540
+ ${this.showTodosPanel && this.effectiveTodos.length ? b2`
210541
+ <aside class="todosPanel">
210542
+ <dees-harness-todos heading="Tasks" .todos=${this.effectiveTodos}></dees-harness-todos>
210543
+ </aside>
210544
+ ` : ""}
210545
+ </div>
210403
210546
  ${this.permissions.length ? b2`
210404
210547
  <div class="permissionQueue">
210405
210548
  ${this.permissions.map(
@@ -210465,6 +210608,8 @@ _messages2 = new WeakMap();
210465
210608
  _permissions = new WeakMap();
210466
210609
  _status6 = new WeakMap();
210467
210610
  _usage2 = new WeakMap();
210611
+ _todos2 = new WeakMap();
210612
+ _showTodosPanel = new WeakMap();
210468
210613
  _heading6 = new WeakMap();
210469
210614
  _subheading = new WeakMap();
210470
210615
  _showToolbar = new WeakMap();
@@ -210483,6 +210628,8 @@ __decorateElement(_init87, 4, "messages", _messages_dec2, _DeesHarnessChat, _mes
210483
210628
  __decorateElement(_init87, 4, "permissions", _permissions_dec, _DeesHarnessChat, _permissions);
210484
210629
  __decorateElement(_init87, 4, "status", _status_dec6, _DeesHarnessChat, _status6);
210485
210630
  __decorateElement(_init87, 4, "usage", _usage_dec2, _DeesHarnessChat, _usage2);
210631
+ __decorateElement(_init87, 4, "todos", _todos_dec2, _DeesHarnessChat, _todos2);
210632
+ __decorateElement(_init87, 4, "showTodosPanel", _showTodosPanel_dec, _DeesHarnessChat, _showTodosPanel);
210486
210633
  __decorateElement(_init87, 4, "heading", _heading_dec6, _DeesHarnessChat, _heading6);
210487
210634
  __decorateElement(_init87, 4, "subheading", _subheading_dec, _DeesHarnessChat, _subheading);
210488
210635
  __decorateElement(_init87, 4, "showToolbar", _showToolbar_dec, _DeesHarnessChat, _showToolbar);
@@ -210513,6 +210660,32 @@ __publicField(_DeesHarnessChat, "styles", [
210513
210660
  font-family: var(--dees-font-family);
210514
210661
  color: var(--dees-color-text-primary);
210515
210662
  background: var(--dees-color-bg-primary);
210663
+ container-type: inline-size;
210664
+ }
210665
+
210666
+ .chatBody {
210667
+ flex: 1;
210668
+ min-height: 0;
210669
+ display: flex;
210670
+ }
210671
+
210672
+ .todosPanel {
210673
+ flex: 0 0 232px;
210674
+ min-width: 0;
210675
+ overflow-y: auto;
210676
+ scrollbar-width: thin;
210677
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
210678
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
210679
+ border-left: 1px solid var(--dees-color-border-subtle);
210680
+ background: var(--dees-color-bg-secondary);
210681
+ }
210682
+
210683
+ /* narrow hosts (e.g. a sidebar chat) drop the panel; todo tool cards
210684
+ in the transcript still carry the same information */
210685
+ @container (max-width: 520px) {
210686
+ .todosPanel {
210687
+ display: none;
210688
+ }
210516
210689
  }
210517
210690
 
210518
210691
  .toolbar {
@@ -210555,7 +210728,7 @@ __publicField(_DeesHarnessChat, "styles", [
210555
210728
  flex: 0 0 auto;
210556
210729
  }
210557
210730
 
210558
- dees-harness-message-list {
210731
+ .chatBody dees-harness-message-list {
210559
210732
  flex: 1;
210560
210733
  min-height: 0;
210561
210734
  }