@hexidecibel/companion 0.0.1 → 0.1.1

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 (110) hide show
  1. package/dist/__tests__/task-parser.test.js +29 -29
  2. package/dist/__tests__/task-parser.test.js.map +1 -1
  3. package/dist/anthropic-usage.d.ts.map +1 -1
  4. package/dist/anthropic-usage.js +1 -1
  5. package/dist/anthropic-usage.js.map +1 -1
  6. package/dist/cert-generator.d.ts.map +1 -1
  7. package/dist/cert-generator.js +4 -21
  8. package/dist/cert-generator.js.map +1 -1
  9. package/dist/cli.d.ts +9 -0
  10. package/dist/cli.d.ts.map +1 -0
  11. package/dist/cli.js +413 -0
  12. package/dist/cli.js.map +1 -0
  13. package/dist/config.d.ts.map +1 -1
  14. package/dist/config.js +1 -7
  15. package/dist/config.js.map +1 -1
  16. package/dist/escalation.d.ts +51 -0
  17. package/dist/escalation.d.ts.map +1 -0
  18. package/dist/escalation.js +198 -0
  19. package/dist/escalation.js.map +1 -0
  20. package/dist/index.js +67 -30
  21. package/dist/index.js.map +1 -1
  22. package/dist/input-injector.d.ts.map +1 -1
  23. package/dist/input-injector.js +9 -5
  24. package/dist/input-injector.js.map +1 -1
  25. package/dist/notification-store.d.ts +35 -0
  26. package/dist/notification-store.d.ts.map +1 -0
  27. package/dist/notification-store.js +272 -0
  28. package/dist/notification-store.js.map +1 -0
  29. package/dist/parser.d.ts +15 -1
  30. package/dist/parser.d.ts.map +1 -1
  31. package/dist/parser.js +106 -61
  32. package/dist/parser.js.map +1 -1
  33. package/dist/push.d.ts +18 -26
  34. package/dist/push.d.ts.map +1 -1
  35. package/dist/push.js +90 -184
  36. package/dist/push.js.map +1 -1
  37. package/dist/qr-server.d.ts.map +1 -1
  38. package/dist/qr-server.js +159 -139
  39. package/dist/qr-server.js.map +1 -1
  40. package/dist/rules-engine.d.ts +20 -0
  41. package/dist/rules-engine.d.ts.map +1 -0
  42. package/dist/rules-engine.js +71 -0
  43. package/dist/rules-engine.js.map +1 -0
  44. package/dist/scaffold/claude-commands.d.ts +18 -0
  45. package/dist/scaffold/claude-commands.d.ts.map +1 -0
  46. package/dist/scaffold/claude-commands.js +352 -0
  47. package/dist/scaffold/claude-commands.js.map +1 -0
  48. package/dist/scaffold/generator.d.ts.map +1 -1
  49. package/dist/scaffold/generator.js +26 -1
  50. package/dist/scaffold/generator.js.map +1 -1
  51. package/dist/scaffold/scorer.d.ts +19 -0
  52. package/dist/scaffold/scorer.d.ts.map +1 -0
  53. package/dist/scaffold/scorer.js +92 -0
  54. package/dist/scaffold/scorer.js.map +1 -0
  55. package/dist/scaffold/templates/go-cli.d.ts +3 -0
  56. package/dist/scaffold/templates/go-cli.d.ts.map +1 -0
  57. package/dist/scaffold/templates/go-cli.js +249 -0
  58. package/dist/scaffold/templates/go-cli.js.map +1 -0
  59. package/dist/scaffold/templates/index.d.ts.map +1 -1
  60. package/dist/scaffold/templates/index.js +8 -2
  61. package/dist/scaffold/templates/index.js.map +1 -1
  62. package/dist/scaffold/templates/nextjs.d.ts +3 -0
  63. package/dist/scaffold/templates/nextjs.d.ts.map +1 -0
  64. package/dist/scaffold/templates/nextjs.js +336 -0
  65. package/dist/scaffold/templates/nextjs.js.map +1 -0
  66. package/dist/scaffold/templates/node-express.d.ts.map +1 -1
  67. package/dist/scaffold/templates/node-express.js +170 -157
  68. package/dist/scaffold/templates/node-express.js.map +1 -1
  69. package/dist/scaffold/templates/python-fastapi.d.ts.map +1 -1
  70. package/dist/scaffold/templates/python-fastapi.js +234 -221
  71. package/dist/scaffold/templates/python-fastapi.js.map +1 -1
  72. package/dist/scaffold/templates/react-mui-website.d.ts.map +1 -1
  73. package/dist/scaffold/templates/react-mui-website.js +337 -324
  74. package/dist/scaffold/templates/react-mui-website.js.map +1 -1
  75. package/dist/scaffold/templates/react-typescript.d.ts.map +1 -1
  76. package/dist/scaffold/templates/react-typescript.js +219 -206
  77. package/dist/scaffold/templates/react-typescript.js.map +1 -1
  78. package/dist/scaffold/templates/typescript-library.d.ts +3 -0
  79. package/dist/scaffold/templates/typescript-library.d.ts.map +1 -0
  80. package/dist/scaffold/templates/typescript-library.js +241 -0
  81. package/dist/scaffold/templates/typescript-library.js.map +1 -0
  82. package/dist/scaffold/types.d.ts +7 -0
  83. package/dist/scaffold/types.d.ts.map +1 -1
  84. package/dist/subagent-watcher.d.ts.map +1 -1
  85. package/dist/subagent-watcher.js +3 -3
  86. package/dist/subagent-watcher.js.map +1 -1
  87. package/dist/tmux-manager.d.ts +37 -0
  88. package/dist/tmux-manager.d.ts.map +1 -1
  89. package/dist/tmux-manager.js +165 -5
  90. package/dist/tmux-manager.js.map +1 -1
  91. package/dist/tool-config.d.ts.map +1 -1
  92. package/dist/tool-config.js +2 -2
  93. package/dist/tool-config.js.map +1 -1
  94. package/dist/types.d.ts +85 -0
  95. package/dist/types.d.ts.map +1 -1
  96. package/dist/types.js +18 -0
  97. package/dist/types.js.map +1 -1
  98. package/dist/watcher.d.ts +7 -0
  99. package/dist/watcher.d.ts.map +1 -1
  100. package/dist/watcher.js +118 -9
  101. package/dist/watcher.js.map +1 -1
  102. package/dist/websocket.d.ts +16 -2
  103. package/dist/websocket.d.ts.map +1 -1
  104. package/dist/websocket.js +758 -117
  105. package/dist/websocket.js.map +1 -1
  106. package/dist/work-group-manager.d.ts +69 -0
  107. package/dist/work-group-manager.d.ts.map +1 -0
  108. package/dist/work-group-manager.js +610 -0
  109. package/dist/work-group-manager.js.map +1 -0
  110. package/package.json +1 -1
