cli-jaw 1.6.14 → 1.6.16

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 (31) hide show
  1. package/dist/bin/postinstall.js +16 -6
  2. package/dist/bin/postinstall.js.map +1 -1
  3. package/package.json +1 -1
  4. package/public/assets/shark.svg +1 -0
  5. package/public/dist/assets/{employees-zxrU6ZV_.js → employees-V7lNStu1.js} +1 -1
  6. package/public/dist/assets/{index-D61icK-D.js → index-Cpe1jccL.js} +4 -4
  7. package/public/dist/assets/render-BoxeLlL9.js +25 -0
  8. package/public/dist/assets/settings-BcKp6ppP.js +1 -0
  9. package/public/dist/assets/{settings-Dl3RnWsB.js → settings-CBCg5Jhh.js} +1 -1
  10. package/public/dist/assets/skills-BuAXFNgp.js +1 -0
  11. package/public/dist/assets/{skills-DhiCSGws.js → skills-RbauGmBZ.js} +1 -1
  12. package/public/dist/assets/{slash-commands-B1k1vFJG.js → slash-commands-BgKxc49D.js} +1 -1
  13. package/public/dist/assets/slash-commands-DXGb_iGA.js +1 -0
  14. package/public/dist/assets/ui-KQ8_sSP8.js +131 -0
  15. package/public/dist/assets/ui-rD__Mvbs.js +1 -0
  16. package/public/dist/assets/vendor-icons-C6LXvgi0.js +1 -0
  17. package/public/dist/assets/{ws-CleMWrLF.js → ws-BtTpgocf.js} +1 -1
  18. package/public/dist/index.html +3 -3
  19. package/public/index.html +2 -2
  20. package/public/js/features/avatar.ts +5 -3
  21. package/public/js/icons.ts +10 -4
  22. package/public/js/ui.ts +87 -73
  23. package/public/js/virtual-scroll-bootstrap.ts +42 -0
  24. package/public/js/virtual-scroll.ts +140 -49
  25. package/public/dist/assets/render-CVr6a-dp.js +0 -25
  26. package/public/dist/assets/settings-BHIV4l1s.js +0 -1
  27. package/public/dist/assets/skills-JuDja1UC.js +0 -1
  28. package/public/dist/assets/slash-commands-DyLS0abr.js +0 -1
  29. package/public/dist/assets/ui-BXZhbE_1.js +0 -131
  30. package/public/dist/assets/ui-qR28iS0L.js +0 -1
  31. package/public/dist/assets/vendor-icons-BqxEYYco.js +0 -1
