@design.estate/dees-catalog 4.12.0 → 6.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (37) hide show
  1. package/dist_bundle/bundle.js +2719 -1261
  2. package/dist_ts_web/00_commitinfo_data.js +2 -2
  3. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.d.ts +23 -4
  4. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.js +290 -78
  5. package/dist_ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.js +419 -42
  6. package/dist_ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.js +44 -3
  7. package/dist_ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.js +5 -7
  8. package/dist_ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.js +5 -2
  9. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.d.ts +54 -0
  10. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.demo.d.ts +1 -0
  11. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.demo.js +56 -0
  12. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.js +870 -0
  13. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/index.d.ts +1 -0
  14. package/dist_ts_web/elements/00group-harness/dees-harness-session-sidebar/index.js +2 -0
  15. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.d.ts +5 -0
  16. package/dist_ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.js +87 -3
  17. package/dist_ts_web/elements/00group-harness/harness.markdown.js +3 -1
  18. package/dist_ts_web/elements/00group-harness/harness.styles.js +48 -1
  19. package/dist_ts_web/elements/00group-harness/index.d.ts +1 -0
  20. package/dist_ts_web/elements/00group-harness/index.js +2 -1
  21. package/dist_ts_web/elements/00group-harness/interfaces.d.ts +41 -0
  22. package/package.json +1 -1
  23. package/readme.md +13 -5
  24. package/ts_web/00_commitinfo_data.ts +1 -1
  25. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.demo.ts +277 -79
  26. package/ts_web/elements/00group-harness/dees-harness-chat/dees-harness-chat.ts +367 -36
  27. package/ts_web/elements/00group-harness/dees-harness-message/dees-harness-message.ts +43 -2
  28. package/ts_web/elements/00group-harness/dees-harness-reasoning/dees-harness-reasoning.ts +4 -6
  29. package/ts_web/elements/00group-harness/dees-harness-session-list/dees-harness-session-list.ts +4 -1
  30. package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.demo.ts +67 -0
  31. package/ts_web/elements/00group-harness/dees-harness-session-sidebar/dees-harness-session-sidebar.ts +802 -0
  32. package/ts_web/elements/00group-harness/dees-harness-session-sidebar/index.ts +1 -0
  33. package/ts_web/elements/00group-harness/dees-harness-tool-card/dees-harness-tool-card.ts +79 -1
  34. package/ts_web/elements/00group-harness/harness.markdown.ts +2 -0
  35. package/ts_web/elements/00group-harness/harness.styles.ts +47 -0
  36. package/ts_web/elements/00group-harness/index.ts +1 -0
  37. package/ts_web/elements/00group-harness/interfaces.ts +48 -0
@@ -3,7 +3,7 @@
3
3
  */