@@ -0,0 +1,272 @@
1
+ "use strict";
2
+ var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
3
+ if (k2 === undefined) k2 = k;
4
+ var desc = Object.getOwnPropertyDescriptor(m, k);
5
+ if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
6
+ desc = { enumerable: true, get: function() { return m[k]; } };
7
+ }
8
+ Object.defineProperty(o, k2, desc);
9
+ }) : (function(o, m, k, k2) {
10
+ if (k2 === undefined) k2 = k;
11
+ o[k2] = m[k];
12
+ }));
13
+ var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
14
+ Object.defineProperty(o, "default", { enumerable: true, value: v });
15
+ }) : function(o, v) {
16
+ o["default"] = v;
17
+ });
18
+ var __importStar = (this && this.__importStar) || (function () {
19
+ var ownKeys = function(o) {
20
+ ownKeys = Object.getOwnPropertyNames || function (o) {
21
+ var ar = [];
22
+ for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
23
+ return ar;
24
+ };
25
+ return ownKeys(o);
26
+ };
27
+ return function (mod) {
28
+ if (mod && mod.__esModule) return mod;
29
+ var result = {};
30
+ if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
31
+ __setModuleDefault(result, mod);
32
+ return result;
33
+ };
34
+ })();
35
+ Object.defineProperty(exports, "__esModule", { value: true });
36
+ exports.NotificationStore = void 0;
37
+ const fs = __importStar(require("fs"));
38
+ const path = __importStar(require("path"));
39
+ const os = __importStar(require("os"));
40
+ const uuid_1 = require("uuid");
41
+ const types_1 = require("./types");
42
+ const COMPANION_DIR = path.join(os.homedir(), '.companion');
43
+ const STATE_FILE = path.join(COMPANION_DIR, 'notification-state.json');
44
+ const HISTORY_FILE = path.join(COMPANION_DIR, 'notification-history.json');
45
+ const MAX_HISTORY = 500;
46
+ const SAVE_DEBOUNCE_MS = 2000;
47
+ class NotificationStore {
48
+ escalation = { ...types_1.DEFAULT_ESCALATION_CONFIG };
49
+ devices = new Map();
50
+ mutedSessions = new Set();
51
+ history = [];
52
+ saveTimer = null;
53
+ historySaveTimer = null;
54
+ constructor() {
55
+ this.ensureDir();
56
+ this.load();
57
+ }
58
+ ensureDir() {
59
+ if (!fs.existsSync(COMPANION_DIR)) {
60
+ fs.mkdirSync(COMPANION_DIR, { recursive: true });
61
+ }
62
+ }
63
+ load() {
64
+ // Load state
65
+ try {
66
+ if (fs.existsSync(STATE_FILE)) {
67
+ const content = fs.readFileSync(STATE_FILE, 'utf-8');
68
+ const raw = JSON.parse(content);
69
+ // Migration: detect old format (has `rules` array)
70
+ if (raw.rules && Array.isArray(raw.rules)) {
71
+ console.log('NotificationStore: Migrating from old rules-based format');
72
+ // Preserve devices and mutedSessions, create default escalation config
73
+ for (const device of raw.devices || []) {
74
+ this.devices.set(device.deviceId, device);
75
+ }
76
+ for (const sessionId of raw.mutedSessions || []) {
77
+ this.mutedSessions.add(sessionId);
78
+ }
79
+ this.escalation = { ...types_1.DEFAULT_ESCALATION_CONFIG };
80
+ // Save in new format immediately
81
+ this.saveState();
82
+ }
83
+ else {
84
+ // New format
85
+ const state = raw;
86
+ this.escalation = { ...types_1.DEFAULT_ESCALATION_CONFIG, ...state.escalation };
87
+ for (const device of state.devices || []) {
88
+ this.devices.set(device.deviceId, device);
89
+ }
90
+ for (const sessionId of state.mutedSessions || []) {
91
+ this.mutedSessions.add(sessionId);
92
+ }
93
+ }
94
+ console.log(`NotificationStore: Loaded ${this.devices.size} devices, ${this.mutedSessions.size} muted sessions`);
95
+ }
96
+ else {
97
+ console.log('NotificationStore: First startup, using default escalation config');
98
+ }
99
+ }
100
+ catch (err) {
101
+ console.error('NotificationStore: Failed to load state:', err);
102
+ }
103
+ // Load history
104
+ try {
105
+ if (fs.existsSync(HISTORY_FILE)) {
106
+ const content = fs.readFileSync(HISTORY_FILE, 'utf-8');
107
+ const rawHistory = JSON.parse(content);
108
+ // Migration: old entries may have ruleName/ruleId/devicesSent/devicesSkipped
109
+ // Convert them to the new format
110
+ this.history = rawHistory.map((entry) => {
111
+ if ('tier' in entry) {
112
+ return entry;
113
+ }
114
+ // Migrate old entry
115
+ return {
116
+ id: entry.id || (0, uuid_1.v4)(),
117
+ timestamp: entry.timestamp || Date.now(),
118
+ eventType: entry.eventType || 'waiting_for_input',
119
+ sessionId: entry.sessionId,
120
+ sessionName: entry.sessionName,
121
+ preview: entry.preview || '',
122
+ tier: 'push',
123
+ acknowledged: false,
124
+ };
125
+ });
126
+ console.log(`NotificationStore: Loaded ${this.history.length} history entries`);
127
+ }
128
+ }
129
+ catch (err) {
130
+ console.error('NotificationStore: Failed to load history:', err);
131
+ this.history = [];
132
+ }
133
+ }
134
+ scheduleSave() {
135
+ if (this.saveTimer)
136
+ return;
137
+ this.saveTimer = setTimeout(() => {
138
+ this.saveTimer = null;
139
+ this.saveState();
140
+ }, SAVE_DEBOUNCE_MS);
141
+ }
142
+ scheduleHistorySave() {
143
+ if (this.historySaveTimer)
144
+ return;
145
+ this.historySaveTimer = setTimeout(() => {
146
+ this.historySaveTimer = null;
147
+ this.saveHistory();
148
+ }, SAVE_DEBOUNCE_MS);
149
+ }
150
+ saveState() {
151
+ try {
152
+ const state = {
153
+ escalation: this.escalation,
154
+ devices: Array.from(this.devices.values()),
155
+ mutedSessions: Array.from(this.mutedSessions),
156
+ };
157
+ fs.writeFileSync(STATE_FILE, JSON.stringify(state, null, 2));
158
+ }
159
+ catch (err) {
160
+ console.error('NotificationStore: Failed to save state:', err);
161
+ }
162
+ }
163
+ saveHistory() {
164
+ try {
165
+ fs.writeFileSync(HISTORY_FILE, JSON.stringify(this.history, null, 2));
166
+ }
167
+ catch (err) {
168
+ console.error('NotificationStore: Failed to save history:', err);
169
+ }
170
+ }
171
+ // Escalation config methods
172
+ getEscalation() {
173
+ return { ...this.escalation };
174
+ }
175
+ setEscalation(config) {
176
+ if (config.events !== undefined) {
177
+ this.escalation.events = { ...this.escalation.events, ...config.events };
178
+ }
179
+ if (config.pushDelaySeconds !== undefined) {
180
+ this.escalation.pushDelaySeconds = config.pushDelaySeconds;
181
+ }
182
+ if (config.rateLimitSeconds !== undefined) {
183
+ this.escalation.rateLimitSeconds = config.rateLimitSeconds;
184
+ }
185
+ if (config.quietHours !== undefined) {
186
+ this.escalation.quietHours = { ...this.escalation.quietHours, ...config.quietHours };
187
+ }
188
+ this.scheduleSave();
189
+ return this.getEscalation();
190
+ }
191
+ // Device methods
192
+ getDevices() {
193
+ return Array.from(this.devices.values());
194
+ }
195
+ getDevice(deviceId) {
196
+ return this.devices.get(deviceId);
197
+ }
198
+ setDevice(device) {
199
+ this.devices.set(device.deviceId, device);
200
+ this.scheduleSave();
201
+ }
202
+ removeDevice(deviceId) {
203
+ const existed = this.devices.delete(deviceId);
204
+ if (existed)
205
+ this.scheduleSave();
206
+ return existed;
207
+ }
208
+ updateDeviceLastSeen(deviceId) {
209
+ const device = this.devices.get(deviceId);
210
+ if (device) {
211
+ device.lastSeen = Date.now();
212
+ // Don't schedule save for lastSeen updates (too frequent)
213
+ }
214
+ }
215
+ getDeviceCount() {
216
+ return this.devices.size;
217
+ }
218
+ // Muted session methods
219
+ getMutedSessions() {
220
+ return Array.from(this.mutedSessions);
221
+ }
222
+ isSessionMuted(sessionId) {
223
+ return this.mutedSessions.has(sessionId);
224
+ }
225
+ setSessionMuted(sessionId, muted) {
226
+ if (muted) {
227
+ this.mutedSessions.add(sessionId);
228
+ }
229
+ else {
230
+ this.mutedSessions.delete(sessionId);
231
+ }
232
+ this.scheduleSave();
233
+ }
234
+ // History methods
235
+ getHistory(limit) {
236
+ const total = this.history.length;
237
+ const entries = limit ? this.history.slice(-limit).reverse() : [...this.history].reverse();
238
+ return { entries, total };
239
+ }
240
+ addHistoryEntry(entry) {
241
+ const full = {
242
+ ...entry,
243
+ id: (0, uuid_1.v4)(),
244
+ timestamp: Date.now(),
245
+ };
246
+ this.history.push(full);
247
+ if (this.history.length > MAX_HISTORY) {
248
+ this.history = this.history.slice(-MAX_HISTORY);
249
+ }
250
+ this.scheduleHistorySave();
251
+ return full;
252
+ }
253
+ clearHistory() {
254
+ this.history = [];
255
+ this.scheduleHistorySave();
256
+ }
257
+ // Flush pending saves (for shutdown)
258
+ flush() {
259
+ if (this.saveTimer) {
260
+ clearTimeout(this.saveTimer);
261
+ this.saveTimer = null;
262
+ this.saveState();
263
+ }
264
+ if (this.historySaveTimer) {
265
+ clearTimeout(this.historySaveTimer);
266
+ this.historySaveTimer = null;
267
+ this.saveHistory();
268
+ }
269
+ }
270
+ }
271
+ exports.NotificationStore = NotificationStore;
272
+ //# sourceMappingURL=notification-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notification-store.js","sourceRoot":"","sources":["../src/notification-store.ts"],"names":[],"mappings":"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"}
package/dist/parser.d.ts CHANGED
@@ -7,6 +7,18 @@ export { TaskItem } from './types';
7
7
  */