@@ -0,0 +1,42 @@
1
+ /**
2
+ * Pure-logic bootstrap orchestrator for virtual scroll.
3
+ * No DOM imports — safe to import in Node test environment.
4
+ */
5
+ import type { VirtualItem, LazyRenderCallback } from './virtual-scroll.js';
6
+
7
+ export const BOOTSTRAP_SEED_COUNT = 20;
8
+
9
+ export interface VirtualHistoryBootstrapDeps {
10
+ registerCallbacks: () => void;
11
+ measureTailWindow: (items: VirtualItem[], seedCount: number) => number[];
12
+ setItems: (items: VirtualItem[], options?: { autoActivate?: boolean; toBottom?: boolean }) => void;
13
+ seedMeasuredHeights: (startIndex: number, heights: number[]) => void;
14
+ activateIfNeeded: (toBottom: boolean) => void;
15
+ scrollToBottom: () => void;
16
+ }
17
+
18
+ /**
19
+ * Orchestrates virtual scroll bootstrap in correct order:
20
+ * 1. registerCallbacks (onLazyRender, onPostRender)
21
+ * 2. setItems with autoActivate:false (load all items without triggering activate)
22
+ * 3. measureTailWindow (measure last N items for accurate initial heights)
23
+ * 4. seedMeasuredHeights (feed measured heights back)
24
+ * 5. activateIfNeeded (switch to VS mode with accurate bottom heights)
25
+ * 6. scrollToBottom
26
+ */
27
+ export function bootstrapVirtualHistory(
28
+ items: VirtualItem[],
29
+ deps: VirtualHistoryBootstrapDeps,
30
+ ): void {
31
+ deps.registerCallbacks();
32
+ deps.setItems(items, { autoActivate: false });
33
+
34
+ const seedStart = Math.max(0, items.length - BOOTSTRAP_SEED_COUNT);
35
+ const heights = deps.measureTailWindow(items, BOOTSTRAP_SEED_COUNT);
36
+ if (heights.length > 0) {
37
+ deps.seedMeasuredHeights(seedStart, heights);
38
+ }
39
+
40
+ deps.activateIfNeeded(true);
41
+ deps.scrollToBottom();
42
+ }
@@ -27,7 +27,13 @@ export class VirtualScroll {
27
27
  private firstVisible = -1;
28
28
  private lastVisible = -1;
29
29
 
30
- /** Called after render() mounts items in viewport — for lazy rendering and widget activation */
30
+ // Prefix sum for O(log n) offset lookup
31
+ private prefixHeights: number[] = [0];
32
+ private prefixDirtyFrom = 0;
33
+
34
+ // Spacing model — measured from rendered .msg margin-bottom
35
+ private itemSpacing = 0;
36
+
31
37
  onLazyRender: LazyRenderCallback | null = null;
32
38
  onPostRender: ((viewport: HTMLElement) => void) | null = null;
33
39
 
@@ -44,8 +50,69 @@ export class VirtualScroll {
44
50
  get active(): boolean { return this._active; }
45
51
  get count(): number { return this.items.length; }
46
52
 
47
- /** Flush all virtual items to real DOM and deactivate VS.
48
- * Called on conversation clear or explicit reset. */
53
+ // ── Prefix sum helpers ──
54
+
55
+ private markPrefixDirty(from: number): void {
56
+ this.prefixDirtyFrom = Math.min(this.prefixDirtyFrom, Math.max(0, from));
57
+ }
58
+
59
+ private rebuildPrefixHeights(): void {
60
+ const n = this.items.length;
61
+ if (this.prefixHeights.length !== n + 1) {
62
+ this.prefixHeights = new Array(n + 1).fill(0);
63
+ this.prefixDirtyFrom = 0;
64
+ }
65
+ for (let i = this.prefixDirtyFrom; i < n; i++) {
66
+ this.prefixHeights[i + 1] = this.prefixHeights[i] + this.items[i].height;
67
+ }
68
+ this.prefixDirtyFrom = n;
69
+ }
70
+
71
+ /** Raw cumulative height up to (but not including) index */
72
+ private offsetForIndex(index: number): number {
73
+ this.rebuildPrefixHeights();
74
+ return this.prefixHeights[Math.max(0, Math.min(index, this.items.length))];
75
+ }
76
+
77
+ /** Effective offset including inter-item spacing (margin-bottom) */
78
+ private effectiveOffset(index: number): number {
79
+ return this.offsetForIndex(index) + index * this.itemSpacing;
80
+ }
81
+
82
+ /** Total effective height of all items with spacing */
83
+ private totalEffectiveHeight(): number {
84
+ const n = this.items.length;
85
+ if (n === 0) return 0;
86
+ return this.offsetForIndex(n) + (n - 1) * this.itemSpacing;
87
+ }
88
+
89
+ /** Binary search: find item index at given scroll offset */
90
+ private indexForOffset(offset: number): number {
91
+ this.rebuildPrefixHeights();
92
+ const n = this.items.length;
93
+ if (n === 0) return 0;
94
+ let lo = 0;
95
+ let hi = n - 1;
96
+ while (lo < hi) {
97
+ const mid = (lo + hi + 1) >> 1;
98
+ const effOff = this.prefixHeights[mid] + mid * this.itemSpacing;
99
+ if (effOff <= offset) lo = mid;
100
+ else hi = mid - 1;
101
+ }
102
+ return lo;
103
+ }
104
+
105
+ // ── Spacing model ──
106
+
107
+ private refreshLayoutMetrics(): void {
108
+ const sample = this.viewport.querySelector<HTMLElement>('.msg');
109
+ if (sample) {
110
+ this.itemSpacing = parseFloat(getComputedStyle(sample).marginBottom) || 0;
111
+ }
112
+ }
113
+
114
+ // ── Public API ──
115
+
49
116
  flushToDOM(): void {
50
117
  if (!this._active) return;
51
118
  this.container.classList.remove('vs-active');
@@ -57,15 +124,45 @@ export class VirtualScroll {
57
124
  this.lastVisible = -1;
58
125
  this.items = [];
59
126
  this._totalHeight = 0;
127
+ this.prefixHeights = [0];
128
+ this.prefixDirtyFrom = 0;
129
+ this.itemSpacing = 0;
60
130
  }
61
131
 
62
- /** Bulk-load items without triggering activate mid-loop (RC5 fix).
63
- * Call this AFTER registering onLazyRender/onPostRender. */
64
- setItems(items: VirtualItem[]): void {
132
+ /** Bulk-load items. Call AFTER registering onLazyRender/onPostRender. */
133
+ setItems(
134
+ items: VirtualItem[],
135
+ options?: { autoActivate?: boolean; toBottom?: boolean },
136
+ ): void {
65
137
  this.items = items;
66
138
  this._totalHeight = items.reduce((sum, it) => sum + it.height, 0);
139
+ this.prefixHeights = new Array(items.length + 1).fill(0);
140
+ this.prefixDirtyFrom = 0;
141
+ if (options?.autoActivate === false) return;
67
142
  if (!this._active && this.items.length >= THRESHOLD) {
68
- this.activate(true);
143
+ this.activate(options?.toBottom ?? true);
144
+ }
145
+ }
146
+
147
+ /** Seed measured heights before activation. */
148
+ seedMeasuredHeights(startIndex: number, heights: number[]): void {
149
+ for (let offset = 0; offset < heights.length; offset++) {
150
+ const idx = startIndex + offset;
151
+ const item = this.items[idx];
152
+ if (!item) continue;
153
+ const oldH = item.height;
154
+ const nextH = heights[offset];
155
+ if (oldH === nextH) continue;
156
+ item.height = nextH;
157
+ this._totalHeight += nextH - oldH;
158
+ this.markPrefixDirty(idx);
159
+ }
160
+ }
161
+
162
+ /** Activate if threshold met. */
163
+ activateIfNeeded(toBottom = false): void {
164
+ if (!this._active && this.items.length >= THRESHOLD) {
165
+ this.activate(toBottom);
69
166
  }
70
167
  }
71
168
 
@@ -73,6 +170,7 @@ export class VirtualScroll {
73
170
  const item: VirtualItem = { id, html, height: EST_HEIGHT };
74
171
  this.items.push(item);
75
172
  this._totalHeight += EST_HEIGHT;
173
+ this.markPrefixDirty(this.items.length - 1);
76
174
  if (!this._active && this.items.length >= THRESHOLD) {
77
175
  this.activate(true);
78
176
  }
@@ -81,8 +179,6 @@ export class VirtualScroll {
81
179
  }
82
180
  }
83
181
 
84
- /** Append a live DOM element while keeping VS active.
85
- * Serializes to HTML for virtual storage. */
86
182
  appendLiveItem(div: HTMLElement): void {
87
183
  if (!this._active) return;
88
184
  const html = div.outerHTML;
@@ -90,11 +186,10 @@ export class VirtualScroll {
90
186
  const item: VirtualItem = { id, html, height: EST_HEIGHT };
91
187
  this.items.push(item);
92
188
  this._totalHeight += EST_HEIGHT;
93
- // RC7 fix: use synchronous scrollToBottom (which handles spacers + render)
189
+ this.markPrefixDirty(this.items.length - 1);
94
190
  this.scrollToBottom();
95
191
  }
96
192
 
97
- /** Update cached HTML for a specific item index (used by lazy render). */
98
193
  updateItemHtml(idx: number, html: string): void {
99
194
  if (this.items[idx]) {
100
195
  this.items[idx].html = html;
@@ -103,7 +198,6 @@ export class VirtualScroll {
103
198
 
104
199
  private scrollHandler = () => this.scheduleRender();
105
200
 
106
- /** RC6 fix: activate always scrolls to bottom (new messages are at the end) */
107
201
  private activate(toBottom = false): void {
108
202
  this._active = true;
109
203
  this._totalHeight = 0;
@@ -116,12 +210,16 @@ export class VirtualScroll {
116
210
  for (const item of this.items) {
117
211
  this._totalHeight += item.height;
118
212
  }
213
+ this.prefixHeights = new Array(this.items.length + 1).fill(0);
214
+ this.prefixDirtyFrom = 0;
215
+
119
216
  this.container.classList.add('vs-active');
120
217
  this.container.replaceChildren(this.spacerTop, this.viewport, this.spacerBottom);
121
218
  this.container.addEventListener('scroll', this.scrollHandler, { passive: true });
219
+
122
220
  if (toBottom) {
123
- // Set spacers for bottom position BEFORE render to avoid top flash
124
- this.spacerTop.style.height = `${this._totalHeight}px`;
221
+ const total = this.totalEffectiveHeight();
222
+ this.spacerTop.style.height = `${total}px`;
125
223
  this.spacerBottom.style.height = '0px';
126
224
  this.container.scrollTop = this.container.scrollHeight;
127
225
  this.firstVisible = -1;
@@ -142,36 +240,25 @@ export class VirtualScroll {
142
240
  const scrollTop = this.container.scrollTop;
143
241
  const viewHeight = this.container.clientHeight;
144
242
 
145
- let accum = 0;
146
- let startIdx = this.items.length - 1;
147
- for (let i = 0; i < this.items.length; i++) {
148
- if (accum + this.items[i].height > scrollTop) {
149
- startIdx = i;
150
- break;
151
- }
152
- accum += this.items[i].height;
153
- }
154
-
243
+ const startIdx = this.indexForOffset(scrollTop);
155
244
  const first = Math.max(0, startIdx - BUFFER);
156
- let endAccum = accum;
245
+
157
246
  let endIdx = startIdx;
158
247
  for (let i = startIdx; i < this.items.length; i++) {
159
- endAccum += this.items[i].height;
160
248
  endIdx = i;
161
- if (endAccum > scrollTop + viewHeight) break;
249
+ if (this.effectiveOffset(i + 1) > scrollTop + viewHeight) break;
162
250
  }
163
251
  const last = Math.min(this.items.length - 1, endIdx + BUFFER);
164
252
 
165
- // RC3 fix: always update spacers even if range unchanged
166
- let topSpace = 0;
167
- for (let i = 0; i < first; i++) topSpace += this.items[i].height;
168
- let bottomSpace = 0;
169
- for (let i = last + 1; i < this.items.length; i++) bottomSpace += this.items[i].height;
170
-
171
- this.spacerTop.style.height = `${topSpace}px`;
172
- this.spacerBottom.style.height = `${bottomSpace}px`;
173
-
174
- if (first === this.firstVisible && last === this.lastVisible) return;
253
+ if (first === this.firstVisible && last === this.lastVisible) {
254
+ // Still update spacers when heights changed (RC3)
255
+ this.refreshLayoutMetrics();
256
+ const topSpace = this.effectiveOffset(first);
257
+ const botSpace = this.effectiveOffset(this.items.length) - this.effectiveOffset(last + 1);
258
+ this.spacerTop.style.height = `${topSpace}px`;
259
+ this.spacerBottom.style.height = `${botSpace}px`;
260
+ return;
261
+ }
175
262
  this.firstVisible = first;
176
263
  this.lastVisible = last;
177
264
 
@@ -182,7 +269,6 @@ export class VirtualScroll {
182
269
  if (!isNaN(idx)) mounted.set(idx, child);
183
270
  }
184
271
 
185
- // Remove items no longer in range
186
272
  for (const [idx, el] of mounted) {
187
273
  if (idx < first || idx > last) {
188
274
  el.remove();
@@ -190,7 +276,6 @@ export class VirtualScroll {
190
276
  }
191
277
  }
192
278
 
193
- // Build ordered list — reuse existing or create new
194
279
  const ordered: HTMLElement[] = [];
195
280
  for (let i = first; i <= last; i++) {
196
281
  const existing = mounted.get(i);
@@ -208,7 +293,6 @@ export class VirtualScroll {
208
293
  }
209
294
  }
210
295
 
211
- // Reorder viewport children to match (minimal DOM moves)
212
296
  let nodeRef = this.viewport.firstChild as HTMLElement | null;
213
297
  for (const el of ordered) {
214
298
  if (el !== nodeRef) {
@@ -218,7 +302,15 @@ export class VirtualScroll {
218
302
  }
219
303
  }
220
304
 
221
- // Fire lazy render callback FIRST (replaces skeleton with real content)
305
+ // Measure spacing from actual DOM AFTER mounting items
306
+ this.refreshLayoutMetrics();
307
+
308
+ // Compute spacers with correct spacing
309
+ const topSpace = this.effectiveOffset(first);
310
+ const botSpace = this.effectiveOffset(this.items.length) - this.effectiveOffset(last + 1);
311
+ this.spacerTop.style.height = `${topSpace}px`;
312
+ this.spacerBottom.style.height = `${botSpace}px`;
313
+
222
314
  if (this.onLazyRender) {
223
315
  const lazyTargets = this.viewport.querySelectorAll<HTMLElement>('.lazy-pending');
224
316
  if (lazyTargets.length > 0) {
@@ -226,17 +318,13 @@ export class VirtualScroll {
226
318
  }
227
319
  }
228
320
 
229
- // Fire post-render callback for widget activation
230
321
  if (this.onPostRender) {
231
322
  this.onPostRender(this.viewport);
232
323
  }
233
324
 
234
- // Batch-read heights AFTER lazy render + widget activation
235
325
  this.remeasureVisible();
236
326
  }
237
327
 
238
- /** Batch-read heights from visible elements, batch-write to items array.
239
- * Separated read/write passes = single forced reflow. */
240
328
  private remeasureVisible(): void {
241
329
  const wasAtBottom = this.container.scrollHeight - this.container.scrollTop - this.container.clientHeight < 80;
242
330
 
@@ -253,6 +341,7 @@ export class VirtualScroll {
253
341
  if (oldH !== newH) {
254
342
  this.items[idx].height = newH;
255
343
  this._totalHeight += (newH - oldH);
344
+ this.markPrefixDirty(idx);
256
345
  heightChanged = true;
257
346
  }
258
347
  }
@@ -261,14 +350,13 @@ export class VirtualScroll {
261
350
  }
262
351
  }
263
352
 
264
- /** RC2 fix: synchronous scroll — cancel pending RAF, update spacers, render directly */
353
+ /** Synchronous scroll — cancel pending RAF, update spacers, render directly */
265
354
  scrollToBottom(): void {
266
355
  if (this.rafId) { cancelAnimationFrame(this.rafId); this.rafId = null; }
267
- // Update spacers to reflect full content height at bottom position
268
- this.spacerTop.style.height = `${this._totalHeight}px`;
356
+ const total = this.totalEffectiveHeight();
357
+ this.spacerTop.style.height = `${total}px`;
269
358
  this.spacerBottom.style.height = '0px';
270
359
  this.container.scrollTop = this.container.scrollHeight;
271
- // Reset visible range to force full re-render at new position
272
360
  this.firstVisible = -1;
273
361
  this.lastVisible = -1;
274
362
  this.render();
@@ -277,6 +365,9 @@ export class VirtualScroll {
277
365
  clear(): void {
278
366
  this.items = [];
279
367
  this._totalHeight = 0;
368
+ this.prefixHeights = [0];
369
+ this.prefixDirtyFrom = 0;
370
+ this.itemSpacing = 0;
280
371
  if (this._active) {
281
372
  this.container.classList.remove('vs-active');
282
373
  this.container.removeEventListener('scroll', this.scrollHandler);
@@ -1,25 +0,0 @@
1
- import{A as e,C as t,D as n,E as r,F as i,I as a,M as o,N as s,O as c,P as l,S as u,T as d,_ as f,b as ee,j as p,k as m,u as te,v as ne,w as h,x as re,y as g}from"./vendor-render-D2YP6GiF.js";import{r as ie}from"./api-DygAf_G_.js";import{Q as _,Z as v}from"./vendor-mermaid-C2RBgdM6.js";import{A as ae,B as oe,C as se,D as ce,E as le,F as ue,G as de,H as fe,I as pe,J as me,K as he,L as ge,M as _e,N as ve,O as ye,P as be,R as xe,S as Se,T as Ce,U as we,V as Te,W as Ee,_ as De,a as Oe,b as ke,c as Ae,d as je,f as Me,g as Ne,h as Pe,i as y,j as Fe,k as Ie,l as Le,m as Re,n as ze,o as Be,p as Ve,q as He,r as Ue,s as We,t as Ge,u as Ke,v as qe,w as Je,x as Ye,y as Xe,z as Ze}from"./vendor-icons-BqxEYYco.js";var b=`ko`,x={},S={};async function Qe(){let e=null;try{e=localStorage.getItem(`claw_locale`)}catch{}if(!e){let t=(navigator.language||`ko`).split(/[-_]/)[0].toLowerCase();e=[`en`,`ko`].includes(t)?t:`ko`}S=await C(`ko`),x=e===`ko`?S:await C(e),b=e,T()}async function C(e){try{let{api:t}=await v(async()=>{let{api:e}=await import(`./api-COrKYKcO.js`);return{api:e}},[]);return await t(`/api/i18n/${e}`)||{}}catch{return{}}}function w(e,t={}){let n=x[e]??S[e]??e;for(let[e,r]of Object.entries(t))n=n.replaceAll(`{${e}}`,String(r));return n}function T(){document.querySelectorAll(`[data-i18n]`).forEach(e=>{let t=e.getAttribute(`data-i18n`);t&&(e.textContent=w(t))}),document.querySelectorAll(`[data-i18n-placeholder]`).forEach(e=>{let t=e.getAttribute(`data-i18n-placeholder`);t&&(e.placeholder=w(t))}),document.querySelectorAll(`[data-i18n-title]`).forEach(e=>{let t=e.getAttribute(`data-i18n-title`);t&&(e.title=w(t))}),document.querySelectorAll(`[data-i18n-aria]`).forEach(e=>{let t=e.getAttribute(`data-i18n-aria`);t&&e.setAttribute(`aria-label`,w(t))})}async function $e(e){if(e!==b){x=e===`ko`?S:await C(e),b=e;try{localStorage.setItem(`claw_locale`,e)}catch{}T();try{let{loadEmployees:e}=await v(async()=>{let{loadEmployees:e}=await import(`./employees-zxrU6ZV_.js`);return{loadEmployees:e}},[]);e()}catch{}try{let{loadSkills:e}=await v(async()=>{let{loadSkills:e}=await import(`./skills-JuDja1UC.js`);return{loadSkills:e}},[]);e()}catch{}try{let{loadCommands:e}=await v(async()=>{let{loadCommands:e}=await import(`./slash-commands-DyLS0abr.js`);return{loadCommands:e}},[]);e()}catch{}try{let{loadSettings:e}=await v(async()=>{let{loadSettings:e}=await import(`./settings-BHIV4l1s.js`);return{loadSettings:e}},[]);e()}catch{}}}function et(){return b}function tt(e,t={}){let n=new URL(e,location.origin);return n.searchParams.has(`locale`)||n.searchParams.set(`locale`,b),fetch(n.toString(),t)}var E=14,nt=16;function D(e,t=nt){return me(e,{size:t})}var O={check:D(xe),error:D(ge),warning:D(y),skip:D(We),tool:D(Ue),thinking:D(ke),search:D(Ke),web:D(ae),exec:D(Ge),compacting:D(De),plan:D(qe),brain:D(Ee),heartPulse:D(ye),lock:D(Ye),lockOpen:D(Se),key:D(Ce),settings:D(Ae),file:D(ve),trash:D(Oe),lightbulb:D(Je),refresh:D(Me),mic:D(Xe),clipboard:D(pe),robot:D(de),palette:D(Ne),link:D(se),salute:D(Ie),shark:`🦈`,paperclip:D(Pe),save:D(je),gamepad:D(Fe),house:D(le),radio:D(Ve),folder:D(_e),pencil:D(Re),chart:D(we),hourglass:D(ce),stop:D(Be),close:D(ze,E),send:D(Le),copy:D(ue,E),download:D(be,E),checkSimple:D(fe,E),chevronLeft:D(oe,E),chevronRight:D(Ze,E),chevronDown:D(Te,E),arrowLeft:D(He,E),arrowRight:D(he,E)},rt={"✅":`check`,"❌":`error`,"🔧":`tool`,"⏭":`skip`,"🧠":`brain`,"💓":`heartPulse`,"🔒":`lock`,"🔓":`lockOpen`,"🔑":`key`,"⚙":`settings`,"⚙️":`settings`,"📄":`file`,"🗑":`trash`,"🗑️":`trash`,"⚠":`warning`,"⚠️":`warning`,"💡":`lightbulb`,"🦈":`shark`,"💭":`thinking`,"🔍":`search`,"🌐":`web`,"⚡":`exec`,"🗜":`compacting`,"🗜️":`compacting`,"📝":`plan`,"📑":`clipboard`,"🤖":`robot`,"📋":`clipboard`,"🔄":`refresh`,"🎨":`palette`,"🎤":`mic`,"🔗":`link`,"🫡":`salute`,"📎":`paperclip`,"💾":`save`,"🎮":`gamepad`,"🏠":`house`,"📡":`radio`,"📂":`folder`,"✏️":`pencil`,"📊":`chart`,"🎙️":`mic`};function it(e){let t=rt[e];return t?O[t]:e}function at(e){return e===`✅`?`done`:e===`❌`?`error`:null}function ot(e=document.body){let t=e.querySelectorAll(`[data-icon]`);for(let e of t){let t=e.dataset.icon;t&&O[t]&&(e.innerHTML=O[t],e.classList.add(`icon-hydrated`))}}function st(e){let t=[],n=e.replace(/```[\s\S]*?```/g,e=>(t.push(e),`\x00P${t.length-1}\x00`)).replace(/`[^`]+`/g,e=>(t.push(e),`\x00P${t.length-1}\x00`));return n=n.replace(/([\p{P}])\*\*(?=[^\s\p{P}])/gu,(e,t)=>t===`*`?e:t+`​**`),n=n.replace(/\x00P(\d+)\x00/g,(e,n)=>t[Number(n)]),n}var k=0;function ct(e){let t=new Map;return{text:e.replace(/^ {0,3}(`{3,}|~{3,})[^\n]*\n[\s\S]*?\n {0,3}\1[ \t]*$/gm,e=>{let n=`\x00FENCE-${k++}\x00`;return t.set(n,e),n}),fences:t}}function lt(e,t){for(let[n,r]of t)e=e.replace(n,()=>r);return e}function A(e,t=!1){let n=[],r=``,i=0;for(;i<e.length;){let a=e.indexOf(`<svg`,i);if(a===-1){r+=e.slice(i);break}let o=e[a+4];if(o&&!/[\s\/>]/.test(o)){r+=e.slice(i,a+4),i=a+4;continue}r+=e.slice(i,a);let s=0,c=a,l=!1;for(;c<e.length;){let t=e.indexOf(`<svg`,c+1),o=e.indexOf(`</svg>`,c+(c===a?0:1));if(o===-1)break;if(t!==-1&&t<o){let n=e[t+4];n&&/[\s\/>]/.test(n)&&s++,c=t+4}else if(s===0){let t=o+6,s=e.slice(a,t),c=k++,u=`\n\n<div data-jaw-svg="${c}"></div>\n\n`;n.push({id:c,index:a,length:s.length,svg:s,kind:`complete`,placeholder:u}),r+=u,i=t,l=!0;break}else s--,c=o+6}if(!l){let o=k++;if(t){let t=e.slice(a),s=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="partial"></div>\n\n`;n.push({id:o,index:a,length:t.length,svg:``,kind:`partial`,placeholder:s}),r+=s,i=e.length}else{let t=`\n\n<div data-jaw-svg="${o}" data-jaw-kind="error"></div>\n\n`,s=e.slice(a),c=s.search(/\n\s*\n/),l=c===-1?s.length:c;n.push({id:o,index:a,length:l,svg:``,kind:`error`,placeholder:t}),r+=t,i=a+l}}}return{text:r,blocks:n}}l.registerLanguage(`javascript`,s),l.registerLanguage(`js`,s),l.registerLanguage(`typescript`,o),l.registerLanguage(`ts`,o),l.registerLanguage(`python`,p),l.registerLanguage(`py`,p),l.registerLanguage(`bash`,e),l.registerLanguage(`shell`,m),l.registerLanguage(`sh`,m),l.registerLanguage(`json`,c),l.registerLanguage(`css`,n),l.registerLanguage(`xml`,r),l.registerLanguage(`html`,r),l.registerLanguage(`markdown`,d),l.registerLanguage(`md`,d),l.registerLanguage(`yaml`,h),l.registerLanguage(`yml`,h),l.registerLanguage(`sql`,t),l.registerLanguage(`rust`,u),l.registerLanguage(`rs`,u),l.registerLanguage(`go`,re),l.registerLanguage(`java`,ee),l.registerLanguage(`cpp`,g),l.registerLanguage(`c`,g),l.registerLanguage(`diff`,ne),l.registerLanguage(`plaintext`,f),l.registerLanguage(`text`,f);var j=null,M=Promise.resolve();function ut(){return document.documentElement.getAttribute(`data-theme`)===`light`?{primaryColor:`#e2e8f0`,primaryTextColor:`#1a202c`,primaryBorderColor:`#a0aec0`,lineColor:`#718096`,secondaryColor:`#ebf8ff`,tertiaryColor:`#f7fafc`,background:`transparent`,mainBkg:`#e2e8f0`,nodeBorder:`#a0aec0`,clusterBkg:`#f7fafc`,clusterBorder:`#cbd5e0`,titleColor:`#1a202c`,edgeLabelBackground:`#f7fafc`}:{primaryColor:`#2d3748`,primaryTextColor:`#e2e8f0`,primaryBorderColor:`#4a5568`,lineColor:`#718096`,secondaryColor:`#1a365d`,tertiaryColor:`#1a202c`,background:`transparent`,mainBkg:`#2d3748`,nodeBorder:`#4a5568`,clusterBkg:`#1a202c`,clusterBorder:`#2d3748`,titleColor:`#e2e8f0`,edgeLabelBackground:`#1a202c`}}async function N(){return j||(j=await v(()=>import(`./mermaid.core-CYqc8Qyq.js`),[]),j.default.setParseErrorHandler(()=>{})),j.default}function P(){j.default.initialize({startOnLoad:!1,theme:`base`,htmlLabels:!1,themeVariables:ut(),securityLevel:`strict`,suppressErrorRendering:!0})}function F(e){let t=_.sanitize(e,{USE_PROFILES:{svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`]}),n=document.createElement(`div`);n.innerHTML=t;for(let e of n.querySelectorAll(`style`)){let t=e.textContent||``;t=t.replace(/@import\b[^;]*;?/gi,`/* stripped */`),t=t.replace(/@font-face\s*\{[^}]*\}/gi,`/* stripped */`),t=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`),e.textContent=t}return n.innerHTML}function I(e){return e.replace(/&/g,`&amp;`).replace(/</g,`&lt;`).replace(/>/g,`&gt;`).replace(/"/g,`&quot;`).replace(/'/g,`&#39;`)}function L(e){return _.sanitize(e,{USE_PROFILES:{html:!0,svg:!0,svgFilters:!0},FORBID_TAGS:[`script`,`style`,`iframe`,`object`,`embed`,`form`,`input`,`foreignObject`,`animate`,`set`,`animateTransform`,`animateMotion`],FORBID_ATTR:[`onerror`,`onclick`,`onload`,`onmouseover`,`onfocus`,`onblur`,`background`],ADD_TAGS:[`use`],ADD_ATTR:[`aria-hidden`,`xmlns`,`viewBox`,`role`,`aria-label`,`data-jaw-svg`,`data-jaw-kind`]})}var dt=`http://www.w3.org/2000/svg`,ft=new Set([`a`,`area`,`link`]);_.addHook(`afterSanitizeAttributes`,e=>{let t=e.tagName.toLowerCase();if(e.namespaceURI===dt||!ft.has(t)){let t=e.getAttribute(`href`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`href`)}let n=e.getAttributeNS(`http://www.w3.org/1999/xlink`,`href`)||e.getAttribute(`xlink:href`)||``;if(n&&!n.startsWith(`#`)&&(e.removeAttributeNS(`http://www.w3.org/1999/xlink`,`href`),e.removeAttribute(`xlink:href`)),t===`image`||t===`feimage`){let t=e.getAttribute(`src`)||``;t&&!t.startsWith(`#`)&&e.removeAttribute(`src`)}let r=[`fill`,`stroke`,`filter`,`mask`,`clip-path`,`marker-start`,`marker-mid`,`marker-end`,`cursor`];if(e.hasAttribute(`style`)){let t=e.style?.cssText||``;if(/url\s*\(/i.test(t)){let n=t.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.style.cssText=n}}for(let t of r)if(e.hasAttribute(t)){let n=e.getAttribute(t)||``;if(/url\s*\(/i.test(n)){let r=n.replace(/url\s*\(\s*(?!['"]?#)[^)]*\)/gi,`none`);e.setAttribute(t,r)}}});var pt=/["'](?:subtasks|employee_config|agent_phases|orchestration_plan)["']\s*:/;function R(e){let t=e.replace(/```json\n([\s\S]*?)\n```/g,(e,t)=>pt.test(t)?``:e);return t=t.replace(/\{[^{}]*"subtasks"\s*:\s*\[[\s\S]*?\]\s*\}/g,``).trim(),t}function mt(e){let t=[],n=[],r=e.replace(/```[\s\S]*?```/g,e=>(n.push(e),`\x00C${n.length-1}\x00`)).replace(/`[^`]+`/g,e=>(n.push(e),`\x00C${n.length-1}\x00`));return r=r.replace(/\$\$([\s\S]+?)\$\$/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\[([\s\S]+?)\\\]/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!0}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/(?<!\$)\$(?!\$)([^\n$]+?)\$(?!\$)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\\\((.+?)\\\)/g,(e,n)=>(t.push({tex:n.trim(),displayMode:!1}),`\x00MATH-${t.length-1}\x00`)),r=r.replace(/\x00C(\d+)\x00/g,(e,t)=>n[Number(t)]),{text:r,blocks:t}}function ht(e,t,n=!1){return e.replace(/\x00MATH-(\d+)\x00/g,(e,r)=>{let i=t[Number(r)];if(!i)return`<code title="math placeholder error">[math error]</code>`;if(n)return i.displayMode?`<div class="math-placeholder">${I(i.tex)}</div>`:`<code class="math-placeholder">${I(i.tex)}</code>`;try{return te.renderToString(i.tex,{displayMode:i.displayMode,throwOnError:!1})}catch{return i.displayMode?`<pre><code>${I(i.tex)}</code></pre>`:`<code>${I(i.tex)}</code>`}})}var z=0;async function gt(){let e=document.querySelectorAll(`.mermaid-rendered`);if(!e.length)return;let t=await N();for(let n of e){let e=n.dataset.mermaidCode;if(!e)continue;let r=`mermaid-${++z}`;try{P();let{svg:i}=await t.render(r,e);n.innerHTML=F(i),V(n)}catch{}}}var B=null;function _t(){B||=new IntersectionObserver(e=>{for(let t of e){if(!t.isIntersecting)continue;let e=t.target;e.classList.contains(`mermaid-pending`)&&(B.unobserve(e),bt(e))}},{rootMargin:`200px`})}function V(e){e.querySelector(`.mermaid-copy-btn`)?.remove(),e.querySelector(`.mermaid-save-btn`)?.remove();let t=document.createElement(`button`);t.className=`mermaid-save-btn`,t.type=`button`,t.ariaLabel=`Save as image`,t.title=`Save`,t.innerHTML=O.download,e.appendChild(t);let n=document.createElement(`button`);n.className=`mermaid-copy-btn`,n.type=`button`,n.ariaLabel=`Copy source`,n.title=`Copy`,n.innerHTML=O.copy,e.appendChild(n)}function vt(e,t,n){e.classList.remove(`mermaid-rendered`),e.innerHTML=`
2
- <div class="mermaid-error">
3
- <div class="mermaid-error-title">${O.warning} ${I(w(`mermaid.renderFail`)||`Mermaid render failed`)}</div>
4
- <div class="mermaid-error-msg">${I(n.slice(0,200))}</div>
5
- <pre class="mermaid-error-code"><code>${I(t)}</code></pre>
6
- </div>`}async function yt(e){e.classList.remove(`mermaid-pending`);let t=e.textContent||``;e.dataset.mermaidCode=t;let n=`mermaid-${++z}`;try{let r=await N();P();let{svg:i}=await r.render(n,t);e.innerHTML=F(i),e.classList.add(`mermaid-rendered`),V(e)}catch(n){vt(e,t,n?.message||n?.str||`Unknown error`)}}function bt(e){M=M.then(()=>yt(e))}async function xt(e){let t=(e||document).querySelectorAll(`.mermaid-pending`);if(t.length){_t();for(let e of t)B.observe(e)}}var H=!1;function St(){if(H)return!0;let e=new a;return e.code=function({text:e,lang:t}){if(t===`mermaid`)return`<div class="mermaid-container mermaid-pending">${I(e)}</div>`;if(t?.trim().toLowerCase()===`diagram-html`)return`<div class="diagram-widget-pending" data-diagram-html="${btoa(unescape(encodeURIComponent(e)))}"
7
- role="status" aria-label="Interactive widget loading">
8
- <div class="diagram-spinner"></div>
9
- </div>`;let n=I(e);if(t&&l.getLanguage(t))try{n=l.highlight(e,{language:t}).value}catch{}else try{n=l.highlightAuto(e).value}catch{}let r=t?I(t):``,i=w(`code.copy`)||`Copy`;return`<div class="code-block"><div class="code-header"><span class="code-lang">${r}</span><button class="code-copy-btn" type="button" aria-label="${I(i)}">${I(i)}</button></div><pre><code class="hljs${t?` language-${I(t)}`:``}">${n}</code></pre></div>`},i.setOptions({renderer:e,gfm:!0,breaks:!1}),H=!0,!0}function Ct(e){(e||document).querySelectorAll(`.code-block pre code, .code-block-wrapper pre code`).forEach(e=>{if(e.dataset.highlighted===`yes`)return;let t=[...e.classList].find(e=>e.startsWith(`language-`))?.replace(`language-`,``),n=e.textContent||``;try{t&&l.getLanguage(t)?e.innerHTML=l.highlight(n,{language:t}).value:e.innerHTML=l.highlightAuto(n).value,e.dataset.highlighted=`yes`}catch{}})}var U=/(?:~\/[^\s)`\]"'<>]+|\/(?:Users|home|tmp|var|opt|private)\/[^\s)`\]"'<>]+)/g,wt=/[.,!?:;]+$/,Tt=/^(?:~\/|\/(?:Users|home|tmp|var|opt|private)\/)/;function Et(e){return Tt.test(e)}function W(e,t){t&&t.classList.add(`opening`),ie(`/api/file/open`,`POST`,{path:e}).then(e=>{t?.classList.remove(`opening`),e?.ok===!1?(t?.classList.add(`open-failed`),t&&(t.title=e?.error||`Failed to open`),setTimeout(()=>{t?.classList.remove(`open-failed`),t&&(t.title=``)},2e3)):(t?.classList.add(`opened`),setTimeout(()=>t?.classList.remove(`opened`),1500))}).catch(()=>{t?.classList.remove(`opening`),t?.classList.add(`open-failed`),setTimeout(()=>t?.classList.remove(`open-failed`),2e3)})}function G(e){let t=new Set([`PRE`,`A`,`BUTTON`,`TEXTAREA`,`INPUT`,`SCRIPT`,`STYLE`]),n=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode(n){let r=n.parentElement;for(;r&&r!==e;){if(t.has(r.tagName)||r.classList.contains(`file-path-link`)||r.tagName===`CODE`&&r.parentElement?.tagName===`PRE`)return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),r=new Map,i;for(;i=n.nextNode();){let e=i.textContent||``;U.lastIndex=0;let t,n=[];for(;t=U.exec(e);){let e=t[0],r=e.replace(wt,``);r.length<4||n.push({index:t.index,raw:e,clean:r})}n.length&&r.set(i,n)}for(let[e,t]of r){let n=e.textContent||``,r=e.parentNode;if(!r)continue;let i=document.createDocumentFragment(),a=0;for(let{index:e,raw:r,clean:o}of t){e>a&&i.appendChild(document.createTextNode(n.slice(a,e)));let t=document.createElement(`span`);t.className=`file-path-link`,t.setAttribute(`data-file-path`,o),t.setAttribute(`role`,`button`),t.setAttribute(`tabindex`,`0`),t.textContent=o,i.appendChild(t);let s=r.slice(o.length);s&&i.appendChild(document.createTextNode(s)),a=e+r.length}a<n.length&&i.appendChild(document.createTextNode(n.slice(a))),r.replaceChild(i,e)}}var K=!1;function Dt(){K||(K=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`a`),r=n?.getAttribute(`href`)||``;if(n&&Et(r)){e.preventDefault(),n.classList.add(`file-path-link`),W(r,n);return}let i=t?.closest(`.file-path-link`);if(!i)return;let a=i.getAttribute(`data-file-path`);a&&W(a,i)}),document.addEventListener(`keydown`,e=>{if(e.key!==`Enter`&&e.key!==` `)return;let t=e.target;t?.classList.contains(`file-path-link`)&&(e.preventDefault(),t.click())}))}var q=!1;function Ot(){q||(q=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.code-copy-btn`);if(n){let e=n.closest(`.code-block`);if(!e)return;let t=e.querySelector(`pre code`);if(!t)return;navigator.clipboard.writeText(t.textContent||``).then(()=>{let e=n.textContent||``;n.textContent=w(`code.copied`),n.classList.add(`copied`),setTimeout(()=>{n.textContent=e,n.classList.remove(`copied`)},1500)}).catch(()=>{});return}let r=t?.closest(`.code-lang-label`);if(!r)return;let i=r.closest(`.code-block-wrapper`);if(!i)return;let a=i.querySelector(`pre code`);a&&navigator.clipboard.writeText(a.textContent||``).then(()=>{let e=r.textContent||``;r.textContent=w(`code.copied`),r.classList.add(`copied`),setTimeout(()=>{r.textContent=e,r.classList.remove(`copied`)},1500)}).catch(()=>{})}))}var J=!1;function kt(){J||(J=!0,document.addEventListener(`click`,e=>{let t=e.target,n=t?.closest(`.diagram-copy-btn`);if(n){let e=n.closest(`.diagram-container`);if(!e)return;let t=``;if(e.dataset.widgetHtml)try{t=decodeURIComponent(escape(atob(e.dataset.widgetHtml)))}catch{return}else{let n=e.querySelector(`svg`);n&&(t=n.outerHTML)}t&&Y(n,t,`copy`);return}let r=t?.closest(`.mermaid-copy-btn`);if(r){let e=r.closest(`.mermaid-container`);if(!e)return;let t=e.dataset.mermaidCode||``;t&&Y(r,t,`copy`);return}let i=t?.closest(`.diagram-save-btn`);if(i){let e=i.closest(`.diagram-container`);if(!e)return;if(e.dataset.widgetHtml){let t=e.querySelector(`iframe`);t?.contentWindow&&(t.contentWindow.postMessage({type:`jaw-request-screenshot`},`*`),Y(i,``,`save`));return}let t=e.querySelector(`svg`);t&&X(t,i);return}let a=t?.closest(`.mermaid-save-btn`);if(a){let e=a.closest(`.mermaid-container`);if(!e)return;let t=e.querySelector(`svg`);t&&X(t,a);return}}))}function Y(e,t,n){let r=()=>{let t=e.innerHTML;e.innerHTML=O.checkSimple,e.classList.add(`copied`),setTimeout(()=>{e.innerHTML=t,e.classList.remove(`copied`)},1500)};n===`copy`?navigator.clipboard.writeText(t).then(r).catch(()=>{}):r()}function X(e,t){let n=e.cloneNode(!0),r=e.getBoundingClientRect();n.getAttribute(`width`)||n.setAttribute(`width`,String(r.width)),n.getAttribute(`height`)||n.setAttribute(`height`,String(r.height));let i=new XMLSerializer().serializeToString(n),a=`data:image/svg+xml;charset=utf-8,`+encodeURIComponent(i),o=new Image;o.onload=()=>{let e=document.createElement(`canvas`);e.width=o.naturalWidth*2,e.height=o.naturalHeight*2;let n=e.getContext(`2d`);n.scale(2,2),n.drawImage(o,0,0),e.toBlob(e=>{e&&(Z(e,`diagram-${Date.now()}.png`),Y(t,``,`save`))},`image/png`)},o.onerror=()=>{Z(new Blob([i],{type:`image/svg+xml;charset=utf-8`}),`diagram-${Date.now()}.svg`),Y(t,``,`save`)},o.src=a}function Z(e,t){let n=URL.createObjectURL(e),r=document.createElement(`a`);r.href=n,r.download=t,r.click(),setTimeout(()=>URL.revokeObjectURL(n),1e3)}function At(e){return e.kind===`partial`?`<div class="diagram-container diagram-loading" role="status"
10
- aria-label="Diagram loading"><div class="diagram-spinner"></div></div>`:e.kind===`error`?`<div class="diagram-container diagram-error" role="alert">
11
- Malformed SVG: unclosed element</div>`:`<div class="diagram-container diagram-svg" tabindex="0"
12
- role="figure" aria-label="SVG diagram">
13
- ${L(e.svg)}
14
- <button class="diagram-save-btn" type="button"
15
- aria-label="Save as image" title="Save">${O.download}</button>
16
- <button class="diagram-copy-btn" type="button"
17
- aria-label="Copy source" title="Copy">${O.copy}</button>
18
- <button class="diagram-zoom-btn" type="button"
19
- aria-label="Expand diagram" title="Expand">⤢</button>
20
- </div>`}function jt(e,t){for(let n of t){let t=`<div\\b[^>]*?\\bdata-jaw-svg="${n.id}"[^>]*></div>`,r=new RegExp(t,`g`),i=At(n);e=e.replace(r,()=>i)}return e}function Mt(e){(e||document).querySelectorAll(`.diagram-zoom-btn`).forEach(e=>{e.dataset.bound||(e.dataset.bound=`1`,e.addEventListener(`click`,()=>{let t=e.closest(`.diagram-container`);if(!t)return;let n=t.cloneNode(!0);n.querySelectorAll(`.diagram-zoom-btn, .diagram-copy-btn, .diagram-save-btn`).forEach(e=>e.remove()),Nt(n.innerHTML)}))})}function Nt(e){let t=document.activeElement,n=document.createElement(`div`);n.className=`diagram-overlay`,n.setAttribute(`role`,`dialog`),n.setAttribute(`aria-modal`,`true`),n.setAttribute(`aria-label`,`Expanded diagram`),n.innerHTML=`
21
- <div class="diagram-overlay-content">${L(e)}</div>
22
- <button class="diagram-overlay-close" type="button" aria-label="Close">✕</button>
23
- `,n.querySelectorAll(`.diagram-overlay-content svg`).forEach(e=>{if(!e.getAttribute(`viewBox`)){let t=e.getAttribute(`width`)||e.getBBox?.()?.width,n=e.getAttribute(`height`)||e.getBBox?.()?.height;t&&n&&e.setAttribute(`viewBox`,`0 0 ${parseFloat(String(t))} ${parseFloat(String(n))}`)}e.removeAttribute(`width`),e.removeAttribute(`height`)});let r=n.querySelector(`.diagram-overlay-close`),i=()=>{n.remove(),document.removeEventListener(`keydown`,a),t&&t.isConnected&&t.focus()},a=e=>{if(e.key===`Escape`){i();return}if(e.key===`Tab`){let t=n.querySelectorAll(`button, [href], [tabindex]:not([tabindex="-1"])`);if(t.length===0)return;let r=t[0],i=t[t.length-1];e.shiftKey&&document.activeElement===r?(e.preventDefault(),i.focus()):!e.shiftKey&&document.activeElement===i&&(e.preventDefault(),r.focus())}};r.addEventListener(`click`,i),document.addEventListener(`keydown`,a),document.body.appendChild(n),r.focus()}function Pt(e,t=!1){let n=R(e);if(!n)return`<em class="text-dim orchestrate-placeholder">${I(w(`orchestrator.dispatching`))}</em>`;let{text:r,fences:a}=ct(n.replace(/\n{3,}/g,`
24
-
25
- `)),{text:o,blocks:s}=A(r,t),{text:c,blocks:l}=mt(lt(o,a));St();let u=st(c),d=i.parse(u);return d=d.replace(/<table/g,`<div class="table-wrapper"><table`).replace(/<\/table>/g,`</table></div>`),d=ht(d,l,t),d=L(d),d=jt(d,s),t||Ft(),Ot(),kt(),Dt(),d}var Q=null,$=null;function Ft(){$&&clearTimeout($),Q&&=(cancelAnimationFrame(Q),null),$=setTimeout(()=>{$=null,Q=requestAnimationFrame(()=>{Q=null,xt(),Ct(),Mt();let e=document.getElementById(`chatMessages`);e&&G(e)})},100)}function It(){$&&=(clearTimeout($),null),Q&&=(cancelAnimationFrame(Q),null)}export{gt as a,it as c,tt as d,et as f,w as h,Pt as i,at as l,$e as m,I as n,R as o,Qe as p,G as r,O as s,It as t,ot as u};
@@ -1 +0,0 @@
1
- import{b as e,m as t,v as n}from"./settings-Dl3RnWsB.js";export{t as loadSettings,n as savePerCli,e as updateSettings};
@@ -1 +0,0 @@
1
- import{n as e}from"./skills-DhiCSGws.js";export{e as loadSkills};
@@ -1 +0,0 @@
1
- import{a as e}from"./slash-commands-B1k1vFJG.js";export{e as loadCommands};