@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.
@@ -171448,26 +171448,150 @@ var simulate = /* @__PURE__ */ __name((event) => {
171448
171448
  const chat = chatOf(event);
171449
171449
  if (!chat) return;
171450
171450
  stopStream?.();
171451
- const message2 = {
171452
- id: `stream-${Date.now()}`,
171451
+ const runId = Date.now();
171452
+ const cancels = [];
171453
+ const at = /* @__PURE__ */ __name((ms, action) => {
171454
+ const timeout2 = setTimeout(action, ms);
171455
+ cancels.push(() => clearTimeout(timeout2));
171456
+ }, "at");
171457
+ stopStream = /* @__PURE__ */ __name(() => {
171458
+ for (const cancel of cancels) cancel();
171459
+ chat.status = { type: "idle" };
171460
+ }, "stopStream");
171461
+ const pushMessage = /* @__PURE__ */ __name((message2) => {
171462
+ chat.messages = [...chat.messages, message2];
171463
+ }, "pushMessage");
171464
+ const updateTool = /* @__PURE__ */ __name((messageId, tool) => {
171465
+ chat.applyDelta({ type: "tool-update", messageId, tool });
171466
+ }, "updateTool");
171467
+ chat.status = { type: "busy", message: "Planning\u2026" };
171468
+ const reasoningMessage = {
171469
+ id: `sim-${runId}-reasoning`,
171453
171470
  role: "assistant",
171454
171471
  text: "",
171455
171472
  createdAt: Date.now(),
171456
171473
  streaming: true
171457
171474
  };
171458
- chat.messages = [...chat.messages, message2];
171459
- chat.status = { type: "busy", message: "Responding\u2026" };
171460
- stopStream = makeStreamingSimulator(
171461
- {
171462
- applyDelta: /* @__PURE__ */ __name((delta) => {
171463
- chat.applyDelta(delta);
171464
- if (delta.type === "message-end") {
171465
- chat.status = { type: "idle" };
171466
- }
171467
- }, "applyDelta")
171468
- },
171469
- message2.id
171470
- );
171475
+ pushMessage(reasoningMessage);
171476
+ chat.applyDelta({ type: "reasoning-start", messageId: reasoningMessage.id, partId: "r1", startedAt: Date.now() });
171477
+ 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.";
171478
+ reasoningText.split(" ").forEach((word, index3) => {
171479
+ at(80 + index3 * 45, () => chat.applyDelta({ type: "reasoning", messageId: reasoningMessage.id, partId: "r1", delta: word + " " }));
171480
+ });
171481
+ const reasoningDoneAt = 80 + reasoningText.split(" ").length * 45 + 150;
171482
+ at(reasoningDoneAt, () => {
171483
+ chat.applyDelta({ type: "reasoning-end", messageId: reasoningMessage.id, partId: "r1", endedAt: Date.now() });
171484
+ chat.applyDelta({ type: "message-end", messageId: reasoningMessage.id });
171485
+ });
171486
+ const todoId = `sim-${runId}-todos`;
171487
+ at(reasoningDoneAt + 300, () => {
171488
+ chat.status = { type: "busy", message: "Updating task list\u2026" };
171489
+ pushMessage({
171490
+ id: todoId,
171491
+ role: "tool",
171492
+ text: "",
171493
+ createdAt: Date.now(),
171494
+ toolCall: {
171495
+ id: `${todoId}-call`,
171496
+ name: "todowrite",
171497
+ status: "running",
171498
+ input: { todos: [
171499
+ { content: "Pin sitemap cache key to route manifest hash", status: "in_progress" },
171500
+ { content: "Run the sitemap test suite", status: "pending" },
171501
+ { content: "Apply the cache-key patch", status: "pending" },
171502
+ { content: "Verify staging timings", status: "pending" }
171503
+ ] },
171504
+ startedAt: Date.now()
171505
+ }
171506
+ });
171507
+ });
171508
+ at(reasoningDoneAt + 1e3, () => updateTool(todoId, { id: `${todoId}-call`, status: "completed", finishedAt: Date.now() }));
171509
+ const testId = `sim-${runId}-test`;
171510
+ at(reasoningDoneAt + 1400, () => {
171511
+ chat.status = { type: "busy", message: "Running tests\u2026" };
171512
+ pushMessage({
171513
+ id: testId,
171514
+ role: "tool",
171515
+ text: "",
171516
+ createdAt: Date.now(),
171517
+ toolCall: {
171518
+ id: `${testId}-call`,
171519
+ name: "run_command",
171520
+ status: "running",
171521
+ input: { command: "pnpm test --filter sitemap", cwd: "/srv/app" },
171522
+ startedAt: Date.now()
171523
+ }
171524
+ });
171525
+ });
171526
+ at(reasoningDoneAt + 3200, () => updateTool(testId, {
171527
+ id: `${testId}-call`,
171528
+ status: "completed",
171529
+ output: { exitCode: 0, stdout: "14 tests passed\n0 failed" },
171530
+ finishedAt: Date.now()
171531
+ }));
171532
+ const editId = `sim-${runId}-edit`;
171533
+ at(reasoningDoneAt + 3600, () => {
171534
+ chat.status = { type: "busy", message: "Applying the patch\u2026" };
171535
+ pushMessage({
171536
+ id: editId,
171537
+ role: "tool",
171538
+ text: "",
171539
+ createdAt: Date.now(),
171540
+ toolCall: {
171541
+ id: `${editId}-call`,
171542
+ name: "write_file",
171543
+ status: "running",
171544
+ input: {
171545
+ path: "/srv/app/src/jobs/sitemap.job.ts",
171546
+ oldContent: "const cacheKey = hash(locales);\nconst ttl = 3600;",
171547
+ content: "const cacheKey = hash(routeManifest);\nconst ttl = 3600;"
171548
+ },
171549
+ startedAt: Date.now()
171550
+ }
171551
+ });
171552
+ });
171553
+ at(reasoningDoneAt + 4600, () => updateTool(editId, { id: `${editId}-call`, status: "completed", finishedAt: Date.now() }));
171554
+ const todoDoneId = `sim-${runId}-todos-2`;
171555
+ at(reasoningDoneAt + 5e3, () => {
171556
+ pushMessage({
171557
+ id: todoDoneId,
171558
+ role: "tool",
171559
+ text: "",
171560
+ createdAt: Date.now(),
171561
+ toolCall: {
171562
+ id: `${todoDoneId}-call`,
171563
+ name: "todowrite",
171564
+ status: "completed",
171565
+ input: { todos: [
171566
+ { content: "Pin sitemap cache key to route manifest hash", status: "completed" },
171567
+ { content: "Run the sitemap test suite", status: "completed" },
171568
+ { content: "Apply the cache-key patch", status: "completed" },
171569
+ { content: "Verify staging timings", status: "in_progress" }
171570
+ ] },
171571
+ startedAt: Date.now(),
171572
+ finishedAt: Date.now()
171573
+ }
171574
+ });
171575
+ });
171576
+ const summaryId = `sim-${runId}-summary`;
171577
+ at(reasoningDoneAt + 5400, () => {
171578
+ chat.status = { type: "busy", message: "Responding\u2026" };
171579
+ pushMessage({ id: summaryId, role: "assistant", text: "", createdAt: Date.now(), streaming: true });
171580
+ 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.";
171581
+ let offset = 0;
171582
+ const interval3 = setInterval(() => {
171583
+ const chunk = summary.slice(offset, offset + 6);
171584
+ offset += 6;
171585
+ if (!chunk) {
171586
+ clearInterval(interval3);
171587
+ chat.applyDelta({ type: "message-end", messageId: summaryId, usage: { inputTokens: 2100, outputTokens: 260, totalTokens: 2360 } });
171588
+ chat.status = { type: "idle" };
171589
+ return;
171590
+ }
171591
+ chat.applyDelta({ type: "text", messageId: summaryId, delta: chunk });
171592
+ }, 40);
171593
+ cancels.push(() => clearInterval(interval3));
171594
+ });
171471
171595
  }, "simulate");
171472
171596
  var askPermission = /* @__PURE__ */ __name((event) => {
171473
171597
  const chat = chatOf(event);
@@ -174768,30 +174892,32 @@ var DeesHarnessUsage = _DeesHarnessUsage;
174768
174892
  init_dist_ts25();
174769
174893
  init_theme();
174770
174894
  init_dees_icon();
174771
- 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;
174895
+ 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;
174772
174896
  var idleStatus = { type: "idle" };
174773
174897
  _DeesHarnessChat_decorators = [customElement("dees-harness-chat")];
174774
- 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) {
174898
+ 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) {
174775
174899
  constructor() {
174776
174900
  super(...arguments);
174777
174901
  __privateAdd(this, _messages2, __runInitializers(_init87, 8, this, [])), __runInitializers(_init87, 11, this);
174778
174902
  __privateAdd(this, _permissions, __runInitializers(_init87, 12, this, [])), __runInitializers(_init87, 15, this);
174779
174903
  __privateAdd(this, _status6, __runInitializers(_init87, 16, this, { type: "idle" })), __runInitializers(_init87, 19, this);
174780
174904
  __privateAdd(this, _usage2, __runInitializers(_init87, 20, this, {})), __runInitializers(_init87, 23, this);
174781
- __privateAdd(this, _heading6, __runInitializers(_init87, 24, this, "")), __runInitializers(_init87, 27, this);
174782
- __privateAdd(this, _subheading, __runInitializers(_init87, 28, this, "")), __runInitializers(_init87, 31, this);
174783
- __privateAdd(this, _showToolbar, __runInitializers(_init87, 32, this, true)), __runInitializers(_init87, 35, this);
174784
- __privateAdd(this, _showRoles2, __runInitializers(_init87, 36, this, true)), __runInitializers(_init87, 39, this);
174785
- __privateAdd(this, _disabled6, __runInitializers(_init87, 40, this, false)), __runInitializers(_init87, 43, this);
174786
- __privateAdd(this, _busy3, __runInitializers(_init87, 44, this, false)), __runInitializers(_init87, 47, this);
174787
- __privateAdd(this, _queuedCount2, __runInitializers(_init87, 48, this, 0)), __runInitializers(_init87, 51, this);
174788
- __privateAdd(this, _composerValue, __runInitializers(_init87, 52, this, "")), __runInitializers(_init87, 55, this);
174789
- __privateAdd(this, _attachments2, __runInitializers(_init87, 56, this, [])), __runInitializers(_init87, 59, this);
174790
- __privateAdd(this, _model2, __runInitializers(_init87, 60, this, "")), __runInitializers(_init87, 63, this);
174791
- __privateAdd(this, _modelOptions2, __runInitializers(_init87, 64, this, [])), __runInitializers(_init87, 67, this);
174792
- __privateAdd(this, _reasoningEffort2, __runInitializers(_init87, 68, this, "")), __runInitializers(_init87, 71, this);
174793
- __privateAdd(this, _effortOptions2, __runInitializers(_init87, 72, this, [])), __runInitializers(_init87, 75, this);
174794
- __privateAdd(this, _toolRegistry4, __runInitializers(_init87, 76, this, DeesHarnessToolRegistry.default)), __runInitializers(_init87, 79, this);
174905
+ __privateAdd(this, _todos2, __runInitializers(_init87, 24, this, [])), __runInitializers(_init87, 27, this);
174906
+ __privateAdd(this, _showTodosPanel, __runInitializers(_init87, 28, this, true)), __runInitializers(_init87, 31, this);
174907
+ __privateAdd(this, _heading6, __runInitializers(_init87, 32, this, "")), __runInitializers(_init87, 35, this);
174908
+ __privateAdd(this, _subheading, __runInitializers(_init87, 36, this, "")), __runInitializers(_init87, 39, this);
174909
+ __privateAdd(this, _showToolbar, __runInitializers(_init87, 40, this, true)), __runInitializers(_init87, 43, this);
174910
+ __privateAdd(this, _showRoles2, __runInitializers(_init87, 44, this, true)), __runInitializers(_init87, 47, this);
174911
+ __privateAdd(this, _disabled6, __runInitializers(_init87, 48, this, false)), __runInitializers(_init87, 51, this);
174912
+ __privateAdd(this, _busy3, __runInitializers(_init87, 52, this, false)), __runInitializers(_init87, 55, this);
174913
+ __privateAdd(this, _queuedCount2, __runInitializers(_init87, 56, this, 0)), __runInitializers(_init87, 59, this);
174914
+ __privateAdd(this, _composerValue, __runInitializers(_init87, 60, this, "")), __runInitializers(_init87, 63, this);
174915
+ __privateAdd(this, _attachments2, __runInitializers(_init87, 64, this, [])), __runInitializers(_init87, 67, this);
174916
+ __privateAdd(this, _model2, __runInitializers(_init87, 68, this, "")), __runInitializers(_init87, 71, this);
174917
+ __privateAdd(this, _modelOptions2, __runInitializers(_init87, 72, this, [])), __runInitializers(_init87, 75, this);
174918
+ __privateAdd(this, _reasoningEffort2, __runInitializers(_init87, 76, this, "")), __runInitializers(_init87, 79, this);
174919
+ __privateAdd(this, _effortOptions2, __runInitializers(_init87, 80, this, [])), __runInitializers(_init87, 83, this);
174920
+ __privateAdd(this, _toolRegistry4, __runInitializers(_init87, 84, this, DeesHarnessToolRegistry.default)), __runInitializers(_init87, 87, this);
174795
174921
  }
174796
174922
  // ---------------------------------------------------------------- methods
174797
174923
  /** Streams an incremental update into the message list. */
@@ -174809,6 +174935,16 @@ var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _mess
174809
174935
  scrollToBottom(force = false) {
174810
174936
  this.listElement?.scrollToBottom(force);
174811
174937
  }
174938
+ get effectiveTodos() {
174939
+ if (this.todos.length) return this.todos;
174940
+ for (let index3 = this.messages.length - 1; index3 >= 0; index3--) {
174941
+ const call = this.messages[index3]?.toolCall;
174942
+ if (!call) continue;
174943
+ if (this.toolRegistry.resolve(call).kind !== "todo") continue;
174944
+ return harnessParseTodos(call.input);
174945
+ }
174946
+ return [];
174947
+ }
174812
174948
  get listElement() {
174813
174949
  const element4 = this.shadowRoot?.querySelector("dees-harness-message-list");
174814
174950
  return element4 instanceof DeesHarnessMessageList ? element4 : void 0;
@@ -174821,12 +174957,19 @@ var _DeesHarnessChat = class _DeesHarnessChat extends (_a86 = DeesElement, _mess
174821
174957
  render() {
174822
174958
  return b2`
174823
174959
  ${this.showToolbar ? this.renderToolbar() : ""}
174824
- <dees-harness-message-list
174825
- .messages=${this.messages}
174826
- .status=${idleStatus}
174827
- .showRoles=${this.showRoles}
174828
- .toolRegistry=${this.toolRegistry}
174829
- ></dees-harness-message-list>
174960
+ <div class="chatBody">
174961
+ <dees-harness-message-list
174962
+ .messages=${this.messages}
174963
+ .status=${idleStatus}
174964
+ .showRoles=${this.showRoles}
174965
+ .toolRegistry=${this.toolRegistry}
174966
+ ></dees-harness-message-list>
174967
+ ${this.showTodosPanel && this.effectiveTodos.length ? b2`
174968
+ <aside class="todosPanel">
174969
+ <dees-harness-todos heading="Tasks" .todos=${this.effectiveTodos}></dees-harness-todos>
174970
+ </aside>
174971
+ ` : ""}
174972
+ </div>
174830
174973
  ${this.permissions.length ? b2`
174831
174974
  <div class="permissionQueue">
174832
174975
  ${this.permissions.map(
@@ -174892,6 +175035,8 @@ _messages2 = new WeakMap();
174892
175035
  _permissions = new WeakMap();
174893
175036
  _status6 = new WeakMap();
174894
175037
  _usage2 = new WeakMap();
175038
+ _todos2 = new WeakMap();
175039
+ _showTodosPanel = new WeakMap();
174895
175040
  _heading6 = new WeakMap();
174896
175041
  _subheading = new WeakMap();
174897
175042
  _showToolbar = new WeakMap();
@@ -174910,6 +175055,8 @@ __decorateElement(_init87, 4, "messages", _messages_dec2, _DeesHarnessChat, _mes
174910
175055
  __decorateElement(_init87, 4, "permissions", _permissions_dec, _DeesHarnessChat, _permissions);
174911
175056
  __decorateElement(_init87, 4, "status", _status_dec6, _DeesHarnessChat, _status6);
174912
175057
  __decorateElement(_init87, 4, "usage", _usage_dec2, _DeesHarnessChat, _usage2);
175058
+ __decorateElement(_init87, 4, "todos", _todos_dec2, _DeesHarnessChat, _todos2);
175059
+ __decorateElement(_init87, 4, "showTodosPanel", _showTodosPanel_dec, _DeesHarnessChat, _showTodosPanel);
174913
175060
  __decorateElement(_init87, 4, "heading", _heading_dec6, _DeesHarnessChat, _heading6);
174914
175061
  __decorateElement(_init87, 4, "subheading", _subheading_dec, _DeesHarnessChat, _subheading);
174915
175062
  __decorateElement(_init87, 4, "showToolbar", _showToolbar_dec, _DeesHarnessChat, _showToolbar);
@@ -174940,6 +175087,32 @@ __publicField(_DeesHarnessChat, "styles", [
174940
175087
  font-family: var(--dees-font-family);
174941
175088
  color: var(--dees-color-text-primary);
174942
175089
  background: var(--dees-color-bg-primary);
175090
+ container-type: inline-size;
175091
+ }
175092
+
175093
+ .chatBody {
175094
+ flex: 1;
175095
+ min-height: 0;
175096
+ display: flex;
175097
+ }
175098
+
175099
+ .todosPanel {
175100
+ flex: 0 0 232px;
175101
+ min-width: 0;
175102
+ overflow-y: auto;
175103
+ scrollbar-width: thin;
175104
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
175105
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
175106
+ border-left: 1px solid var(--dees-color-border-subtle);
175107
+ background: var(--dees-color-bg-secondary);
175108
+ }
175109
+
175110
+ /* narrow hosts (e.g. a sidebar chat) drop the panel; todo tool cards
175111
+ in the transcript still carry the same information */
175112
+ @container (max-width: 520px) {
175113
+ .todosPanel {
175114
+ display: none;
175115
+ }
174943
175116
  }
174944
175117
 
174945
175118
  .toolbar {
@@ -174982,7 +175155,7 @@ __publicField(_DeesHarnessChat, "styles", [
174982
175155
  flex: 0 0 auto;
174983
175156
  }
174984
175157
 
174985
- dees-harness-message-list {
175158
+ .chatBody dees-harness-message-list {
174986
175159
  flex: 1;
174987
175160
  min-height: 0;
174988
175161
  }
@@ -195088,7 +195261,7 @@ init_group_runtime();
195088
195261
  // ts_web/00_commitinfo_data.ts
195089
195262
  var commitinfo = {
195090
195263
  name: "@design.estate/dees-catalog",
195091
- version: "3.92.0",
195264
+ version: "3.93.0",
195092
195265
  description: "A comprehensive library that provides dynamic web components for building sophisticated and modern web applications using JavaScript and TypeScript."
195093
195266
  };
195094
195267
 
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '3.92.0',
6
+ version: '3.93.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
  };
9
9
  //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -1,8 +1,9 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
- import type { IHarnessAttachment, IHarnessMessage, IHarnessPermissionRequest, IHarnessStatus, IHarnessUsage, THarnessStreamDelta } from '../interfaces.js';
2
+ import type { IHarnessAttachment, IHarnessMessage, IHarnessPermissionRequest, IHarnessStatus, IHarnessTodoItem, IHarnessUsage, THarnessStreamDelta } from '../interfaces.js';
3
3
  import { DeesHarnessToolRegistry } from '../toolregistry.js';
4
4
  import '../dees-harness-permission-card/dees-harness-permission-card.js';
5
5
  import '../dees-harness-status/dees-harness-status.js';
6
+ import '../dees-harness-todos/dees-harness-todos.js';
6
7
  import '../dees-harness-usage/dees-harness-usage.js';
7
8
  import '../../00group-button/dees-button/dees-button.js';
8
9
  import '../../00group-utility/dees-icon/dees-icon.js';
@@ -26,6 +27,13 @@ export declare class DeesHarnessChat extends DeesElement {
26
27
  accessor permissions: IHarnessPermissionRequest[];
27
28
  accessor status: IHarnessStatus;
28
29
  accessor usage: IHarnessUsage;
30
+ /**
31
+ * Current task list for the side panel. When empty, the panel derives it
32
+ * from the newest todo tool call in `messages` (registry kind 'todo'), so
33
+ * hosts that stream todowrite calls get the sidebar for free.
34
+ */
35
+ accessor todos: IHarnessTodoItem[];
36
+ accessor showTodosPanel: boolean;
29
37
  accessor heading: string;
30
38
  accessor subheading: string;
31
39
  accessor showToolbar: boolean;
@@ -47,6 +55,7 @@ export declare class DeesHarnessChat extends DeesElement {
47
55
  focusComposer(): Promise<void>;
48
56
  clearComposer(): void;
49
57
  scrollToBottom(force?: boolean): void;
58
+ get effectiveTodos(): IHarnessTodoItem[];
50
59
  private get listElement();
51
60
  private get composerElement();
52
61
  render(): TemplateResult;
@@ -1,5 +1,5 @@
1
1
  import { html } from '@design.estate/dees-element';
2
- import { harnessDemoConversation, makeStreamingSimulator } from '../harness.demodata.js';
2
+ import { harnessDemoConversation } from '../harness.demodata.js';
3
3
  const toolShowcase = () => {
4
4
  const now = Date.now();
5
5
  return [
@@ -76,28 +76,139 @@ const pendingPermission = {
76
76
  };
77
77
  let stopStream;
78
78
  const chatOf = (event) => event.target.closest('.chatDemo')?.querySelector('dees-harness-chat') ?? null;
79
+ /**
80
+ * Streams a realistic turn: reasoning, a todo write, a test run, a file
81
+ * edit rendered as a diff, then the streamed summary text.
82
+ */
79
83
  const simulate = (event) => {
80
84
  const chat = chatOf(event);
81
85
  if (!chat)
82
86
  return;
83
87
  stopStream?.();
84
- const message = {
85
- id: `stream-${Date.now()}`,
86
- role: 'assistant',
87
- text: '',
88
- createdAt: Date.now(),
89
- streaming: true,
88
+ const runId = Date.now();
89
+ const cancels = [];
90
+ const at = (ms, action) => {
91
+ const timeout = setTimeout(action, ms);
92
+ cancels.push(() => clearTimeout(timeout));
90
93
  };
91
- chat.messages = [...chat.messages, message];
92
- chat.status = { type: 'busy', message: 'Responding…' };
93
- stopStream = makeStreamingSimulator({
94
- applyDelta: (delta) => {
95
- chat.applyDelta(delta);
96
- if (delta.type === 'message-end') {
94
+ stopStream = () => {
95
+ for (const cancel of cancels)
96
+ cancel();
97
+ chat.status = { type: 'idle' };
98
+ };
99
+ const pushMessage = (message) => {
100
+ chat.messages = [...chat.messages, message];
101
+ };
102
+ const updateTool = (messageId, tool) => {
103
+ chat.applyDelta({ type: 'tool-update', messageId, tool: tool });
104
+ };
105
+ chat.status = { type: 'busy', message: 'Planning…' };
106
+ // 1) reasoning streams first
107
+ const reasoningMessage = {
108
+ id: `sim-${runId}-reasoning`, role: 'assistant', text: '', createdAt: Date.now(), streaming: true,
109
+ };
110
+ pushMessage(reasoningMessage);
111
+ chat.applyDelta({ type: 'reasoning-start', messageId: reasoningMessage.id, partId: 'r1', startedAt: Date.now() });
112
+ 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.';
113
+ reasoningText.split(' ').forEach((word, index) => {
114
+ at(80 + index * 45, () => chat.applyDelta({ type: 'reasoning', messageId: reasoningMessage.id, partId: 'r1', delta: word + ' ' }));
115
+ });
116
+ const reasoningDoneAt = 80 + reasoningText.split(' ').length * 45 + 150;
117
+ at(reasoningDoneAt, () => {
118
+ chat.applyDelta({ type: 'reasoning-end', messageId: reasoningMessage.id, partId: 'r1', endedAt: Date.now() });
119
+ chat.applyDelta({ type: 'message-end', messageId: reasoningMessage.id });
120
+ });
121
+ // 2) todo write
122
+ const todoId = `sim-${runId}-todos`;
123
+ at(reasoningDoneAt + 300, () => {
124
+ chat.status = { type: 'busy', message: 'Updating task list…' };
125
+ pushMessage({
126
+ id: todoId, role: 'tool', text: '', createdAt: Date.now(),
127
+ toolCall: {
128
+ id: `${todoId}-call`, name: 'todowrite', status: 'running',
129
+ input: { todos: [
130
+ { content: 'Pin sitemap cache key to route manifest hash', status: 'in_progress' },
131
+ { content: 'Run the sitemap test suite', status: 'pending' },
132
+ { content: 'Apply the cache-key patch', status: 'pending' },
133
+ { content: 'Verify staging timings', status: 'pending' },
134
+ ] },
135
+ startedAt: Date.now(),
136
+ },
137
+ });
138
+ });
139
+ at(reasoningDoneAt + 1000, () => updateTool(todoId, { id: `${todoId}-call`, status: 'completed', finishedAt: Date.now() }));
140
+ // 3) test run
141
+ const testId = `sim-${runId}-test`;
142
+ at(reasoningDoneAt + 1400, () => {
143
+ chat.status = { type: 'busy', message: 'Running tests…' };
144
+ pushMessage({
145
+ id: testId, role: 'tool', text: '', createdAt: Date.now(),
146
+ toolCall: {
147
+ id: `${testId}-call`, name: 'run_command', status: 'running',
148
+ input: { command: 'pnpm test --filter sitemap', cwd: '/srv/app' },
149
+ startedAt: Date.now(),
150
+ },
151
+ });
152
+ });
153
+ at(reasoningDoneAt + 3200, () => updateTool(testId, {
154
+ id: `${testId}-call`, status: 'completed',
155
+ output: { exitCode: 0, stdout: '14 tests passed\n0 failed' },
156
+ finishedAt: Date.now(),
157
+ }));
158
+ // 4) file edit rendered as a diff
159
+ const editId = `sim-${runId}-edit`;
160
+ at(reasoningDoneAt + 3600, () => {
161
+ chat.status = { type: 'busy', message: 'Applying the patch…' };
162
+ pushMessage({
163
+ id: editId, role: 'tool', text: '', createdAt: Date.now(),
164
+ toolCall: {
165
+ id: `${editId}-call`, name: 'write_file', status: 'running',
166
+ input: {
167
+ path: '/srv/app/src/jobs/sitemap.job.ts',
168
+ oldContent: 'const cacheKey = hash(locales);\nconst ttl = 3600;',
169
+ content: 'const cacheKey = hash(routeManifest);\nconst ttl = 3600;',
170
+ },
171
+ startedAt: Date.now(),
172
+ },
173
+ });
174
+ });
175
+ at(reasoningDoneAt + 4600, () => updateTool(editId, { id: `${editId}-call`, status: 'completed', finishedAt: Date.now() }));
176
+ // 5) updated todos, then the streamed summary
177
+ const todoDoneId = `sim-${runId}-todos-2`;
178
+ at(reasoningDoneAt + 5000, () => {
179
+ pushMessage({
180
+ id: todoDoneId, role: 'tool', text: '', createdAt: Date.now(),
181
+ toolCall: {
182
+ id: `${todoDoneId}-call`, name: 'todowrite', status: 'completed',
183
+ input: { todos: [
184
+ { content: 'Pin sitemap cache key to route manifest hash', status: 'completed' },
185
+ { content: 'Run the sitemap test suite', status: 'completed' },
186
+ { content: 'Apply the cache-key patch', status: 'completed' },
187
+ { content: 'Verify staging timings', status: 'in_progress' },
188
+ ] },
189
+ startedAt: Date.now(), finishedAt: Date.now(),
190
+ },
191
+ });
192
+ });
193
+ const summaryId = `sim-${runId}-summary`;
194
+ at(reasoningDoneAt + 5400, () => {
195
+ chat.status = { type: 'busy', message: 'Responding…' };
196
+ pushMessage({ id: summaryId, role: 'assistant', text: '', createdAt: Date.now(), streaming: true });
197
+ const summary = 'Patched `sitemap.job.ts` to key the cache on the **route manifest hash** — tests pass (14/14). Staging verification is the last open task.';
198
+ let offset = 0;
199
+ const interval = setInterval(() => {
200
+ const chunk = summary.slice(offset, offset + 6);
201
+ offset += 6;
202
+ if (!chunk) {
203
+ clearInterval(interval);
204
+ chat.applyDelta({ type: 'message-end', messageId: summaryId, usage: { inputTokens: 2100, outputTokens: 260, totalTokens: 2360 } });
97
205
  chat.status = { type: 'idle' };
206
+ return;
98
207
  }
99
- },
100
- }, message.id);
208
+ chat.applyDelta({ type: 'text', messageId: summaryId, delta: chunk });
209
+ }, 40);
210
+ cancels.push(() => clearInterval(interval));
211
+ });
101
212
  };
102
213
  const askPermission = (event) => {
103
214
  const chat = chatOf(event);
@@ -180,4 +291,4 @@ export const demoFunc = () => html `
180
291
  ></dees-harness-chat>
181
292
  </div>
182
293
  `;
183
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLWNoYXQvZGVlcy1oYXJuZXNzLWNoYXQuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLHNCQUFzQixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFekYsTUFBTSxZQUFZLEdBQUcsR0FBc0IsRUFBRTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsT0FBTztRQUNMO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtnQkFDbEQsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxHQUFHLE9BQU87YUFDMUI7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVB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
294
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLWNoYXQvZGVlcy1oYXJuZXNzLWNoYXQuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsTUFBTSxZQUFZLEdBQUcsR0FBc0IsRUFBRTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsT0FBTztRQUNMO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtnQkFDbEQsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxHQUFHLE9BQU87YUFDMUI7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsWUFBWTtnQkFD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