8
8
  export declare function detectCurrentActivityFast(filePath: string): string | undefined;
9
9
  export declare function parseConversationFile(filePath: string, limit?: number, preReadContent?: string): ConversationMessage[];
10
+ /**
11
+ * Parse a chain of conversation files for cross-session infinite scroll.
12
+ * Files are ordered oldest-first. Pagination counts from the END of the
13
+ * newest (last) file backwards through older files.
14
+ *
15
+ * Returns { highlights, total, hasMore } matching the get_highlights contract.
16
+ */
17
+ export declare function parseConversationChain(files: string[], limit: number, offset: number): {
18
+ highlights: ConversationHighlight[];
19
+ total: number;
20
+ hasMore: boolean;
21
+ };
10
22
  export declare function extractHighlights(messages: ConversationMessage[]): ConversationHighlight[];
11
23
  export declare function detectWaitingForInput(messages: ConversationMessage[]): boolean;
12
24
  export declare function detectIdle(messages: ConversationMessage[]): boolean;
@@ -21,7 +33,9 @@ export declare function detectCurrentActivity(messages: ConversationMessage[]):
21
33
  export declare function getRecentActivity(messages: ConversationMessage[], limit?: number): ActivityDetail[];
22
34
  export declare function getSessionStatus(conversationPath: string, isProcessRunning: boolean): SessionStatus;