4
4
  export const commitinfo = {
5
5
  name: '@design.estate/dees-catalog',
6
- version: '4.12.0',
6
+ version: '6.0.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
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxRQUFRO0lBQ2pCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
9
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiMDBfY29tbWl0aW5mb19kYXRhLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vdHNfd2ViLzAwX2NvbW1pdGluZm9fZGF0YS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQTs7R0FFRztBQUNILE1BQU0sQ0FBQyxNQUFNLFVBQVUsR0FBRztJQUN4QixJQUFJLEVBQUUsNkJBQTZCO0lBQ25DLE9BQU8sRUFBRSxPQUFPO0lBQ2hCLFdBQVcsRUFBRSxzSkFBc0o7Q0FDcEssQ0FBQSJ9
@@ -1,7 +1,8 @@
1
1
  import { DeesElement, type TemplateResult } from '@design.estate/dees-element';
2
- import type { IHarnessAttachment, IHarnessMessage, IHarnessPermissionRequest, IHarnessQuestionRequest, IHarnessStatus, IHarnessTodoItem, IHarnessUsage, THarnessStreamDelta } from '../interfaces.js';
2
+ import type { IHarnessAttachment, IHarnessMessage, IHarnessPermissionRequest, IHarnessQuestionRequest, IHarnessIntelligenceExchange, IHarnessScratchpad, IHarnessSessionMetrics, IHarnessStatus, IHarnessTodoItem, IHarnessUsage, THarnessStreamDelta } from '../interfaces.js';
3
3
  import { DeesHarnessToolRegistry } from '../toolregistry.js';
4
4
  import '../dees-harness-todos/dees-harness-todos.js';
5
+ import '../dees-harness-session-sidebar/dees-harness-session-sidebar.js';
5
6
  import '../dees-harness-usage/dees-harness-usage.js';
6
7
  import '../../00group-button/dees-button/dees-button.js';
7
8
  import '../../00group-utility/dees-icon/dees-icon.js';
@@ -15,8 +16,7 @@ declare global {
15
16
  * pinned permission queue, status line, and composer. Owns no business
16
17
  * logic — consumers feed `.messages`/`.permissions`/`.status` (and stream
17
18
  * through `applyDelta()`), and listen for the bubbling harness-* events
18
- * from the children plus `harness-new-session` / `harness-open-sessions`
19
- * from the toolbar.
19
+ * from the children.
20
20
  */
21
21
  export declare class DeesHarnessChat extends DeesElement {
22
22
  static demo: () => TemplateResult<1>;
@@ -34,6 +34,19 @@ export declare class DeesHarnessChat extends DeesElement {
34
34
  */
35
35
  accessor todos: IHarnessTodoItem[];
36
36
  accessor showTodosPanel: boolean;
37
+ accessor showSessionSidebar: boolean;
38
+ accessor sessionMetrics: IHarnessSessionMetrics;
39
+ accessor scratchpad: IHarnessScratchpad | undefined;
40
+ accessor scratchpadBusy: boolean;
41
+ accessor scratchpadError: string;
42
+ accessor sessionIntelligenceEnabled: boolean;
43
+ accessor intelligenceExchanges: IHarnessIntelligenceExchange[];
44
+ accessor intelligenceBusy: boolean;
45
+ accessor intelligenceError: string;
46
+ private accessor sessionSidebarOpen;
47
+ private accessor desktopSessionSidebarVisible;
48
+ private accessor narrowSessionLayout;
49
+ private sessionLayoutResizeObserver;
37
50
  accessor heading: string;
38
51
  accessor subheading: string;
39
52
  accessor showToolbar: boolean;
@@ -59,10 +72,16 @@ export declare class DeesHarnessChat extends DeesElement {
59
72
  focusComposer(): Promise<void>;
60
73
  clearComposer(): void;
61
74
  scrollToBottom(force?: boolean): void;
75
+ connectedCallback(): Promise<void>;
76
+ disconnectedCallback(): Promise<void>;
77
+ private syncSessionLayout;
62
78
  get effectiveTodos(): IHarnessTodoItem[];
79
+ get hasSessionSidebar(): boolean;
63
80
  private get listElement();
64
81
  private get composerElement();
82
+ private readonly toggleSessionSidebar;
83
+ private openSessionSidebar;
84
+ private closeSessionSidebar;
65
85
  render(): TemplateResult;
66
86
  private renderToolbar;
67
- private emit;
68
87
  }
@@ -77,8 +77,8 @@ const pendingPermission = {
77
77
  let stopStream;
78
78
  const chatOf = (event) => event.target.closest('.chatDemo')?.querySelector('dees-harness-chat') ?? null;
79
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.
80
+ * Streams a realistic turn through planning, inspection, a failing test,
81
+ * the file edit, verification, and the final assistant summary.
82
82
  */
83
83
  const simulate = (event) => {
84
84
  const chat = chatOf(event);
@@ -86,43 +86,154 @@ const simulate = (event) => {
86
86
  return;
87
87
  stopStream?.();
88
88
  const runId = Date.now();
89
- const cancels = [];
90
- const at = (ms, action) => {
91
- const timeout = setTimeout(action, ms);
92
- cancels.push(() => clearTimeout(timeout));
93
- };
94
- stopStream = () => {
95
- for (const cancel of cancels)
96
- cancel();
97
- chat.status = { type: 'idle' };
89
+ let stopped = false;
90
+ const pendingDelays = new Map();
91
+ const activeMessages = new Set();
92
+ const activeTools = new Set();
93
+ const activeReasoning = new Map();
94
+ const wait = async (milliseconds) => new Promise((resolve) => {
95
+ if (stopped) {
96
+ resolve(false);
97
+ return;
98
+ }
99
+ const timeout = setTimeout(() => {
100
+ pendingDelays.delete(timeout);
101
+ resolve(!stopped);
102
+ }, milliseconds);
103
+ pendingDelays.set(timeout, resolve);
104
+ });
105
+ const waitForMessageList = async () => {
106
+ await chat.updateComplete;
107
+ const list = chat.shadowRoot?.querySelector('dees-harness-message-list');
108
+ if (list)
109
+ await list.updateComplete;
98
110
  };
99
- const pushMessage = (message) => {
111
+ const pushMessage = async (message) => {
100
112
  chat.messages = [...chat.messages, message];
113
+ if (message.streaming)
114
+ activeMessages.add(message.id);
115
+ if (message.toolCall?.status === 'pending' || message.toolCall?.status === 'running') {
116
+ activeTools.add(message.id);
117
+ }
118
+ await waitForMessageList();
119
+ if (!stopped)
120
+ return true;
121
+ if (message.streaming) {
122
+ message.streaming = false;
123
+ message.error ??= 'Simulation stopped.';
124
+ }
125
+ if (message.toolCall?.status === 'pending' || message.toolCall?.status === 'running') {
126
+ message.toolCall.status = 'error';
127
+ message.toolCall.errorText = 'Simulation stopped.';
128
+ message.toolCall.finishedAt = Date.now();
129
+ }
130
+ chat.messages = [...chat.messages];
131
+ return false;
101
132
  };
102
133
  const updateTool = (messageId, tool) => {
103
- chat.applyDelta({ type: 'tool-update', messageId, tool: tool });
134
+ chat.applyDelta({ type: 'tool-update', messageId, tool });
135
+ if (tool.status === 'completed' || tool.status === 'error')
136
+ activeTools.delete(messageId);
104
137
  };
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,
138
+ const startReasoning = (messageId, partId) => {
139
+ chat.applyDelta({ type: 'reasoning-start', messageId, partId, startedAt: Date.now() });
140
+ const parts = activeReasoning.get(messageId) ?? new Set();
141
+ parts.add(partId);
142
+ activeReasoning.set(messageId, parts);
109
143
  };
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, () => {
144
+ const endReasoning = (messageId, partId) => {
145
+ chat.applyDelta({ type: 'reasoning-end', messageId, partId, endedAt: Date.now() });
146
+ const parts = activeReasoning.get(messageId);
147
+ parts?.delete(partId);
148
+ if (!parts?.size)
149
+ activeReasoning.delete(messageId);
150
+ };
151
+ const finishMessage = (messageId, options = {}) => {
152
+ chat.applyDelta({
153
+ type: 'message-end',
154
+ messageId,
155
+ usage: options.usage,
156
+ error: options.error,
157
+ });
158
+ activeMessages.delete(messageId);
159
+ };
160
+ const streamWords = async (messageId, partId, text) => {
161
+ for (const word of text.split(' ')) {
162
+ if (!await wait(38))
163
+ return false;
164
+ chat.applyDelta({ type: 'reasoning', messageId, partId, delta: `${word} ` });
165
+ }
166
+ return true;
167
+ };
168
+ const streamText = async (messageId, text) => {
169
+ for (let offset = 0; offset < text.length; offset += 8) {
170
+ if (!await wait(32))
171
+ return false;
172
+ chat.applyDelta({ type: 'text', messageId, delta: text.slice(offset, offset + 8) });
173
+ }
174
+ return true;
175
+ };
176
+ const stop = () => {
177
+ if (stopped)
178
+ return;
179
+ stopped = true;
180
+ for (const [timeout, resolve] of pendingDelays) {
181
+ clearTimeout(timeout);
182
+ resolve(false);
183
+ }
184
+ pendingDelays.clear();
185
+ for (const [messageId, parts] of [...activeReasoning]) {
186
+ for (const partId of [...parts])
187
+ endReasoning(messageId, partId);
188
+ }
189
+ for (const messageId of [...activeMessages]) {
190
+ finishMessage(messageId, { error: 'Simulation stopped.' });
191
+ }
192
+ for (const messageId of [...activeTools]) {
193
+ const message = chat.messages.find((candidate) => candidate.id === messageId);
194
+ if (!message?.toolCall)
195
+ continue;
196
+ updateTool(messageId, {
197
+ id: message.toolCall.id,
198
+ status: 'error',
199
+ errorText: 'Simulation stopped.',
200
+ finishedAt: Date.now(),
201
+ });
202
+ }
203
+ chat.status = { type: 'idle' };
204
+ if (stopStream === stop)
205
+ stopStream = undefined;
206
+ };
207
+ stopStream = stop;
208
+ const run = async () => {
209
+ chat.status = { type: 'busy', message: 'Planning…' };
210
+ const reasoningId = `sim-${runId}-reasoning`;
211
+ if (!await pushMessage({
212
+ id: reasoningId,
213
+ role: 'assistant',
214
+ text: '',
215
+ createdAt: Date.now(),
216
+ streaming: true,
217
+ model: 'gpt-5.5',
218
+ effort: 'high',
219
+ }))
220
+ return;
221
+ startReasoning(reasoningId, 'analysis');
222
+ if (!await streamWords(reasoningId, 'analysis', 'The locale list participates in the cache key, so a rollout invalidates every route even when the manifest is unchanged.'))
223
+ return;
224
+ endReasoning(reasoningId, 'analysis');
225
+ if (!await wait(160))
226
+ return;
227
+ startReasoning(reasoningId, 'plan');
228
+ if (!await streamWords(reasoningId, 'plan', 'I will inspect the job, pin the key to the route manifest, run the focused regression test, and update the task list.'))
229
+ return;
230
+ endReasoning(reasoningId, 'plan');
231
+ finishMessage(reasoningId);
232
+ if (!await wait(260))
233
+ return;
124
234
  chat.status = { type: 'busy', message: 'Updating task list…' };
125
- pushMessage({
235
+ const todoId = `sim-${runId}-todos`;
236
+ if (!await pushMessage({
126
237
  id: todoId, role: 'tool', text: '', createdAt: Date.now(),
127
238
  toolCall: {
128
239
  id: `${todoId}-call`, name: 'todowrite', status: 'running',
@@ -134,32 +245,65 @@ const simulate = (event) => {
134
245
  ] },
135
246
  startedAt: Date.now(),
136
247
  },
248
+ }))
249
+ return;
250
+ if (!await wait(520))
251
+ return;
252
+ updateTool(todoId, { id: `${todoId}-call`, status: 'completed', finishedAt: Date.now() });
253
+ if (!await wait(240))
254
+ return;
255
+ chat.status = { type: 'busy', message: 'Inspecting the sitemap job…' };
256
+ const readId = `sim-${runId}-read`;
257
+ if (!await pushMessage({
258
+ id: readId, role: 'tool', text: '', createdAt: Date.now(),
259
+ toolCall: {
260
+ id: `${readId}-call`, name: 'read_file', status: 'running',
261
+ input: { path: '/srv/app/src/jobs/sitemap.job.ts', startLine: 1, endLine: 80 },
262
+ startedAt: Date.now(),
263
+ },
264
+ }))
265
+ return;
266
+ if (!await wait(620))
267
+ return;
268
+ updateTool(readId, {
269
+ id: `${readId}-call`,
270
+ status: 'completed',
271
+ output: 'const cacheKey = hash(locales);\nconst ttl = 3600;\nawait cache.set(cacheKey, sitemap, ttl);',
272
+ finishedAt: Date.now(),
137
273
  });
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({
274
+ if (!await wait(240))
275
+ return;
276
+ chat.status = { type: 'busy', message: 'Running the regression test…' };
277
+ const testId = `sim-${runId}-test`;
278
+ if (!await pushMessage({
145
279
  id: testId, role: 'tool', text: '', createdAt: Date.now(),
146
280
  toolCall: {
147
281
  id: `${testId}-call`, name: 'run_command', status: 'running',
148
282
  input: { command: 'pnpm test --filter sitemap', cwd: '/srv/app' },
149
283
  startedAt: Date.now(),
150
284
  },
285
+ }))
286
+ return;
287
+ if (!await wait(520))
288
+ return;
289
+ updateTool(testId, {
290
+ id: `${testId}-call`,
291
+ status: 'running',
292
+ output: { stdout: '13 tests passed\n1 test still running…' },
151
293
  });
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, () => {
294
+ if (!await wait(620))
295
+ return;
296
+ updateTool(testId, {
297
+ id: `${testId}-call`, status: 'error', isError: true,
298
+ output: { exitCode: 1, stdout: '13 tests passed', stderr: 'cache key changed after locale reorder' },
299
+ errorText: 'Regression confirmed before applying the patch.',
300
+ finishedAt: Date.now(),
301
+ });
302
+ if (!await wait(260))
303
+ return;
161
304
  chat.status = { type: 'busy', message: 'Applying the patch…' };
162
- pushMessage({
305
+ const editId = `sim-${runId}-edit`;
306
+ if (!await pushMessage({
163
307
  id: editId, role: 'tool', text: '', createdAt: Date.now(),
164
308
  toolCall: {
165
309
  id: `${editId}-call`, name: 'write_file', status: 'running',
@@ -170,13 +314,35 @@ const simulate = (event) => {
170
314
  },
171
315
  startedAt: Date.now(),
172
316
  },
317
+ }))
318
+ return;
319
+ if (!await wait(720))
320
+ return;
321
+ updateTool(editId, { id: `${editId}-call`, status: 'completed', finishedAt: Date.now() });
322
+ if (!await wait(240))
323
+ return;
324
+ chat.status = { type: 'busy', message: 'Verifying the patch…' };
325
+ const verifyId = `sim-${runId}-verify`;
326
+ if (!await pushMessage({
327
+ id: verifyId, role: 'tool', text: '', createdAt: Date.now(),
328
+ toolCall: {
329
+ id: `${verifyId}-call`, name: 'run_command', status: 'running',
330
+ input: { command: 'pnpm test --filter sitemap', cwd: '/srv/app' },
331
+ startedAt: Date.now(),
332
+ },
333
+ }))
334
+ return;
335
+ if (!await wait(760))
336
+ return;
337
+ updateTool(verifyId, {
338
+ id: `${verifyId}-call`, status: 'completed',
339
+ output: { exitCode: 0, stdout: '14 tests passed\n0 failed' },
340
+ finishedAt: Date.now(),
173
341
  });
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({
342
+ if (!await wait(220))
343
+ return;
344
+ const todoDoneId = `sim-${runId}-todos-2`;
345
+ if (!await pushMessage({
180
346
  id: todoDoneId, role: 'tool', text: '', createdAt: Date.now(),
181
347
  toolCall: {
182
348
  id: `${todoDoneId}-call`, name: 'todowrite', status: 'completed',
@@ -184,30 +350,50 @@ const simulate = (event) => {
184
350
  { content: 'Pin sitemap cache key to route manifest hash', status: 'completed' },
185
351
  { content: 'Run the sitemap test suite', status: 'completed' },
186
352
  { content: 'Apply the cache-key patch', status: 'completed' },
187
- { content: 'Verify staging timings', status: 'in_progress' },
353
+ { content: 'Verify staging timings', status: 'completed' },
188
354
  ] },
189
355
  startedAt: Date.now(), finishedAt: Date.now(),
190
356
  },
191
- });
192
- });
193
- const summaryId = `sim-${runId}-summary`;
194
- at(reasoningDoneAt + 5400, () => {
357
+ }))
358
+ return;
359
+ if (!await wait(260))
360
+ return;
195
361
  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 } });
205
- chat.status = { type: 'idle' };
206
- return;
207
- }
208
- chat.applyDelta({ type: 'text', messageId: summaryId, delta: chunk });
209
- }, 40);
210
- cancels.push(() => clearInterval(interval));
362
+ const summaryId = `sim-${runId}-summary`;
363
+ if (!await pushMessage({
364
+ id: summaryId,
365
+ role: 'assistant',
366
+ text: '',
367
+ createdAt: Date.now(),
368
+ streaming: true,
369
+ model: 'gpt-5.5',
370
+ effort: 'high',
371
+ }))
372
+ return;
373
+ const summary = [
374
+ 'Patched `sitemap.job.ts` so the cache is keyed by the **route manifest hash** instead of locale ordering.',
375
+ '',
376
+ '### Verification',
377
+ '',
378
+ '- Confirmed the regression before the edit',
379
+ '- Applied the one-line cache-key change',
380
+ '- Re-ran the focused suite: **14/14 tests passed**',
381
+ '- Completed the staging timing check',
382
+ '',
383
+ 'Locale-only rollouts now reuse the existing sitemap cache.',
384
+ ].join('\n');
385
+ if (!await streamText(summaryId, summary))
386
+ return;
387
+ finishMessage(summaryId, {
388
+ usage: { inputTokens: 2480, outputTokens: 340, totalTokens: 2820 },
389
+ });
390
+ chat.status = { type: 'idle' };
391
+ if (stopStream === stop)
392
+ stopStream = undefined;
393
+ };
394
+ void run().catch((error) => {
395
+ console.error('Harness chat demo simulation failed.', error);
396
+ stop();
211
397
  });
212
398
  };
213
399
  const askQuestion = (event) => {
@@ -293,8 +479,10 @@ export const demoFunc = () => html `
293
479
  : request);
294
480
  }
295
481
  }}
296
- @harness-new-session=${() => console.log('harness-new-session')}
297
- @harness-open-sessions=${() => console.log('harness-open-sessions')}
482
+ @harness-scratchpad-save=${(event) => console.log('harness-scratchpad-save', event.detail)}
483
+ @harness-session-intelligence-ask=${(event) => {
484
+ console.log('harness-session-intelligence-ask', event.detail);
485
+ }}
298
486
  @harness-abort=${() => {
299
487
  stopStream?.();
300
488
  console.log('harness-abort');
@@ -317,8 +505,32 @@ export const demoFunc = () => html `
317
505
  .modelOptions=${['gpt-5.5', 'gpt-5', 'o4-mini']}
318
506
  .effortOptions=${['xhigh', 'high', 'medium', 'low']}
319
507
  .usage=${{ inputTokens: 18_400, outputTokens: 3_100, totalTokens: 21_500 }}
508
+ .sessionMetrics=${{
509
+ lifetimeUsedTokens: 184_320,
510
+ compactionCount: 2,
511
+ tokensBeforeLatestCompaction: 112_840,
512
+ currentContextTokens: 47_200,
513
+ maxContextTokens: 128_000,
514
+ }}
515
+ .scratchpad=${{
516
+ id: 'deploy-assistant-demo',
517
+ text: '- Cache keys use the route manifest hash.\n- Release after staging verification.',
518
+ revision: 4,
519
+ updatedAt: Date.now() - 45_000,
520
+ updatedBy: 'intelligence',
521
+ }}
522
+ .sessionIntelligenceEnabled=${true}
523
+ .intelligenceExchanges=${[{
524
+ id: 'intelligence-demo',
525
+ question: 'What remains before release?',
526
+ answer: 'Staging verification is the only remaining task.',
527
+ status: 'completed',
528
+ model: 'gpt-5.6-luna',
529
+ createdAt: Date.now() - 30_000,
530
+ completedAt: Date.now() - 28_000,
531
+ }]}
320
532
  .messages=${[...harnessDemoConversation(), ...toolShowcase()]}
321
533
  ></dees-harness-chat>
322
534
  </div>
323
535
  `;
324
- //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLWNoYXQvZGVlcy1oYXJuZXNzLWNoYXQuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsTUFBTSxZQUFZLEdBQUcsR0FBc0IsRUFBRTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsT0FBTztRQUNMO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtnQkFDbEQsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxHQUFHLE9BQU87YUFDMUI7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsWUFBWTtnQkFDbEIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLEtBQUssRUFBRTtvQkFDTCxJQUFJLEVBQUUsa0NBQWtDO29CQUN4QyxVQUFVLEVBQUUsaUNBQWlDO29CQUM3QyxPQUFPLEVBQUUsdUNBQXVDO2lCQUNqRDtnQkFDRCxTQUFTLEVBQUUsR0FBRyxHQUFHLE9BQU87Z0JBQ3hCLFVBQVUsRUFBRSxHQUFHLEdBQUcsT0FBTzthQUMxQjtTQUNGO1FBQ0Q7WUFDRSxFQUFFLEVBQUUsU0FBUztZQUNiLElBQUksRUFBRSxNQUFNO1lBQ1osSUFBSSxFQUFFLEVBQUU7WUFDUixTQUFTLEVBQUUsR0FBRyxHQUFHLE9BQU87WUFDeEIsUUFBUSxFQUFFO2dCQUNSLEVBQUUsRUFBRSxRQUFRO2dCQUNaLElBQUksRUFBRSxvQkFBb0I7Z0JBQzFCLE1BQU0sRUFBRSxXQUFXO2dCQUNuQixHQUFHLEVBQUU7b0JBQ0gsVUFBVSxFQUFFLElBQUk7b0JBQ2hCLFFBQVEsRUFBRSxnQkFBZ0I7b0JBQzFCLFdBQVcsRUFBRSxFQUFFLEtBQUssRUFBRSxrQkFBa0IsRUFBRSxZQUFZLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxJQUFJLEVBQUU7aUJBQ3BGO2dCQUNELEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRSwyQkFBMkIsRUFBRTtnQkFDN0MsYUFBYSxFQUFFO29CQUNiLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsdUNBQXVDLEVBQUU7b0JBQy9EO3dCQUNFLElBQUksRUFBRSxlQUFlO3dCQUNyQixHQUFHLEVBQUUscUNBQXFDO3dCQUMxQyxJQUFJLEVBQUUsOEJBQThCO3dCQUNwQyxLQUFLLEVBQUUsOEJBQThCO3dCQUNyQyxRQUFRLEVBQUUsV0FBVztxQkFDdEI7aUJBQ0Y7Z0JBQ0QsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxHQUFHLE9BQU87YUFDMUI7U0FDRjtLQUNGLENBQUM7QUFDSixDQUFDLENBQUM7QUFFRixNQUFNLGlCQUFpQixHQUE4QjtJQUNuRCxFQUFFLEVBQUUsV0FBVztJQUNmLEtBQUssRUFBRSxZQUFZO0lBQ25CLElBQUksRUFBRSxPQUFPO0lBQ2IsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7SUFDckIsUUFBUSxFQUFFLEVBQUUsSUFBSSxFQUFFLGtDQUFrQyxFQUFFLEtBQUssRUFBRSxHQUFHLEVBQUU7Q0FDbkUsQ0FBQztBQUVGLElBQUksVUFBb0MsQ0FBQztBQUV6QyxNQUFNLE1BQU0sR0FBRyxDQUFDLEtBQWlCLEVBQTBCLEVBQUUsQ0FDMUQsS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLElBQUksQ0FBQztBQUVqRzs7O0dBR0c7QUFDSCxNQUFNLFFBQVEsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUNyQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDZixNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDekIsTUFBTSxPQUFPLEdBQXNCLEVBQUUsQ0FBQztJQUN0QyxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQVUsRUFBRSxNQUFrQixFQUFFLEVBQUU7UUFDNUMsTUFBTSxPQUFPLEdBQUcsVUFBVSxDQUFDLE1BQU0sRUFBRSxFQUFFLENBQUMsQ0FBQztRQUN2QyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsRUFBRSxDQUFDLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0lBQzVDLENBQUMsQ0FBQztJQUNGLFVBQVUsR0FBRyxHQUFHLEVBQUU7UUFDaEIsS0FBSyxNQUFNLE1BQU0sSUFBSSxPQUFPO1lBQUUsTUFBTSxFQUFFLENBQUM7UUFDdkMsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztJQUNqQyxDQUFDLENBQUM7SUFDRixNQUFNLFdBQVcsR0FBRyxDQUFDLE9BQXdCLEVBQUUsRUFBRTtRQUMvQyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLE9BQU8sQ0FBQyxDQUFDO0lBQzlDLENBQUMsQ0FBQztJQUNGLE1BQU0sVUFBVSxHQUFHLENBQUMsU0FBaUIsRUFBRSxJQUEyRCxFQUFFLEVBQUU7UUFDcEcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLElBQUksRUFBRSxJQUFhLEVBQUUsQ0FBQyxDQUFDO0lBQzNFLENBQUMsQ0FBQztJQUVGLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxXQUFXLEVBQUUsQ0FBQztJQUVyRCw2QkFBNkI7SUFDN0IsTUFBTSxnQkFBZ0IsR0FBb0I7UUFDeEMsRUFBRSxFQUFFLE9BQU8sS0FBSyxZQUFZLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUk7S0FDbEcsQ0FBQztJQUNGLFdBQVcsQ0FBQyxnQkFBZ0IsQ0FBQyxDQUFDO0lBQzlCLElBQUksQ0FBQyxVQUFVLENBQUMsRUFBRSxJQUFJLEVBQUUsaUJBQWlCLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDO0lBQ2xILE1BQU0sYUFBYSxHQUFHLDBKQUEwSixDQUFDO0lBQ2pMLGFBQWEsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxDQUFDLENBQUMsSUFBSSxFQUFFLEtBQUssRUFBRSxFQUFFO1FBQy9DLEVBQUUsQ0FBQyxFQUFFLEdBQUcsS0FBSyxHQUFHLEVBQUUsRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFDckksQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLGVBQWUsR0FBRyxFQUFFLEdBQUcsYUFBYSxDQUFDLEtBQUssQ0FBQyxHQUFHLENBQUMsQ0FBQyxNQUFNLEdBQUcsRUFBRSxHQUFHLEdBQUcsQ0FBQztJQUN4RSxFQUFFLENBQUMsZUFBZSxFQUFFLEdBQUcsRUFBRTtRQUN2QixJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxTQUFTLEVBQUUsZ0JBQWdCLENBQUMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDOUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLGdCQUFnQixDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7SUFDM0UsQ0FBQyxDQUFDLENBQUM7SUFFSCxnQkFBZ0I7SUFDaEIsTUFBTSxNQUFNLEdBQUcsT0FBTyxLQUFLLFFBQVEsQ0FBQztJQUNwQyxFQUFFLENBQUMsZUFBZSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUU7UUFDN0IsSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLHFCQUFxQixFQUFFLENBQUM7UUFDL0QsV0FBVyxDQUFDO1lBQ1YsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDekQsUUFBUSxFQUFFO2dCQUNSLEVBQUUsRUFBRSxHQUFHLE1BQU0sT0FBTyxFQUFFLElBQUksRUFBRSxXQUFXLEVBQUUsTUFBTSxFQUFFLFNBQVM7Z0JBQzFELEtBQUssRUFBRSxFQUFFLEtBQUssRUFBRTt3QkFDZCxFQUFFLE9BQU8sRUFBRSw4Q0FBOEMsRUFBRSxNQUFNLEVBQUUsYUFBYSxFQUFFO3dCQUNsRixFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO3dCQUM1RCxFQUFFLE9BQU8sRUFBRSwyQkFBMkIsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO3dCQUMzRCxFQUFFLE9BQU8sRUFBRSx3QkFBd0IsRUFBRSxNQUFNLEVBQUUsU0FBUyxFQUFFO3FCQUN6RCxFQUFFO2dCQUNILFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ3RCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFLEVBQUUsRUFBRSxFQUFFLEdBQUcsTUFBTSxPQUFPLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBRTVILGNBQWM7SUFDZCxNQUFNLE1BQU0sR0FBRyxPQUFPLEtBQUssT0FBTyxDQUFDO0lBQ25DLEVBQUUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUUsQ0FBQztRQUMxRCxXQUFXLENBQUM7WUFDVixFQUFFLEVBQUUsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRTtZQUN6RCxRQUFRLEVBQUU7Z0JBQ1IsRUFBRSxFQUFFLEdBQUcsTUFBTSxPQUFPLEVBQUUsSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLEVBQUUsU0FBUztnQkFDNUQsS0FBSyxFQUFFLEVBQUUsT0FBTyxFQUFFLDRCQUE0QixFQUFFLEdBQUcsRUFBRSxVQUFVLEVBQUU7Z0JBQ2pFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQ3RCO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxFQUFFLENBQUMsZUFBZSxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxVQUFVLENBQUMsTUFBTSxFQUFFO1FBQ2xELEVBQUUsRUFBRSxHQUFHLE1BQU0sT0FBTyxFQUFFLE1BQU0sRUFBRSxXQUFXO1FBQ3pDLE1BQU0sRUFBRSxFQUFFLFFBQVEsRUFBRSxDQUFDLEVBQUUsTUFBTSxFQUFFLDJCQUEyQixFQUFFO1FBQzVELFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO0tBQ3ZCLENBQUMsQ0FBQyxDQUFDO0lBRUosa0NBQWtDO0lBQ2xDLE1BQU0sTUFBTSxHQUFHLE9BQU8sS0FBSyxPQUFPLENBQUM7SUFDbkMsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQzlCLElBQUksQ0FBQyxNQUFNLEdBQUcsRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxDQUFDO1FBQy9ELFdBQVcsQ0FBQztZQUNWLEVBQUUsRUFBRSxNQUFNLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQ3pELFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsR0FBRyxNQUFNLE9BQU8sRUFBRSxJQUFJLEVBQUUsWUFBWSxFQUFFLE1BQU0sRUFBRSxTQUFTO2dCQUMzRCxLQUFLLEVBQUU7b0JBQ0wsSUFBSSxFQUFFLGtDQUFrQztvQkFDeEMsVUFBVSxFQUFFLG9EQUFvRDtvQkFDaEUsT0FBTyxFQUFFLDBEQUEwRDtpQkFDcEU7Z0JBQ0QsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7YUFDdEI7U0FDRixDQUFDLENBQUM7SUFDTCxDQUFDLENBQUMsQ0FBQztJQUNILEVBQUUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLFVBQVUsQ0FBQyxNQUFNLEVBQUUsRUFBRSxFQUFFLEVBQUUsR0FBRyxNQUFNLE9BQU8sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7SUFFNUgsOENBQThDO0lBQzlDLE1BQU0sVUFBVSxHQUFHLE9BQU8sS0FBSyxVQUFVLENBQUM7SUFDMUMsRUFBRSxDQUFDLGVBQWUsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFO1FBQzlCLFdBQVcsQ0FBQztZQUNWLEVBQUUsRUFBRSxVQUFVLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO1lBQzdELFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsR0FBRyxVQUFVLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxXQUFXO2dCQUNoRSxLQUFLLEVBQUUsRUFBRSxLQUFLLEVBQUU7d0JBQ2QsRUFBRSxPQUFPLEVBQUUsOENBQThDLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTt3QkFDaEYsRUFBRSxPQUFPLEVBQUUsNEJBQTRCLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTt3QkFDOUQsRUFBRSxPQUFPLEVBQUUsMkJBQTJCLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRTt3QkFDN0QsRUFBRSxPQUFPLEVBQUUsd0JBQXdCLEVBQUUsTUFBTSxFQUFFLGFBQWEsRUFBRTtxQkFDN0QsRUFBRTtnQkFDSCxTQUFTLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFO2FBQzlDO1NBQ0YsQ0FBQyxDQUFDO0lBQ0wsQ0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLFNBQVMsR0FBRyxPQUFPLEtBQUssVUFBVSxDQUFDO0lBQ3pDLEVBQUUsQ0FBQyxlQUFlLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRTtRQUM5QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxPQUFPLEVBQUUsYUFBYSxFQUFFLENBQUM7UUFDdkQsV0FBVyxDQUFDLEVBQUUsRUFBRSxFQUFFLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLEVBQUUsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRSxTQUFTLEVBQUUsSUFBSSxFQUFFLENBQUMsQ0FBQztRQUNwRyxNQUFNLE9BQU8sR0FBRyw0SUFBNEksQ0FBQztRQUM3SixJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7UUFDZixNQUFNLFFBQVEsR0FBRyxXQUFXLENBQUMsR0FBRyxFQUFFO1lBQ2hDLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztZQUNoRCxNQUFNLElBQUksQ0FBQyxDQUFDO1lBQ1osSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDO2dCQUNYLGFBQWEsQ0FBQyxRQUFRLENBQUMsQ0FBQztnQkFDeEIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxFQUFFLElBQUksRUFBRSxhQUFhLEVBQUUsU0FBUyxFQUFFLFNBQVMsRUFBRSxLQUFLLEVBQUUsRUFBRSxXQUFXLEVBQUUsSUFBSSxFQUFFLFlBQVksRUFBRSxHQUFHLEVBQUUsV0FBVyxFQUFFLElBQUksRUFBRSxFQUFFLENBQUMsQ0FBQztnQkFDbkksSUFBSSxDQUFDLE1BQU0sR0FBRyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUUsQ0FBQztnQkFDL0IsT0FBTztZQUNULENBQUM7WUFDRCxJQUFJLENBQUMsVUFBVSxDQUFDLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxTQUFTLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztRQUNQLE9BQU8sQ0FBQyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUMsYUFBYSxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUM7SUFDOUMsQ0FBQyxDQUFDLENBQUM7QUFDTCxDQUFDLENBQUM7QUFFRixNQUFNLFdBQVcsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN4QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLElBQUksQ0FBQyxTQUFTLEdBQUc7UUFDZixHQUFHLElBQUksQ0FBQyxTQUFTO1FBQ2pCO1lBQ0UsRUFBRSxFQUFFLFlBQVksSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO1lBQzVCLFFBQVEsRUFBRSw2Q0FBNkM7WUFDdkQsU0FBUyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUU7WUFDckIsT0FBTyxFQUFFO2dCQUNQLEVBQUUsS0FBSyxFQUFFLHFCQUFxQixFQUFFLFdBQVcsRUFBRSw2Q0FBNkMsRUFBRTtnQkFDNUYsRUFBRSxLQUFLLEVBQUUsY0FBYyxFQUFFLFdBQVcsRUFBRSwwQkFBMEIsRUFBRTthQUNuRTtTQUNGO0tBQ0YsQ0FBQztBQUNKLENBQUMsQ0FBQztBQUVGLE1BQU0sYUFBYSxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQzFDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU87SUFDbEIsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxFQUFFLEdBQUcsaUJBQWlCLEVBQUUsRUFBRSxFQUFFLFFBQVEsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO0FBQy9GLENBQUMsQ0FBQztBQUVGLE1BQU0sV0FBVyxHQUFHLENBQUMsS0FBaUIsRUFBRSxFQUFFO0lBQ3hDLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztJQUMzQixJQUFJLENBQUMsSUFBSTtRQUFFLE9BQU87SUFDbEIsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDLElBQUksS0FBSyxPQUFPO1FBQ3hDLENBQUMsQ0FBQyxFQUFFLElBQUksRUFBRSxNQUFNLEVBQUU7UUFDbEIsQ0FBQyxDQUFDLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxPQUFPLEVBQUUsb0RBQW9ELEVBQUUsQ0FBQztBQUN2RixDQUFDLENBQUM7QUFFRixNQUFNLFNBQVMsR0FBRyxDQUFDLEtBQWlCLEVBQUUsRUFBRTtJQUN0QyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsS0FBSyxDQUFDLENBQUM7SUFDM0IsSUFBSSxDQUFDLElBQUk7UUFBRSxPQUFPO0lBQ2xCLFVBQVUsRUFBRSxFQUFFLENBQUM7SUFDZixJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUMsQ0FBQztJQUNsRSxJQUFJLENBQUMsV0FBVyxHQUFHLEVBQUUsQ0FBQztJQUN0QixJQUFJLENBQUMsTUFBTSxHQUFHLEVBQUUsSUFBSSxFQUFFLE1BQU0sRUFBRSxDQUFDO0FBQ2pDLENBQUMsQ0FBQztBQUVGLE1BQU0sQ0FBQyxNQUFNLFFBQVEsR0FBRyxHQUFHLEVBQUUsQ0FBQyxJQUFJLENBQUE7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7O29CQXVCZCxDQUFDLEtBQWtCLEVBQUUsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsY0FBYyxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUM7bUNBQ2xELENBQUMsS0FBa0IsRUFBRSxFQUFFO0lBQ3BELE9BQU8sQ0FBQyxHQUFHLENBQUMsNkJBQTZCLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0lBQ3pELE1BQU0sSUFBSSxHQUFJLEtBQUssQ0FBQyxNQUFzQixDQUFDLE9BQU8sQ0FBQyxXQUFXLENBQUMsRUFBRSxhQUFhLENBQUMsbUJBQW1CLENBQUMsQ0FBQztJQUNwRyxJQUFJLElBQUksRUFBRSxDQUFDO1FBQ1QsNERBQTREO1FBQzVELElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxPQUFPLEVBQUUsRUFBRSxDQUNsRCxPQUFPLENBQUMsRUFBRSxLQUFLLEtBQUssQ0FBQyxNQUFNLENBQUMsU0FBUztZQUNuQyxDQUFDLENBQUMsRUFBRSxHQUFHLE9BQU8sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDLE1BQU0sQ0FBQyxRQUFRLEVBQUUsV0FBVyxFQUFFLElBQUksQ0FBQyxHQUFHLEVBQUUsRUFBRTtZQUMxRSxDQUFDLENBQUMsT0FBTyxDQUNaLENBQUM7SUFDSixDQUFDO0FBQ0gsQ0FBQztpQ0FDNEIsQ0FBQyxLQUFrQixFQUFFLEVBQUU7SUFDbEQsT0FBTyxDQUFDLEdBQUcsQ0FBQywyQkFBMkIsRUFBRSxLQUFLLENBQUMsTUFBTSxDQUFDLENBQUM7SUFDdkQsTUFBTSxJQUFJLEdBQUksS0FBSyxDQUFDLE1BQXNCLENBQUMsT0FBTyxDQUFDLFdBQVcsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0lBQ3BHLElBQUksSUFBSSxFQUFFLENBQUM7UUFDVCxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FDOUMsT0FBTyxDQUFDLEVBQUUsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDLFNBQVM7WUFDbkMsQ0FBQyxDQUFDLEVBQUUsR0FBRyxPQUFPLEVBQUUsUUFBUSxFQUFFLEtBQUssQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLFdBQVcsRUFBRSxJQUFJLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFDekUsQ0FBQyxDQUFDLE9BQU8sQ0FDWixDQUFDO0lBQ0osQ0FBQztBQUNILENBQUM7MkJBQ3NCLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMscUJBQXFCLENBQUM7NkJBQ3RDLEdBQUcsRUFBRSxDQUFDLE9BQU8sQ0FBQyxHQUFHLENBQUMsdUJBQXVCLENBQUM7cUJBQ2xELEdBQUcsRUFBRTtJQUNwQixVQUFVLEVBQUUsRUFBRSxDQUFDO0lBQ2YsT0FBTyxDQUFDLEdBQUcsQ0FBQyxlQUFlLENBQUMsQ0FBQztBQUMvQixDQUFDOzs7NENBR3VDLFFBQVE7OEJBQ3RCLGFBQWE7OEJBQ2IsV0FBVzs4QkFDWCxXQUFXOzJDQUNFLFNBQVM7Ozs7Ozs7O3FCQVEvQixDQUFDLFVBQVUsRUFBRSxVQUFVLENBQUM7c0JBQ3ZCLENBQUMsU0FBUyxFQUFFLE9BQU8sRUFBRSxTQUFTLENBQUM7dUJBQzlCLENBQUMsT0FBTyxFQUFFLE1BQU0sRUFBRSxRQUFRLEVBQUUsS0FBSyxDQUFDO2VBQzFDLEVBQUUsV0FBVyxFQUFFLE1BQU0sRUFBRSxZQUFZLEVBQUUsS0FBSyxFQUFFLFdBQVcsRUFBRSxNQUFNLEVBQUU7a0JBQzlELENBQUMsR0FBRyx1QkFBdUIsRUFBRSxFQUFFLEdBQUcsWUFBWSxFQUFFLENBQUM7OztDQUdsRSxDQUFDIn0=
536
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLWNoYXQuZGVtby5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLWNoYXQvZGVlcy1oYXJuZXNzLWNoYXQuZGVtby50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsSUFBSSxFQUFFLE1BQU0sNkJBQTZCLENBQUM7QUFHbkQsT0FBTyxFQUFFLHVCQUF1QixFQUFFLE1BQU0sd0JBQXdCLENBQUM7QUFFakUsTUFBTSxZQUFZLEdBQUcsR0FBc0IsRUFBRTtJQUMzQyxNQUFNLEdBQUcsR0FBRyxJQUFJLENBQUMsR0FBRyxFQUFFLENBQUM7SUFDdkIsT0FBTztRQUNMO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsYUFBYTtnQkFDbkIsTUFBTSxFQUFFLFdBQVc7Z0JBQ25CLEtBQUssRUFBRSxFQUFFLE9BQU8sRUFBRSw0QkFBNEIsRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFO2dCQUNqRSxNQUFNLEVBQUUsRUFBRSxRQUFRLEVBQUUsQ0FBQyxFQUFFLE1BQU0sRUFBRSxpQkFBaUIsRUFBRTtnQkFDbEQsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO2dCQUN4QixVQUFVLEVBQUUsR0FBRyxHQUFHLE9BQU87YUFDMUI7U0FDRjtRQUNEO1lBQ0UsRUFBRSxFQUFFLFNBQVM7WUFDYixJQUFJLEVBQUUsTUFBTTtZQUNaLElBQUksRUFBRSxFQUFFO1lBQ1IsU0FBUyxFQUFFLEdBQUcsR0FBRyxPQUFPO1lBQ3hCLFFBQVEsRUFBRTtnQkFDUixFQUFFLEVBQUUsUUFBUTtnQkFDWixJQUFJLEVBQUUsWUFBWTtnQkFD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