@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
@@ -0,0 +1,870 @@
1
+ var __esDecorate = (this && this.__esDecorate) || function (ctor, descriptorIn, decorators, contextIn, initializers, extraInitializers) {
2
+ function accept(f) { if (f !== void 0 && typeof f !== "function") throw new TypeError("Function expected"); return f; }
3
+ var kind = contextIn.kind, key = kind === "getter" ? "get" : kind === "setter" ? "set" : "value";
4
+ var target = !descriptorIn && ctor ? contextIn["static"] ? ctor : ctor.prototype : null;
5
+ var descriptor = descriptorIn || (target ? Object.getOwnPropertyDescriptor(target, contextIn.name) : {});
6
+ var _, done = false;
7
+ for (var i = decorators.length - 1; i >= 0; i--) {
8
+ var context = {};
9
+ for (var p in contextIn) context[p] = p === "access" ? {} : contextIn[p];
10
+ for (var p in contextIn.access) context.access[p] = contextIn.access[p];
11
+ context.addInitializer = function (f) { if (done) throw new TypeError("Cannot add initializers after decoration has completed"); extraInitializers.push(accept(f || null)); };
12
+ var result = (0, decorators[i])(kind === "accessor" ? { get: descriptor.get, set: descriptor.set } : descriptor[key], context);
13
+ if (kind === "accessor") {
14
+ if (result === void 0) continue;
15
+ if (result === null || typeof result !== "object") throw new TypeError("Object expected");
16
+ if (_ = accept(result.get)) descriptor.get = _;
17
+ if (_ = accept(result.set)) descriptor.set = _;
18
+ if (_ = accept(result.init)) initializers.unshift(_);
19
+ }
20
+ else if (_ = accept(result)) {
21
+ if (kind === "field") initializers.unshift(_);
22
+ else descriptor[key] = _;
23
+ }
24
+ }
25
+ if (target) Object.defineProperty(target, contextIn.name, descriptor);
26
+ done = true;
27
+ };
28
+ var __runInitializers = (this && this.__runInitializers) || function (thisArg, initializers, value) {
29
+ var useValue = arguments.length > 2;
30
+ for (var i = 0; i < initializers.length; i++) {
31
+ value = useValue ? initializers[i].call(thisArg, value) : initializers[i].call(thisArg);
32
+ }
33
+ return useValue ? value : void 0;
34
+ };
35
+ import { demoFunc } from './dees-harness-session-sidebar.demo.js';
36
+ import { DeesElement, html, css, customElement, property, state, cssManager, directives, } from '@design.estate/dees-element';
37
+ import { themeDefaultStyles } from '../../00theme.js';
38
+ import '../dees-harness-todos/dees-harness-todos.js';
39
+ import '../../00group-button/dees-button/dees-button.js';
40
+ import '../../00group-utility/dees-icon/dees-icon.js';
41
+ const { repeat } = directives;
42
+ const formatTokenCount = (valueArg) => valueArg.toLocaleString('en-US');
43
+ /**
44
+ * Generic session context sidebar. It renders host-owned state and emits
45
+ * mutations, but never loads, persists, or executes session data itself.
46
+ */
47
+ let DeesHarnessSessionSidebar = (() => {
48
+ let _classDecorators = [customElement('dees-harness-session-sidebar')];
49
+ let _classDescriptor;
50
+ let _classExtraInitializers = [];
51
+ let _classThis;
52
+ let _classSuper = DeesElement;
53
+ let _todos_decorators;
54
+ let _todos_initializers = [];
55
+ let _todos_extraInitializers = [];
56
+ let _showTasks_decorators;
57
+ let _showTasks_initializers = [];
58
+ let _showTasks_extraInitializers = [];
59
+ let _metrics_decorators;
60
+ let _metrics_initializers = [];
61
+ let _metrics_extraInitializers = [];
62
+ let _scratchpad_decorators;
63
+ let _scratchpad_initializers = [];
64
+ let _scratchpad_extraInitializers = [];
65
+ let _scratchpadBusy_decorators;
66
+ let _scratchpadBusy_initializers = [];
67
+ let _scratchpadBusy_extraInitializers = [];
68
+ let _scratchpadError_decorators;
69
+ let _scratchpadError_initializers = [];
70
+ let _scratchpadError_extraInitializers = [];
71
+ let _intelligenceEnabled_decorators;
72
+ let _intelligenceEnabled_initializers = [];
73
+ let _intelligenceEnabled_extraInitializers = [];
74
+ let _intelligenceExchanges_decorators;
75
+ let _intelligenceExchanges_initializers = [];
76
+ let _intelligenceExchanges_extraInitializers = [];
77
+ let _intelligenceBusy_decorators;
78
+ let _intelligenceBusy_initializers = [];
79
+ let _intelligenceBusy_extraInitializers = [];
80
+ let _intelligenceError_decorators;
81
+ let _intelligenceError_initializers = [];
82
+ let _intelligenceError_extraInitializers = [];
83
+ let _disabled_decorators;
84
+ let _disabled_initializers = [];
85
+ let _disabled_extraInitializers = [];
86
+ let _scratchpadDraft_decorators;
87
+ let _scratchpadDraft_initializers = [];
88
+ let _scratchpadDraft_extraInitializers = [];
89
+ let _scratchpadDraftRevision_decorators;
90
+ let _scratchpadDraftRevision_initializers = [];
91
+ let _scratchpadDraftRevision_extraInitializers = [];
92
+ let _scratchpadDirty_decorators;
93
+ let _scratchpadDirty_initializers = [];
94
+ let _scratchpadDirty_extraInitializers = [];
95
+ let _scratchpadStale_decorators;
96
+ let _scratchpadStale_initializers = [];
97
+ let _scratchpadStale_extraInitializers = [];
98
+ let _intelligenceQuestion_decorators;
99
+ let _intelligenceQuestion_initializers = [];
100
+ let _intelligenceQuestion_extraInitializers = [];
101
+ let _expandedSection_decorators;
102
+ let _expandedSection_initializers = [];
103
+ let _expandedSection_extraInitializers = [];
104
+ var DeesHarnessSessionSidebar = class extends _classSuper {
105
+ static { _classThis = this; }
106
+ static {
107
+ const _metadata = typeof Symbol === "function" && Symbol.metadata ? Object.create(_classSuper[Symbol.metadata] ?? null) : void 0;
108
+ _todos_decorators = [property({ attribute: false })];
109
+ _showTasks_decorators = [property({ type: Boolean })];
110
+ _metrics_decorators = [property({ attribute: false })];
111
+ _scratchpad_decorators = [property({ attribute: false })];
112
+ _scratchpadBusy_decorators = [property({ type: Boolean })];
113
+ _scratchpadError_decorators = [property()];
114
+ _intelligenceEnabled_decorators = [property({ type: Boolean })];
115
+ _intelligenceExchanges_decorators = [property({ attribute: false })];
116
+ _intelligenceBusy_decorators = [property({ type: Boolean })];
117
+ _intelligenceError_decorators = [property()];
118
+ _disabled_decorators = [property({ type: Boolean })];
119
+ _scratchpadDraft_decorators = [state()];
120
+ _scratchpadDraftRevision_decorators = [state()];
121
+ _scratchpadDirty_decorators = [state()];
122
+ _scratchpadStale_decorators = [state()];
123
+ _intelligenceQuestion_decorators = [state()];
124
+ _expandedSection_decorators = [state()];
125
+ __esDecorate(this, null, _todos_decorators, { kind: "accessor", name: "todos", static: false, private: false, access: { has: obj => "todos" in obj, get: obj => obj.todos, set: (obj, value) => { obj.todos = value; } }, metadata: _metadata }, _todos_initializers, _todos_extraInitializers);
126
+ __esDecorate(this, null, _showTasks_decorators, { kind: "accessor", name: "showTasks", static: false, private: false, access: { has: obj => "showTasks" in obj, get: obj => obj.showTasks, set: (obj, value) => { obj.showTasks = value; } }, metadata: _metadata }, _showTasks_initializers, _showTasks_extraInitializers);
127
+ __esDecorate(this, null, _metrics_decorators, { kind: "accessor", name: "metrics", static: false, private: false, access: { has: obj => "metrics" in obj, get: obj => obj.metrics, set: (obj, value) => { obj.metrics = value; } }, metadata: _metadata }, _metrics_initializers, _metrics_extraInitializers);
128
+ __esDecorate(this, null, _scratchpad_decorators, { kind: "accessor", name: "scratchpad", static: false, private: false, access: { has: obj => "scratchpad" in obj, get: obj => obj.scratchpad, set: (obj, value) => { obj.scratchpad = value; } }, metadata: _metadata }, _scratchpad_initializers, _scratchpad_extraInitializers);
129
+ __esDecorate(this, null, _scratchpadBusy_decorators, { kind: "accessor", name: "scratchpadBusy", static: false, private: false, access: { has: obj => "scratchpadBusy" in obj, get: obj => obj.scratchpadBusy, set: (obj, value) => { obj.scratchpadBusy = value; } }, metadata: _metadata }, _scratchpadBusy_initializers, _scratchpadBusy_extraInitializers);
130
+ __esDecorate(this, null, _scratchpadError_decorators, { kind: "accessor", name: "scratchpadError", static: false, private: false, access: { has: obj => "scratchpadError" in obj, get: obj => obj.scratchpadError, set: (obj, value) => { obj.scratchpadError = value; } }, metadata: _metadata }, _scratchpadError_initializers, _scratchpadError_extraInitializers);
131
+ __esDecorate(this, null, _intelligenceEnabled_decorators, { kind: "accessor", name: "intelligenceEnabled", static: false, private: false, access: { has: obj => "intelligenceEnabled" in obj, get: obj => obj.intelligenceEnabled, set: (obj, value) => { obj.intelligenceEnabled = value; } }, metadata: _metadata }, _intelligenceEnabled_initializers, _intelligenceEnabled_extraInitializers);
132
+ __esDecorate(this, null, _intelligenceExchanges_decorators, { kind: "accessor", name: "intelligenceExchanges", static: false, private: false, access: { has: obj => "intelligenceExchanges" in obj, get: obj => obj.intelligenceExchanges, set: (obj, value) => { obj.intelligenceExchanges = value; } }, metadata: _metadata }, _intelligenceExchanges_initializers, _intelligenceExchanges_extraInitializers);
133
+ __esDecorate(this, null, _intelligenceBusy_decorators, { kind: "accessor", name: "intelligenceBusy", static: false, private: false, access: { has: obj => "intelligenceBusy" in obj, get: obj => obj.intelligenceBusy, set: (obj, value) => { obj.intelligenceBusy = value; } }, metadata: _metadata }, _intelligenceBusy_initializers, _intelligenceBusy_extraInitializers);
134
+ __esDecorate(this, null, _intelligenceError_decorators, { kind: "accessor", name: "intelligenceError", static: false, private: false, access: { has: obj => "intelligenceError" in obj, get: obj => obj.intelligenceError, set: (obj, value) => { obj.intelligenceError = value; } }, metadata: _metadata }, _intelligenceError_initializers, _intelligenceError_extraInitializers);
135
+ __esDecorate(this, null, _disabled_decorators, { kind: "accessor", name: "disabled", static: false, private: false, access: { has: obj => "disabled" in obj, get: obj => obj.disabled, set: (obj, value) => { obj.disabled = value; } }, metadata: _metadata }, _disabled_initializers, _disabled_extraInitializers);
136
+ __esDecorate(this, null, _scratchpadDraft_decorators, { kind: "accessor", name: "scratchpadDraft", static: false, private: false, access: { has: obj => "scratchpadDraft" in obj, get: obj => obj.scratchpadDraft, set: (obj, value) => { obj.scratchpadDraft = value; } }, metadata: _metadata }, _scratchpadDraft_initializers, _scratchpadDraft_extraInitializers);
137
+ __esDecorate(this, null, _scratchpadDraftRevision_decorators, { kind: "accessor", name: "scratchpadDraftRevision", static: false, private: false, access: { has: obj => "scratchpadDraftRevision" in obj, get: obj => obj.scratchpadDraftRevision, set: (obj, value) => { obj.scratchpadDraftRevision = value; } }, metadata: _metadata }, _scratchpadDraftRevision_initializers, _scratchpadDraftRevision_extraInitializers);
138
+ __esDecorate(this, null, _scratchpadDirty_decorators, { kind: "accessor", name: "scratchpadDirty", static: false, private: false, access: { has: obj => "scratchpadDirty" in obj, get: obj => obj.scratchpadDirty, set: (obj, value) => { obj.scratchpadDirty = value; } }, metadata: _metadata }, _scratchpadDirty_initializers, _scratchpadDirty_extraInitializers);
139
+ __esDecorate(this, null, _scratchpadStale_decorators, { kind: "accessor", name: "scratchpadStale", static: false, private: false, access: { has: obj => "scratchpadStale" in obj, get: obj => obj.scratchpadStale, set: (obj, value) => { obj.scratchpadStale = value; } }, metadata: _metadata }, _scratchpadStale_initializers, _scratchpadStale_extraInitializers);
140
+ __esDecorate(this, null, _intelligenceQuestion_decorators, { kind: "accessor", name: "intelligenceQuestion", static: false, private: false, access: { has: obj => "intelligenceQuestion" in obj, get: obj => obj.intelligenceQuestion, set: (obj, value) => { obj.intelligenceQuestion = value; } }, metadata: _metadata }, _intelligenceQuestion_initializers, _intelligenceQuestion_extraInitializers);
141
+ __esDecorate(this, null, _expandedSection_decorators, { kind: "accessor", name: "expandedSection", static: false, private: false, access: { has: obj => "expandedSection" in obj, get: obj => obj.expandedSection, set: (obj, value) => { obj.expandedSection = value; } }, metadata: _metadata }, _expandedSection_initializers, _expandedSection_extraInitializers);
142
+ __esDecorate(null, _classDescriptor = { value: _classThis }, _classDecorators, { kind: "class", name: _classThis.name, metadata: _metadata }, null, _classExtraInitializers);
143
+ DeesHarnessSessionSidebar = _classThis = _classDescriptor.value;
144
+ if (_metadata) Object.defineProperty(_classThis, Symbol.metadata, { enumerable: true, configurable: true, writable: true, value: _metadata });
145
+ }
146
+ static demo = demoFunc;
147
+ static demoGroups = ['Agent Chat'];
148
+ #todos_accessor_storage = __runInitializers(this, _todos_initializers, []);
149
+ get todos() { return this.#todos_accessor_storage; }
150
+ set todos(value) { this.#todos_accessor_storage = value; }
151
+ #showTasks_accessor_storage = (__runInitializers(this, _todos_extraInitializers), __runInitializers(this, _showTasks_initializers, true));
152
+ get showTasks() { return this.#showTasks_accessor_storage; }
153
+ set showTasks(value) { this.#showTasks_accessor_storage = value; }
154
+ #metrics_accessor_storage = (__runInitializers(this, _showTasks_extraInitializers), __runInitializers(this, _metrics_initializers, {}));
155
+ get metrics() { return this.#metrics_accessor_storage; }
156
+ set metrics(value) { this.#metrics_accessor_storage = value; }
157
+ #scratchpad_accessor_storage = (__runInitializers(this, _metrics_extraInitializers), __runInitializers(this, _scratchpad_initializers, undefined));
158
+ get scratchpad() { return this.#scratchpad_accessor_storage; }
159
+ set scratchpad(value) { this.#scratchpad_accessor_storage = value; }
160
+ #scratchpadBusy_accessor_storage = (__runInitializers(this, _scratchpad_extraInitializers), __runInitializers(this, _scratchpadBusy_initializers, false));
161
+ get scratchpadBusy() { return this.#scratchpadBusy_accessor_storage; }
162
+ set scratchpadBusy(value) { this.#scratchpadBusy_accessor_storage = value; }
163
+ #scratchpadError_accessor_storage = (__runInitializers(this, _scratchpadBusy_extraInitializers), __runInitializers(this, _scratchpadError_initializers, ''));
164
+ get scratchpadError() { return this.#scratchpadError_accessor_storage; }
165
+ set scratchpadError(value) { this.#scratchpadError_accessor_storage = value; }
166
+ #intelligenceEnabled_accessor_storage = (__runInitializers(this, _scratchpadError_extraInitializers), __runInitializers(this, _intelligenceEnabled_initializers, false));
167
+ get intelligenceEnabled() { return this.#intelligenceEnabled_accessor_storage; }
168
+ set intelligenceEnabled(value) { this.#intelligenceEnabled_accessor_storage = value; }
169
+ #intelligenceExchanges_accessor_storage = (__runInitializers(this, _intelligenceEnabled_extraInitializers), __runInitializers(this, _intelligenceExchanges_initializers, []));
170
+ get intelligenceExchanges() { return this.#intelligenceExchanges_accessor_storage; }
171
+ set intelligenceExchanges(value) { this.#intelligenceExchanges_accessor_storage = value; }
172
+ #intelligenceBusy_accessor_storage = (__runInitializers(this, _intelligenceExchanges_extraInitializers), __runInitializers(this, _intelligenceBusy_initializers, false));
173
+ get intelligenceBusy() { return this.#intelligenceBusy_accessor_storage; }
174
+ set intelligenceBusy(value) { this.#intelligenceBusy_accessor_storage = value; }
175
+ #intelligenceError_accessor_storage = (__runInitializers(this, _intelligenceBusy_extraInitializers), __runInitializers(this, _intelligenceError_initializers, ''));
176
+ get intelligenceError() { return this.#intelligenceError_accessor_storage; }
177
+ set intelligenceError(value) { this.#intelligenceError_accessor_storage = value; }
178
+ #disabled_accessor_storage = (__runInitializers(this, _intelligenceError_extraInitializers), __runInitializers(this, _disabled_initializers, false));
179
+ get disabled() { return this.#disabled_accessor_storage; }
180
+ set disabled(value) { this.#disabled_accessor_storage = value; }
181
+ #scratchpadDraft_accessor_storage = (__runInitializers(this, _disabled_extraInitializers), __runInitializers(this, _scratchpadDraft_initializers, ''));
182
+ get scratchpadDraft() { return this.#scratchpadDraft_accessor_storage; }
183
+ set scratchpadDraft(value) { this.#scratchpadDraft_accessor_storage = value; }
184
+ #scratchpadDraftRevision_accessor_storage = (__runInitializers(this, _scratchpadDraft_extraInitializers), __runInitializers(this, _scratchpadDraftRevision_initializers, 0));
185
+ get scratchpadDraftRevision() { return this.#scratchpadDraftRevision_accessor_storage; }
186
+ set scratchpadDraftRevision(value) { this.#scratchpadDraftRevision_accessor_storage = value; }
187
+ #scratchpadDirty_accessor_storage = (__runInitializers(this, _scratchpadDraftRevision_extraInitializers), __runInitializers(this, _scratchpadDirty_initializers, false));
188
+ get scratchpadDirty() { return this.#scratchpadDirty_accessor_storage; }
189
+ set scratchpadDirty(value) { this.#scratchpadDirty_accessor_storage = value; }
190
+ #scratchpadStale_accessor_storage = (__runInitializers(this, _scratchpadDirty_extraInitializers), __runInitializers(this, _scratchpadStale_initializers, false));
191
+ get scratchpadStale() { return this.#scratchpadStale_accessor_storage; }
192
+ set scratchpadStale(value) { this.#scratchpadStale_accessor_storage = value; }
193
+ #intelligenceQuestion_accessor_storage = (__runInitializers(this, _scratchpadStale_extraInitializers), __runInitializers(this, _intelligenceQuestion_initializers, ''));
194
+ get intelligenceQuestion() { return this.#intelligenceQuestion_accessor_storage; }
195
+ set intelligenceQuestion(value) { this.#intelligenceQuestion_accessor_storage = value; }
196
+ #expandedSection_accessor_storage = (__runInitializers(this, _intelligenceQuestion_extraInitializers), __runInitializers(this, _expandedSection_initializers, undefined));
197
+ get expandedSection() { return this.#expandedSection_accessor_storage; }
198
+ set expandedSection(value) { this.#expandedSection_accessor_storage = value; }
199
+ sectionStateInitialized = (__runInitializers(this, _expandedSection_extraInitializers), false);
200
+ static styles = [
201
+ themeDefaultStyles,
202
+ cssManager.defaultStyles,
203
+ css `
204
+ :host {
205
+ display: flex;
206
+ flex-direction: column;
207
+ min-width: 0;
208
+ min-height: 0;
209
+ height: 100%;
210
+ font-family: var(--dees-font-family);
211
+ color: var(--dees-color-text-primary);
212
+ }
213
+
214
+ .sidebar {
215
+ display: flex;
216
+ flex-direction: column;
217
+ min-height: 0;
218
+ height: 100%;
219
+ overflow: hidden;
220
+ }
221
+
222
+ .section {
223
+ display: flex;
224
+ flex: 0 0 auto;
225
+ flex-direction: column;
226
+ min-height: 0;
227
+ overflow: hidden;
228
+ border-bottom: 1px solid var(--dees-color-border-subtle);
229
+ }
230
+
231
+ .section.expanded {
232
+ flex: 1 1 0;
233
+ }
234
+
235
+ .section:last-child {
236
+ border-bottom: 0;
237
+ }
238
+
239
+ .sectionHeading {
240
+ display: flex;
241
+ flex: 0 0 auto;
242
+ align-items: center;
243
+ gap: var(--dees-spacing-xs);
244
+ width: 100%;
245
+ min-height: 30px;
246
+ margin: 0;
247
+ padding: 6px var(--dees-spacing-md) 6px var(--dees-spacing-xs);
248
+ border: 0;
249
+ background: var(--dees-color-bg-secondary);
250
+ color: var(--dees-color-text-primary);
251
+ font-family: inherit;
252
+ font-size: var(--dees-font-control-size-sm, 12px);
253
+ font-weight: 650;
254
+ text-align: left;
255
+ cursor: pointer;
256
+ }
257
+
258
+ .sectionHeading:hover {
259
+ background: var(--dees-color-badge-default-bg);
260
+ }
261
+
262
+ .sectionHeading:focus-visible {
263
+ position: relative;
264
+ z-index: 1;
265
+ outline: 2px solid var(--dees-color-accent-primary);
266
+ outline-offset: -2px;
267
+ }
268
+
269
+ .sectionHeading dees-icon {
270
+ flex: 0 0 auto;
271
+ color: var(--dees-color-text-secondary);
272
+ }
273
+
274
+ .sectionHeadingText {
275
+ min-width: 0;
276
+ overflow: hidden;
277
+ text-overflow: ellipsis;
278
+ white-space: nowrap;
279
+ }
280
+
281
+ .sectionSummary {
282
+ flex: 0 0 auto;
283
+ margin-left: auto;
284
+ color: var(--dees-color-text-muted);
285
+ font-size: var(--dees-font-caption2-size, 10px);
286
+ font-variant-numeric: tabular-nums;
287
+ font-weight: 500;
288
+ }
289
+
290
+ .sectionContent {
291
+ flex: 1;
292
+ min-height: 0;
293
+ overflow-x: hidden;
294
+ overflow-y: auto;
295
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
296
+ scrollbar-width: thin;
297
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
298
+ }
299
+
300
+ .sectionContent[hidden] {
301
+ display: none;
302
+ }
303
+
304
+ .sectionContent dees-harness-todos {
305
+ min-width: 0;
306
+ }
307
+
308
+ .scratchpadSection .sectionContent:not([hidden]) {
309
+ display: flex;
310
+ flex-direction: column;
311
+ overflow: hidden;
312
+ padding: 0;
313
+ }
314
+
315
+ .scratchpadSection textarea {
316
+ flex: 1;
317
+ min-height: 0;
318
+ resize: none;
319
+ overflow-y: auto;
320
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
321
+ border: 0;
322
+ border-radius: 0;
323
+ background: color-mix(in srgb, var(--dees-color-bg-secondary) 92%, black);
324
+ color: var(--dees-color-text-secondary);
325
+ }
326
+
327
+ .scratchpadSection textarea:focus-visible {
328
+ border-color: transparent;
329
+ background: color-mix(in srgb, var(--dees-color-bg-secondary) 92%, black);
330
+ box-shadow: none;
331
+ }
332
+
333
+ .scratchpadSection .conflict,
334
+ .scratchpadSection .error {
335
+ margin-right: var(--dees-spacing-md);
336
+ margin-left: var(--dees-spacing-md);
337
+ }
338
+
339
+ .scratchpadFooter {
340
+ display: flex;
341
+ flex: 0 0 auto;
342
+ align-items: center;
343
+ justify-content: space-between;
344
+ gap: var(--dees-spacing-sm);
345
+ padding: var(--dees-spacing-xs) var(--dees-spacing-md) var(--dees-spacing-sm);
346
+ border-top: 0;
347
+ background: linear-gradient(
348
+ to bottom,
349
+ color-mix(in srgb, var(--dees-color-bg-secondary) 92%, black),
350
+ var(--dees-color-bg-secondary)
351
+ );
352
+ }
353
+
354
+ .scratchpadFooter .editorMeta {
355
+ margin-top: 0;
356
+ }
357
+
358
+ .intelligenceSection .sectionContent:not([hidden]) {
359
+ display: flex;
360
+ flex-direction: column;
361
+ overflow: hidden;
362
+ padding: 0;
363
+ }
364
+
365
+ .intelligenceHistory {
366
+ flex: 1;
367
+ min-height: 0;
368
+ overflow-x: hidden;
369
+ overflow-y: auto;
370
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md);
371
+ scrollbar-width: thin;
372
+ scrollbar-color: var(--dees-color-scrollbar-thumb) transparent;
373
+ }
374
+
375
+ .intelligenceComposer {
376
+ flex: 0 0 auto;
377
+ padding: var(--dees-spacing-sm) var(--dees-spacing-md) var(--dees-spacing-md);
378
+ background: linear-gradient(
379
+ to bottom,
380
+ var(--dees-color-bg-primary),
381
+ var(--dees-color-bg-secondary)
382
+ );
383
+ box-shadow: var(--dees-shadow-up-sm);
384
+ }
385
+
386
+ .intelligenceComposer textarea {
387
+ min-height: 64px;
388
+ max-height: 160px;
389
+ resize: none;
390
+ padding: var(--dees-spacing-sm) 0;
391
+ border: 0;
392
+ border-radius: 0;
393
+ background: transparent;
394
+ color: var(--dees-color-text-primary);
395
+ font-family: inherit;
396
+ font-size: var(--dees-font-control-size, 13px);
397
+ }
398
+
399
+ .intelligenceComposer textarea:focus-visible {
400
+ border-color: transparent;
401
+ box-shadow: none;
402
+ outline: 2px solid color-mix(in srgb, var(--dees-color-accent-primary) 55%, transparent);
403
+ outline-offset: 2px;
404
+ }
405
+
406
+ .intelligenceControls {
407
+ display: flex;
408
+ align-items: center;
409
+ gap: var(--dees-spacing-sm);
410
+ }
411
+
412
+ .intelligenceControls .hint {
413
+ flex: 1;
414
+ min-width: 0;
415
+ }
416
+
417
+ .metricList {
418
+ display: grid;
419
+ gap: 6px;
420
+ }
421
+
422
+ .metricRow {
423
+ display: flex;
424
+ align-items: baseline;
425
+ justify-content: space-between;
426
+ gap: var(--dees-spacing-md);
427
+ color: var(--dees-color-text-secondary);
428
+ font-size: var(--dees-font-caption1-size, 11px);
429
+ }
430
+
431
+ .metricValue {
432
+ color: var(--dees-color-text-primary);
433
+ font-family: var(--dees-font-family-mono);
434
+ font-variant-numeric: tabular-nums;
435
+ text-align: right;
436
+ }
437
+
438
+ .contextProgress {
439
+ height: 4px;
440
+ margin-top: 2px;
441
+ overflow: hidden;
442
+ border-radius: var(--dees-radius-full);
443
+ background: var(--dees-color-fill-secondary);
444
+ }
445
+
446
+ .contextProgressFill {
447
+ height: 100%;
448
+ border-radius: inherit;
449
+ background: var(--dees-color-accent-primary);
450
+ transition: width var(--dees-transition-default) var(--dees-ease-standard);
451
+ }
452
+
453
+ textarea {
454
+ box-sizing: border-box;
455
+ width: 100%;
456
+ min-height: 108px;
457
+ resize: vertical;
458
+ padding: var(--dees-spacing-sm);
459
+ border: 1px solid var(--dees-color-border-default);
460
+ border-radius: var(--dees-radius-md);
461
+ background: var(--dees-color-bg-primary);
462
+ color: var(--dees-color-text-primary);
463
+ font: var(--dees-font-caption1-size, 11px) / 1.5 var(--dees-font-family-mono);
464
+ outline: none;
465
+ }
466
+
467
+ textarea:focus-visible {
468
+ border-color: var(--dees-color-accent-primary);
469
+ box-shadow: 0 0 0 1px var(--dees-color-accent-primary);
470
+ }
471
+
472
+ textarea:disabled {
473
+ opacity: 0.62;
474
+ cursor: not-allowed;
475
+ }
476
+
477
+ .editorMeta,
478
+ .exchangeMeta,
479
+ .hint {
480
+ color: var(--dees-color-text-muted);
481
+ font-size: var(--dees-font-caption2-size, 10px);
482
+ line-height: 1.4;
483
+ }
484
+
485
+ .editorMeta {
486
+ margin-top: 5px;
487
+ }
488
+
489
+ .actions {
490
+ display: flex;
491
+ align-items: center;
492
+ justify-content: flex-end;
493
+ gap: var(--dees-spacing-xs);
494
+ margin-top: var(--dees-spacing-sm);
495
+ }
496
+
497
+ .conflict,
498
+ .error {
499
+ margin-top: var(--dees-spacing-sm);
500
+ padding: var(--dees-spacing-xs) var(--dees-spacing-sm);
501
+ border-radius: var(--dees-radius-md);
502
+ font-size: var(--dees-font-caption1-size, 11px);
503
+ line-height: 1.4;
504
+ }
505
+
506
+ .conflict {
507
+ color: var(--dees-color-text-warning);
508
+ background: var(--dees-color-badge-warning-bg);
509
+ }
510
+
511
+ .error {
512
+ color: var(--dees-color-text-error);
513
+ background: var(--dees-color-badge-error-bg);
514
+ }
515
+
516
+ .exchangeList {
517
+ display: grid;
518
+ gap: var(--dees-spacing-sm);
519
+ margin-bottom: var(--dees-spacing-sm);
520
+ }
521
+
522
+ .exchange {
523
+ display: grid;
524
+ gap: 4px;
525
+ padding-left: var(--dees-spacing-sm);
526
+ border-left: 1px solid var(--dees-color-border-default);
527
+ }
528
+
529
+ .question,
530
+ .answer {
531
+ overflow-wrap: anywhere;
532
+ font-size: var(--dees-font-caption1-size, 11px);
533
+ line-height: 1.45;
534
+ white-space: pre-wrap;
535
+ }
536
+
537
+ .question {
538
+ color: var(--dees-color-text-secondary);
539
+ }
540
+
541
+ .answer {
542
+ color: var(--dees-color-text-primary);
543
+ }
544
+
545
+ .exchange.running .answer {
546
+ color: var(--dees-color-text-muted);
547
+ }
548
+
549
+ .exchange.error .answer {
550
+ color: var(--dees-color-text-error);
551
+ }
552
+
553
+ .empty {
554
+ color: var(--dees-color-text-muted);
555
+ font-size: var(--dees-font-caption1-size, 11px);
556
+ }
557
+
558
+ @media (prefers-reduced-motion: reduce) {
559
+ .contextProgressFill {
560
+ transition: none;
561
+ }
562
+ }
563
+ `,
564
+ ];
565
+ willUpdate(changedPropertiesArg) {
566
+ const availableSections = this.availableSections;
567
+ if (!this.sectionStateInitialized && availableSections.length > 0) {
568
+ this.expandedSection = this.defaultExpandedSection;
569
+ this.sectionStateInitialized = true;
570
+ }
571
+ else if (this.expandedSection !== undefined
572
+ && !availableSections.includes(this.expandedSection)) {
573
+ this.expandedSection = this.defaultExpandedSection;
574
+ }
575
+ if (!changedPropertiesArg.has('scratchpad'))
576
+ return;
577
+ const next = this.scratchpad;
578
+ if (!next) {
579
+ this.scratchpadDraft = '';
580
+ this.scratchpadDraftRevision = 0;
581
+ this.scratchpadDirty = false;
582
+ this.scratchpadStale = false;
583
+ return;
584
+ }
585
+ const previous = changedPropertiesArg.get('scratchpad');
586
+ if (!previous || previous.id !== next.id) {
587
+ this.acceptScratchpad(next);
588
+ return;
589
+ }
590
+ if (!this.scratchpadDirty || next.text === this.scratchpadDraft) {
591
+ this.acceptScratchpad(next);
592
+ return;
593
+ }
594
+ if (next.revision > this.scratchpadDraftRevision)
595
+ this.scratchpadStale = true;
596
+ }
597
+ get contextPercentage() {
598
+ const current = this.metrics.currentContextTokens;
599
+ const maximum = this.metrics.maxContextTokens;
600
+ if (current === undefined || maximum === undefined || maximum <= 0)
601
+ return undefined;
602
+ return Math.min(100, Math.max(0, (current / maximum) * 100));
603
+ }
604
+ render() {
605
+ return html `
606
+ <div class="sidebar">
607
+ ${this.showTasks ? this.renderTasks() : ''}
608
+ ${this.hasMetrics ? this.renderMetrics() : ''}
609
+ ${this.scratchpad ? this.renderScratchpad() : ''}
610
+ ${this.intelligenceEnabled ? this.renderIntelligence() : ''}
611
+ </div>
612
+ `;
613
+ }
614
+ get hasMetrics() {
615
+ return Object.values(this.metrics).some((value) => value !== undefined);
616
+ }
617
+ get availableSections() {
618
+ return [
619
+ ...(this.showTasks ? ['tasks'] : []),
620
+ ...(this.hasMetrics ? ['metrics'] : []),
621
+ ...(this.scratchpad ? ['scratchpad'] : []),
622
+ ...(this.intelligenceEnabled ? ['intelligence'] : []),
623
+ ];
624
+ }
625
+ get defaultExpandedSection() {
626
+ if (this.showTasks && this.todos.length > 0)
627
+ return 'tasks';
628
+ if (this.hasMetrics)
629
+ return 'metrics';
630
+ if (this.scratchpad)
631
+ return 'scratchpad';
632
+ if (this.intelligenceEnabled)
633
+ return 'intelligence';
634
+ return this.showTasks ? 'tasks' : undefined;
635
+ }
636
+ renderSection(idArg, labelArg, iconArg, contentArg, summaryArg = '') {
637
+ const expanded = this.expandedSection === idArg;
638
+ const contentId = `harness-session-section-${idArg}`;
639
+ return html `
640
+ <section class=${`section ${idArg}Section ${expanded ? 'expanded' : ''}`}>
641
+ <button
642
+ class="sectionHeading"
643
+ type="button"
644
+ aria-expanded=${String(expanded)}
645
+ aria-controls=${contentId}
646
+ @click=${() => {
647
+ this.sectionStateInitialized = true;
648
+ this.expandedSection = expanded ? undefined : idArg;
649
+ }}
650
+ >
651
+ <dees-icon
652
+ icon=${expanded ? 'lucide:ChevronDown' : 'lucide:ChevronRight'}
653
+ iconSize="13"
654
+ ></dees-icon>
655
+ <dees-icon icon=${iconArg} iconSize="13"></dees-icon>
656
+ <span class="sectionHeadingText">${labelArg}</span>
657
+ ${summaryArg ? html `<span class="sectionSummary">${summaryArg}</span>` : ''}
658
+ </button>
659
+ <div id=${contentId} class="sectionContent" ?hidden=${!expanded}>
660
+ ${contentArg}
661
+ </div>
662
+ </section>
663
+ `;
664
+ }
665
+ renderTasks() {
666
+ const completed = this.todos.filter((todo) => todo.status === 'completed').length;
667
+ return this.renderSection('tasks', 'Tasks', 'lucide:ListChecks', html `<dees-harness-todos .todos=${this.todos} .showProgress=${false}></dees-harness-todos>`, this.todos.length > 0 ? `${completed}/${this.todos.length}` : '');
668
+ }
669
+ renderMetrics() {
670
+ const metrics = this.metrics;
671
+ const percentage = this.contextPercentage;
672
+ const rows = [
673
+ ['Lifetime used', metrics.lifetimeUsedTokens],
674
+ ['Compactions', metrics.compactionCount],
675
+ ['Before latest compaction', metrics.tokensBeforeLatestCompaction],
676
+ ['Context window', metrics.maxContextTokens],
677
+ ['Current context', metrics.currentContextTokens],
678
+ ];
679
+ return this.renderSection('metrics', 'Tokens', 'lucide:Gauge', html `
680
+ <div class="metricList">
681
+ ${rows.map(([label, value]) => value === undefined ? '' : html `
682
+ <div class="metricRow">
683
+ <span>${label}</span>
684
+ <span class="metricValue">
685
+ ${formatTokenCount(value)}${label === 'Current context' && percentage !== undefined
686
+ ? ` · ${Math.round(percentage)}%`
687
+ : ''}
688
+ </span>
689
+ </div>
690
+ `)}
691
+ ${percentage === undefined ? '' : html `
692
+ <div
693
+ class="contextProgress"
694
+ role="progressbar"
695
+ aria-label="Current context window usage"
696
+ aria-valuemin="0"
697
+ aria-valuemax="100"
698
+ aria-valuenow=${String(Math.round(percentage))}
699
+ >
700
+ <div class="contextProgressFill" style=${`width: ${percentage}%`}></div>
701
+ </div>
702
+ `}
703
+ </div>
704
+ `);
705
+ }
706
+ renderScratchpad() {
707
+ const scratchpad = this.scratchpad;
708
+ return this.renderSection('scratchpad', 'Session Scratchpad', 'lucide:NotebookPen', html `
709
+ <textarea
710
+ aria-label="Session scratchpad"
711
+ maxlength="32768"
712
+ .value=${this.scratchpadDraft}
713
+ ?disabled=${this.disabled || this.scratchpadBusy}
714
+ @input=${(event) => {
715
+ this.scratchpadDraft = event.currentTarget.value;
716
+ this.scratchpadDirty = this.scratchpadDraft !== scratchpad.text;
717
+ }}
718
+ @keydown=${(event) => {
719
+ if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
720
+ event.preventDefault();
721
+ this.saveScratchpad();
722
+ }
723
+ }}
724
+ ></textarea>
725
+ ${this.scratchpadStale ? html `
726
+ <div class="conflict" role="status">
727
+ A newer revision arrived. Keep this draft on the latest revision or discard it.
728
+ <div class="actions">
729
+ <dees-button
730
+ size="sm"
731
+ type="ghost"
732
+ text="Discard draft"
733
+ @clicked=${this.discardScratchpadDraft}
734
+ ></dees-button>
735
+ <dees-button
736
+ size="sm"
737
+ type="outline"
738
+ text="Keep draft on latest"
739
+ @clicked=${this.rebaseScratchpadDraft}
740
+ ></dees-button>
741
+ </div>
742
+ </div>
743
+ ` : ''}
744
+ ${this.scratchpadError ? html `<div class="error" role="alert">${this.scratchpadError}</div>` : ''}
745
+ <div class="scratchpadFooter">
746
+ <span class="editorMeta">rev. ${scratchpad.revision}</span>
747
+ <dees-button
748
+ size="sm"
749
+ type="accent"
750
+ text="Save"
751
+ .status=${this.scratchpadBusy ? 'pending' : 'normal'}
752
+ ?disabled=${this.disabled || this.scratchpadBusy || !this.scratchpadDirty || this.scratchpadStale}
753
+ @clicked=${this.saveScratchpad}
754
+ ></dees-button>
755
+ </div>
756
+ `);
757
+ }
758
+ renderIntelligence() {
759
+ return this.renderSection('intelligence', 'Session Intelligence', 'lucide:Sparkles', html `
760
+ <div class="intelligenceHistory" role="log" aria-live="polite">
761
+ ${this.intelligenceExchanges.length ? html `
762
+ <div class="exchangeList">
763
+ ${repeat(this.intelligenceExchanges, (exchange) => exchange.id, (exchange) => this.renderExchange(exchange))}
764
+ </div>
765
+ ` : html `<div class="empty">Ask about this session without interrupting its main work.</div>`}
766
+ </div>
767
+ <div class="intelligenceComposer">
768
+ <textarea
769
+ class="intelligenceInput"
770
+ aria-label="Ask Session Intelligence"
771
+ placeholder="Ask a parallel question…"
772
+ maxlength="8192"
773
+ rows="2"
774
+ .value=${this.intelligenceQuestion}
775
+ ?disabled=${this.disabled || this.intelligenceBusy}
776
+ @input=${(event) => {
777
+ this.intelligenceQuestion = event.currentTarget.value;
778
+ }}
779
+ @keydown=${(event) => {
780
+ if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) {
781
+ event.preventDefault();
782
+ this.askIntelligence();
783
+ }
784
+ }}
785
+ ></textarea>
786
+ <div class="intelligenceControls">
787
+ <span class="hint">Parallel session · Ctrl/⌘ + Enter</span>
788
+ <dees-button
789
+ size="sm"
790
+ type="accent"
791
+ text="Ask"
792
+ .status=${this.intelligenceBusy ? 'pending' : 'normal'}
793
+ ?disabled=${this.disabled || this.intelligenceBusy || !this.intelligenceQuestion.trim()}
794
+ @clicked=${this.askIntelligence}
795
+ ></dees-button>
796
+ </div>
797
+ ${this.intelligenceError ? html `<div class="error" role="alert">${this.intelligenceError}</div>` : ''}
798
+ </div>
799
+ `);
800
+ }
801
+ renderExchange(exchangeArg) {
802
+ const answer = exchangeArg.status === 'running'
803
+ ? 'Thinking in parallel…'
804
+ : exchangeArg.status === 'error'
805
+ ? exchangeArg.error || 'Session Intelligence failed.'
806
+ : exchangeArg.answer || '';
807
+ return html `
808
+ <article class="exchange ${exchangeArg.status}">
809
+ <div class="question">${exchangeArg.question}</div>
810
+ <div class="answer">${answer}</div>
811
+ ${exchangeArg.model
812
+ ? html `<div class="exchangeMeta">${exchangeArg.model}</div>`
813
+ : ''}
814
+ </article>
815
+ `;
816
+ }
817
+ acceptScratchpad(scratchpadArg) {
818
+ this.scratchpadDraft = scratchpadArg.text;
819
+ this.scratchpadDraftRevision = scratchpadArg.revision;
820
+ this.scratchpadDirty = false;
821
+ this.scratchpadStale = false;
822
+ }
823
+ discardScratchpadDraft = () => {
824
+ if (this.scratchpad)
825
+ this.acceptScratchpad(this.scratchpad);
826
+ };
827
+ rebaseScratchpadDraft = () => {
828
+ if (!this.scratchpad)
829
+ return;
830
+ this.scratchpadDraftRevision = this.scratchpad.revision;
831
+ this.scratchpadStale = false;
832
+ this.scratchpadDirty = this.scratchpadDraft !== this.scratchpad.text;
833
+ };
834
+ saveScratchpad = () => {
835
+ if (!this.scratchpad
836
+ || !this.scratchpadDirty
837
+ || this.scratchpadStale
838
+ || this.disabled
839
+ || this.scratchpadBusy)
840
+ return;
841
+ const detail = {
842
+ text: this.scratchpadDraft,
843
+ expectedRevision: this.scratchpadDraftRevision,
844
+ };
845
+ this.dispatchEvent(new CustomEvent('harness-scratchpad-save', {
846
+ detail,
847
+ bubbles: true,
848
+ composed: true,
849
+ }));
850
+ };
851
+ askIntelligence = () => {
852
+ const question = this.intelligenceQuestion.trim();
853
+ if (!question || this.disabled || this.intelligenceBusy)
854
+ return;
855
+ const detail = { question };
856
+ this.dispatchEvent(new CustomEvent('harness-session-intelligence-ask', {
857
+ detail,
858
+ bubbles: true,
859
+ composed: true,
860
+ }));
861
+ this.intelligenceQuestion = '';
862
+ };
863
+ static {
864
+ __runInitializers(_classThis, _classExtraInitializers);
865
+ }
866
+ };
867
+ return DeesHarnessSessionSidebar = _classThis;
868
+ })();
869
+ export { DeesHarnessSessionSidebar };
870
+ //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGVlcy1oYXJuZXNzLXNlc3Npb24tc2lkZWJhci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uL3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWhhcm5lc3MvZGVlcy1oYXJuZXNzLXNlc3Npb24tc2lkZWJhci9kZWVzLWhhcm5lc3Mtc2Vzc2lvbi1zaWRlYmFyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7QUFBQSxPQUFPLEVBQUUsUUFBUSxFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDbEUsT0FBTyxFQUNMLFdBQVcsRUFDWCxJQUFJLEVBQ0osR0FBRyxFQUNILGFBQWEsRUFFYixRQUFRLEVBQ1IsS0FBSyxFQUNMLFVBQVUsRUFDVixVQUFVLEdBQ1gsTUFBTSw2QkFBNkIsQ0FBQztBQUNyQyxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxrQkFBa0IsQ0FBQztBQVN0RCxPQUFPLDZDQUE2QyxDQUFDO0FBQ3JELE9BQU8saURBQWlELENBQUM7QUFDekQsT0FBTyw4Q0FBOEMsQ0FBQztBQUV0RCxNQUFNLEVBQUUsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDO0FBRTlCLE1BQU0sZ0JBQWdCLEdBQUcsQ0FBQyxRQUFnQixFQUFVLEVBQUUsQ0FBQyxRQUFRLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBU3hGOzs7R0FHRztJQUVVLHlCQUF5Qjs0QkFEckMsYUFBYSxDQUFDLDhCQUE4QixDQUFDOzs7O3NCQUNDLFdBQVc7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7eUNBQW5CLFNBQVEsV0FBVzs7OztpQ0FJdkQsUUFBUSxDQUFDLEVBQUUsU0FBUyxFQUFFLEtBQUssRUFBRSxDQUFDO3FDQUc5QixRQUFRLENBQUMsRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLENBQUM7bUNBRzNCLFFBQVEsQ0FBQyxFQUFFLFNBQVMs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