23
35
  /**
24
- * Get list of pending tools that need approval from the last message
36
+ * Get list of pending tools that need approval from the last message.
37
+ * Only returns tools that actually require user approval (Bash, Write, Edit, etc.)
38
+ * Excludes Task (runs in background), AskUserQuestion (choice prompts, not tool approval).
25
39
  */
26
40
  export declare function getPendingApprovalTools(messages: ConversationMessage[]): string[];
27
41
  /**
@@ -1 +1 @@
1
- {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,mBAAmB,EAAE,qBAAqB,EAAY,aAAa,EAA4B,YAAY,EAAE,eAAe,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAIjK,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAgDnC;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CAyF9E;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,MAAM,EAAE,KAAK,GAAE,MAAqB,EAAE,cAAc,CAAC,EAAE,MAAM,GAAG,mBAAmB,EAAE,CAuEpI;AAiID,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,EAAE,CA0F1F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAsC9E;AAGD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAmBnE;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,GAAG,SAAS,CAkDzF;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,EAAE,KAAK,GAAE,MAAU,GAAG,cAAc,EAAE,CAsCtG;AAED,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,OAAO,GACxB,aAAa,CAWf;AAED;;GAEG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CASjF;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAU,EAC3B,cAAc,CAAC,EAAE,MAAM,GACtB;IAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CA+BrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CA+DxF;AAsBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CA6IxD"}
1
+ {"version":3,"file":"parser.d.ts","sourceRoot":"","sources":["../src/parser.ts"],"names":[],"mappings":"AACA,OAAO,EACL,mBAAmB,EACnB,qBAAqB,EAErB,aAAa,EAGb,YAAY,EACZ,eAAe,EACf,QAAQ,EACT,MAAM,SAAS,CAAC;AAIjB,OAAO,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAgDnC;;;;GAIG;AACH,wBAAgB,yBAAyB,CAAC,QAAQ,EAAE,MAAM,GAAG,MAAM,GAAG,SAAS,CA0F9E;AAED,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,MAAM,EAChB,KAAK,GAAE,MAAqB,EAC5B,cAAc,CAAC,EAAE,MAAM,GACtB,mBAAmB,EAAE,CAsEvB;AAuID;;;;;;GAMG;AACH,wBAAgB,sBAAsB,CACpC,KAAK,EAAE,MAAM,EAAE,EACf,KAAK,EAAE,MAAM,EACb,MAAM,EAAE,MAAM,GACb;IAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;IAAC,KAAK,EAAE,MAAM,CAAC;IAAC,OAAO,EAAE,OAAO,CAAA;CAAE,CAgD1E;AAED,wBAAgB,iBAAiB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,qBAAqB,EAAE,CAuG1F;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAgC9E;AAGD,wBAAgB,UAAU,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,OAAO,CAmBnE;AAED,MAAM,WAAW,cAAc;IAC7B,OAAO,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED,wBAAgB,qBAAqB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,GAAG,SAAS,CAsDzF;AAED,wBAAgB,iBAAiB,CAC/B,QAAQ,EAAE,mBAAmB,EAAE,EAC/B,KAAK,GAAE,MAAU,GAChB,cAAc,EAAE,CAsClB;AAED,wBAAgB,gBAAgB,CAC9B,gBAAgB,EAAE,MAAM,EACxB,gBAAgB,EAAE,OAAO,GACxB,aAAa,CAWf;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,mBAAmB,EAAE,GAAG,MAAM,EAAE,CAWjF;AAmBD;;;GAGG;AACH,wBAAgB,gBAAgB,CAC9B,QAAQ,EAAE,MAAM,EAChB,SAAS,EAAE,MAAM,EACjB,WAAW,EAAE,MAAM,EACnB,WAAW,EAAE,MAAM,EACnB,eAAe,GAAE,MAAU,EAC3B,cAAc,CAAC,EAAE,MAAM,GACtB;IAAE,KAAK,EAAE,eAAe,GAAG,IAAI,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAgCrD;AAED;;GAEG;AACH,wBAAgB,oBAAoB,CAAC,QAAQ,EAAE,MAAM,EAAE,WAAW,EAAE,MAAM,GAAG,YAAY,CA+DxF;AAsBD;;GAEG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,MAAM,GAAG,QAAQ,EAAE,CAuIxD"}