@relace-ai/jacq 0.1.1-beta.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 (106) hide show
  1. package/dist/actions/messages.d.ts +41 -0
  2. package/dist/actions/messages.js +77 -0
  3. package/dist/actions/messages.js.map +1 -0
  4. package/dist/actions/prompts.d.ts +6 -0
  5. package/dist/actions/prompts.js +18 -0
  6. package/dist/actions/prompts.js.map +1 -0
  7. package/dist/actions/tasks.d.ts +13 -0
  8. package/dist/actions/tasks.js +66 -0
  9. package/dist/actions/tasks.js.map +1 -0
  10. package/dist/auth.d.ts +12 -0
  11. package/dist/auth.js +131 -0
  12. package/dist/auth.js.map +1 -0
  13. package/dist/clipboard.d.ts +21 -0
  14. package/dist/clipboard.js +126 -0
  15. package/dist/clipboard.js.map +1 -0
  16. package/dist/commands.d.ts +15 -0
  17. package/dist/commands.js +23 -0
  18. package/dist/commands.js.map +1 -0
  19. package/dist/config.d.ts +12 -0
  20. package/dist/config.js +63 -0
  21. package/dist/config.js.map +1 -0
  22. package/dist/connection.d.ts +43 -0
  23. package/dist/connection.js +231 -0
  24. package/dist/connection.js.map +1 -0
  25. package/dist/constants.d.ts +2 -0
  26. package/dist/constants.js +3 -0
  27. package/dist/constants.js.map +1 -0
  28. package/dist/debug.d.ts +96 -0
  29. package/dist/debug.js +144 -0
  30. package/dist/debug.js.map +1 -0
  31. package/dist/index.d.ts +10 -0
  32. package/dist/index.js +390 -0
  33. package/dist/index.js.map +1 -0
  34. package/dist/markdown/index.d.ts +11 -0
  35. package/dist/markdown/index.js +12 -0
  36. package/dist/markdown/index.js.map +1 -0
  37. package/dist/markdown/parser.d.ts +22 -0
  38. package/dist/markdown/parser.js +310 -0
  39. package/dist/markdown/parser.js.map +1 -0
  40. package/dist/markdown/renderer.d.ts +23 -0
  41. package/dist/markdown/renderer.js +358 -0
  42. package/dist/markdown/renderer.js.map +1 -0
  43. package/dist/markdown/types.d.ts +74 -0
  44. package/dist/markdown/types.js +12 -0
  45. package/dist/markdown/types.js.map +1 -0
  46. package/dist/protocol.d.ts +46 -0
  47. package/dist/protocol.js +608 -0
  48. package/dist/protocol.js.map +1 -0
  49. package/dist/renderer.d.ts +46 -0
  50. package/dist/renderer.js +144 -0
  51. package/dist/renderer.js.map +1 -0
  52. package/dist/screen.d.ts +34 -0
  53. package/dist/screen.js +167 -0
  54. package/dist/screen.js.map +1 -0
  55. package/dist/state.d.ts +6 -0
  56. package/dist/state.js +77 -0
  57. package/dist/state.js.map +1 -0
  58. package/dist/styles.d.ts +16 -0
  59. package/dist/styles.js +68 -0
  60. package/dist/styles.js.map +1 -0
  61. package/dist/terminal.d.ts +46 -0
  62. package/dist/terminal.js +67 -0
  63. package/dist/terminal.js.map +1 -0
  64. package/dist/tools/executor.d.ts +8 -0
  65. package/dist/tools/executor.js +20 -0
  66. package/dist/tools/executor.js.map +1 -0
  67. package/dist/tools/index.d.ts +5 -0
  68. package/dist/tools/index.js +6 -0
  69. package/dist/tools/index.js.map +1 -0
  70. package/dist/tools/registry.d.ts +32 -0
  71. package/dist/tools/registry.js +344 -0
  72. package/dist/tools/registry.js.map +1 -0
  73. package/dist/types.d.ts +200 -0
  74. package/dist/types.js +5 -0
  75. package/dist/types.js.map +1 -0
  76. package/dist/ui/backgroundTasks.d.ts +7 -0
  77. package/dist/ui/backgroundTasks.js +192 -0
  78. package/dist/ui/backgroundTasks.js.map +1 -0
  79. package/dist/ui/filePicker.d.ts +9 -0
  80. package/dist/ui/filePicker.js +315 -0
  81. package/dist/ui/filePicker.js.map +1 -0
  82. package/dist/ui/index.d.ts +33 -0
  83. package/dist/ui/index.js +289 -0
  84. package/dist/ui/index.js.map +1 -0
  85. package/dist/ui/input.d.ts +7 -0
  86. package/dist/ui/input.js +320 -0
  87. package/dist/ui/input.js.map +1 -0
  88. package/dist/ui/messages.d.ts +9 -0
  89. package/dist/ui/messages.js +329 -0
  90. package/dist/ui/messages.js.map +1 -0
  91. package/dist/ui/primitives.d.ts +35 -0
  92. package/dist/ui/primitives.js +94 -0
  93. package/dist/ui/primitives.js.map +1 -0
  94. package/dist/ui/promptInput.d.ts +8 -0
  95. package/dist/ui/promptInput.js +198 -0
  96. package/dist/ui/promptInput.js.map +1 -0
  97. package/dist/ui/promptPicker.d.ts +7 -0
  98. package/dist/ui/promptPicker.js +214 -0
  99. package/dist/ui/promptPicker.js.map +1 -0
  100. package/dist/ui/sessions.d.ts +6 -0
  101. package/dist/ui/sessions.js +214 -0
  102. package/dist/ui/sessions.js.map +1 -0
  103. package/dist/ui/welcome.d.ts +6 -0
  104. package/dist/ui/welcome.js +114 -0
  105. package/dist/ui/welcome.js.map +1 -0
  106. package/package.json +1 -1
@@ -0,0 +1,8 @@
1
+ /**
2
+ * Tool executor — handles server tool requests.
3
+ */
4
+ import type { ToolResult } from './registry.js';
5
+ /**
6
+ * Execute a tool request from the server.
7
+ */
8
+ export declare function executeToolRequest(tool: string, args: Record<string, unknown>, cwd: string): Promise<ToolResult>;
@@ -0,0 +1,20 @@
1
+ /**
2
+ * Tool executor — handles server tool requests.
3
+ */
4
+ import { TOOL_IMPLEMENTATIONS } from './registry.js';
5
+ /**
6
+ * Execute a tool request from the server.
7
+ */
8
+ export async function executeToolRequest(tool, args, cwd) {
9
+ const implementation = TOOL_IMPLEMENTATIONS[tool];
10
+ if (!implementation) {
11
+ return { success: false, error: `Unknown tool: ${tool}` };
12
+ }
13
+ try {
14
+ return await implementation(args, cwd);
15
+ }
16
+ catch (err) {
17
+ return { success: false, error: `Tool execution failed: ${err}` };
18
+ }
19
+ }
20
+ //# sourceMappingURL=executor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/tools/executor.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,eAAe,CAAC;AAGrD;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAC,IAAY,EAAE,IAA6B,EAAE,GAAW;IAC7F,MAAM,cAAc,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;IAClD,IAAI,CAAC,cAAc,EAAE,CAAC;QAClB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,iBAAiB,IAAI,EAAE,EAAE,CAAC;IAC9D,CAAC;IAED,IAAI,CAAC;QACD,OAAO,MAAM,cAAc,CAAC,IAAI,EAAE,GAAG,CAAC,CAAC;IAC3C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,0BAA0B,GAAG,EAAE,EAAE,CAAC;IACtE,CAAC;AACL,CAAC"}
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Client-side tools module.
3
+ */
4
+ export { TOOL_DEFINITIONS } from './registry.js';
5
+ export { executeToolRequest } from './executor.js';
@@ -0,0 +1,6 @@
1
+ /**
2
+ * Client-side tools module.
3
+ */
4
+ export { TOOL_DEFINITIONS } from './registry.js';
5
+ export { executeToolRequest } from './executor.js';
6
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/tools/index.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAC;AACjD,OAAO,EAAE,kBAAkB,EAAE,MAAM,eAAe,CAAC"}
@@ -0,0 +1,32 @@
1
+ /**
2
+ * Client-side tool registry.
3
+ *
4
+ * Defines tools that the server can execute on this client.
5
+ */
6
+ export interface ToolDefinition {
7
+ name: string;
8
+ description: string;
9
+ inputSchema: {
10
+ type: string;
11
+ properties: Record<string, {
12
+ type: string;
13
+ description: string;
14
+ }>;
15
+ required: string[];
16
+ };
17
+ }
18
+ export interface ToolResult {
19
+ success: boolean;
20
+ result?: string;
21
+ error?: string;
22
+ }
23
+ type ToolImplementation = (args: Record<string, unknown>, cwd: string) => Promise<ToolResult>;
24
+ /**
25
+ * Tool definitions announced to the server.
26
+ */
27
+ export declare const TOOL_DEFINITIONS: ToolDefinition[];
28
+ /**
29
+ * Tool implementations.
30
+ */
31
+ export declare const TOOL_IMPLEMENTATIONS: Record<string, ToolImplementation>;
32
+ export {};
@@ -0,0 +1,344 @@
1
+ /**
2
+ * Client-side tool registry.
3
+ *
4
+ * Defines tools that the server can execute on this client.
5
+ */
6
+ import fs from 'fs';
7
+ import path from 'path';
8
+ import { execFileSync, spawn } from 'child_process';
9
+ import { glob } from 'glob';
10
+ /**
11
+ * Resolve a path, expanding ~ and handling absolute paths.
12
+ */
13
+ function resolvePath(inputPath, cwd) {
14
+ if (!inputPath || inputPath === '.')
15
+ return cwd;
16
+ let expanded = inputPath;
17
+ if (expanded.startsWith('~/') || expanded === '~') {
18
+ const home = process.env.HOME || process.env.USERPROFILE || '';
19
+ expanded = expanded === '~' ? home : path.join(home, expanded.slice(2));
20
+ }
21
+ return path.isAbsolute(expanded) ? path.resolve(expanded) : path.resolve(cwd, expanded);
22
+ }
23
+ /**
24
+ * Tool definitions announced to the server.
25
+ */
26
+ export const TOOL_DEFINITIONS = [
27
+ {
28
+ name: 'read_file',
29
+ description: 'Read a file from the local filesystem',
30
+ inputSchema: {
31
+ type: 'object',
32
+ properties: {
33
+ path: { type: 'string', description: 'File path' },
34
+ offset: { type: 'number', description: 'Line number to start reading from (1-indexed)' },
35
+ limit: { type: 'number', description: 'Number of lines to read' },
36
+ },
37
+ required: ['path'],
38
+ },
39
+ },
40
+ {
41
+ name: 'write_file',
42
+ description: 'Write content to a file',
43
+ inputSchema: {
44
+ type: 'object',
45
+ properties: {
46
+ path: { type: 'string', description: 'File path' },
47
+ content: { type: 'string', description: 'Content to write' },
48
+ append: { type: 'boolean', description: 'Append instead of overwrite' },
49
+ },
50
+ required: ['path', 'content'],
51
+ },
52
+ },
53
+ {
54
+ name: 'list_files',
55
+ description: 'List files in a directory',
56
+ inputSchema: {
57
+ type: 'object',
58
+ properties: {
59
+ path: { type: 'string', description: 'Directory path' },
60
+ pattern: { type: 'string', description: 'Glob pattern to filter files' },
61
+ recursive: { type: 'boolean', description: 'List recursively' },
62
+ },
63
+ required: ['path'],
64
+ },
65
+ },
66
+ {
67
+ name: 'glob',
68
+ description: 'Find files matching a glob pattern',
69
+ inputSchema: {
70
+ type: 'object',
71
+ properties: {
72
+ pattern: { type: 'string', description: 'Glob pattern to match' },
73
+ path: { type: 'string', description: 'Directory to search in' },
74
+ },
75
+ required: ['pattern'],
76
+ },
77
+ },
78
+ {
79
+ name: 'grep',
80
+ description: 'Search for a pattern in files',
81
+ inputSchema: {
82
+ type: 'object',
83
+ properties: {
84
+ pattern: { type: 'string', description: 'Regex pattern to search for' },
85
+ path: { type: 'string', description: 'File or directory to search in' },
86
+ file_pattern: { type: 'string', description: 'Glob pattern to filter files' },
87
+ ignore_case: { type: 'boolean', description: 'Case-insensitive search' },
88
+ },
89
+ required: ['pattern'],
90
+ },
91
+ },
92
+ {
93
+ name: 'bash',
94
+ description: 'Run a shell command',
95
+ inputSchema: {
96
+ type: 'object',
97
+ properties: {
98
+ command: { type: 'string', description: 'Shell command to run' },
99
+ timeout: { type: 'number', description: 'Timeout in seconds (default: 30)' },
100
+ },
101
+ required: ['command'],
102
+ },
103
+ },
104
+ ];
105
+ /**
106
+ * Tool implementations.
107
+ */
108
+ export const TOOL_IMPLEMENTATIONS = {
109
+ async read_file(args, cwd) {
110
+ try {
111
+ const filePath = resolvePath(args.path, cwd);
112
+ const content = fs.readFileSync(filePath, 'utf-8');
113
+ const lines = content.split('\n');
114
+ const totalLines = lines.length;
115
+ if (args.offset !== undefined || args.limit !== undefined) {
116
+ const start = Math.max(1, args.offset || 1) - 1;
117
+ const end = args.limit ? start + args.limit : totalLines;
118
+ const selected = lines.slice(start, Math.min(totalLines, end));
119
+ let result = `Lines ${start + 1}-${Math.min(end, totalLines)} of ${totalLines}:\n\n`;
120
+ selected.forEach((line, i) => { result += `${start + i + 1}: ${line}\n`; });
121
+ return { success: true, result };
122
+ }
123
+ let result = `${args.path} (${totalLines} lines):\n\n`;
124
+ lines.forEach((line, i) => { result += `${i + 1}: ${line}\n`; });
125
+ if (result.length > 30000) {
126
+ result = result.slice(0, 30000) + '\n... (truncated)';
127
+ }
128
+ return { success: true, result };
129
+ }
130
+ catch (err) {
131
+ return { success: false, error: `Error reading file: ${err}` };
132
+ }
133
+ },
134
+ async write_file(args, cwd) {
135
+ try {
136
+ const filePath = resolvePath(args.path, cwd);
137
+ fs.mkdirSync(path.dirname(filePath), { recursive: true });
138
+ if (args.append) {
139
+ fs.appendFileSync(filePath, args.content, 'utf-8');
140
+ return { success: true, result: `Appended to ${args.path} (${args.content.length} chars)` };
141
+ }
142
+ else {
143
+ fs.writeFileSync(filePath, args.content, 'utf-8');
144
+ return { success: true, result: `Wrote ${args.path} (${args.content.length} chars)` };
145
+ }
146
+ }
147
+ catch (err) {
148
+ return { success: false, error: `Error writing file: ${err}` };
149
+ }
150
+ },
151
+ async list_files(args, cwd) {
152
+ try {
153
+ const dirPath = resolvePath(args.path || '.', cwd);
154
+ if (!fs.existsSync(dirPath)) {
155
+ return { success: false, error: `Path does not exist: ${args.path}` };
156
+ }
157
+ const stats = fs.statSync(dirPath);
158
+ if (!stats.isDirectory()) {
159
+ return { success: false, error: `Not a directory: ${args.path}` };
160
+ }
161
+ const files = [];
162
+ function scanDir(dir, prefix = '') {
163
+ const entries = fs.readdirSync(dir, { withFileTypes: true });
164
+ for (const entry of entries) {
165
+ const rel = prefix ? `${prefix}/${entry.name}` : entry.name;
166
+ if (args.pattern && !entry.name.match(new RegExp(args.pattern.replace(/\*/g, '.*')))) {
167
+ if (!entry.isDirectory() || !args.recursive)
168
+ continue;
169
+ }
170
+ if (entry.isDirectory()) {
171
+ files.push(rel + '/');
172
+ if (args.recursive)
173
+ scanDir(path.join(dir, entry.name), rel);
174
+ }
175
+ else {
176
+ if (!args.pattern || entry.name.match(new RegExp(args.pattern.replace(/\*/g, '.*')))) {
177
+ files.push(rel);
178
+ }
179
+ }
180
+ }
181
+ }
182
+ scanDir(dirPath);
183
+ files.sort();
184
+ if (files.length === 0) {
185
+ return { success: true, result: `No files found in ${args.path}${args.pattern ? ` matching '${args.pattern}'` : ''}` };
186
+ }
187
+ let result = `${files.length} files in ${args.path}:\n`;
188
+ result += files.slice(0, 200).join('\n');
189
+ if (files.length > 200)
190
+ result += `\n... and ${files.length - 200} more`;
191
+ return { success: true, result };
192
+ }
193
+ catch (err) {
194
+ return { success: false, error: `Error listing files: ${err}` };
195
+ }
196
+ },
197
+ async glob_tool(args, cwd) {
198
+ try {
199
+ let pattern = args.pattern;
200
+ let searchPath = cwd;
201
+ if (pattern.startsWith('~/')) {
202
+ const home = process.env.HOME || process.env.USERPROFILE || '';
203
+ pattern = path.join(home, pattern.slice(2));
204
+ }
205
+ if (path.isAbsolute(pattern)) {
206
+ const globChars = ['*', '?', '['];
207
+ let globStart = pattern.length;
208
+ for (const char of globChars) {
209
+ const idx = pattern.indexOf(char);
210
+ if (idx !== -1 && idx < globStart)
211
+ globStart = idx;
212
+ }
213
+ const baseDir = pattern.slice(0, globStart).replace(/\/[^/]*$/, '') || '/';
214
+ searchPath = baseDir;
215
+ pattern = pattern.slice(baseDir.length).replace(/^\//, '');
216
+ }
217
+ else if (args.path) {
218
+ searchPath = resolvePath(args.path, cwd);
219
+ }
220
+ const matches = await glob(pattern, { cwd: searchPath, nodir: true, absolute: true });
221
+ if (matches.length === 0) {
222
+ return { success: true, result: `No files found matching '${args.pattern}'` };
223
+ }
224
+ let result = `Found ${matches.length} files matching '${args.pattern}':\n`;
225
+ result += matches.slice(0, 100).join('\n');
226
+ if (matches.length > 100)
227
+ result += `\n... and ${matches.length - 100} more`;
228
+ return { success: true, result };
229
+ }
230
+ catch (err) {
231
+ return { success: false, error: `Error in glob: ${err}` };
232
+ }
233
+ },
234
+ async grep(args, cwd) {
235
+ try {
236
+ const searchPath = resolvePath(args.path || '.', cwd);
237
+ let hasRg = false;
238
+ try {
239
+ execFileSync('which', ['rg'], { encoding: 'utf-8' });
240
+ hasRg = true;
241
+ }
242
+ catch { /* no rg */ }
243
+ if (hasRg) {
244
+ const rgArgs = ['--line-number', '--context=2'];
245
+ if (args.ignore_case)
246
+ rgArgs.push('--ignore-case');
247
+ if (args.file_pattern)
248
+ rgArgs.push('--glob', args.file_pattern);
249
+ rgArgs.push('--', args.pattern, searchPath);
250
+ try {
251
+ const result = execFileSync('rg', rgArgs, { encoding: 'utf-8', maxBuffer: 10 * 1024 * 1024 });
252
+ return { success: true, result: result.slice(0, 30000) };
253
+ }
254
+ catch (err) {
255
+ const execErr = err;
256
+ if (execErr.status === 1) {
257
+ return { success: true, result: `No matches for '${args.pattern}'` };
258
+ }
259
+ return { success: false, error: execErr.stderr || String(err) };
260
+ }
261
+ }
262
+ // Fallback: simple grep
263
+ const regex = new RegExp(args.pattern, args.ignore_case ? 'i' : '');
264
+ const matches = [];
265
+ function searchFile(filePath, relativePath) {
266
+ try {
267
+ const content = fs.readFileSync(filePath, 'utf-8');
268
+ content.split('\n').forEach((line, i) => {
269
+ if (regex.test(line)) {
270
+ matches.push(`${relativePath}:${i + 1}: ${line.slice(0, 200)}`);
271
+ }
272
+ });
273
+ }
274
+ catch { /* skip */ }
275
+ }
276
+ const fileStats = fs.statSync(searchPath);
277
+ if (fileStats.isFile()) {
278
+ searchFile(searchPath, args.path);
279
+ }
280
+ else {
281
+ const files = await glob(args.file_pattern || '**/*', { cwd: searchPath, nodir: true });
282
+ for (const file of files.slice(0, 1000)) {
283
+ searchFile(path.join(searchPath, file), file);
284
+ }
285
+ }
286
+ if (matches.length === 0) {
287
+ return { success: true, result: `No matches for '${args.pattern}'` };
288
+ }
289
+ let result = `Found ${matches.length} matches:\n`;
290
+ result += matches.slice(0, 100).join('\n');
291
+ if (matches.length > 100)
292
+ result += `\n... and ${matches.length - 100} more`;
293
+ return { success: true, result: result.slice(0, 30000) };
294
+ }
295
+ catch (err) {
296
+ return { success: false, error: `Error in grep: ${err}` };
297
+ }
298
+ },
299
+ async bash(args, cwd) {
300
+ const command = args.command;
301
+ const timeout = Math.min(args.timeout || 30, 300) * 1000;
302
+ return new Promise((resolve) => {
303
+ const child = spawn('bash', ['-c', command], {
304
+ cwd,
305
+ stdio: ['ignore', 'pipe', 'pipe'],
306
+ });
307
+ let stdout = '';
308
+ let stderr = '';
309
+ const timeoutId = setTimeout(() => {
310
+ child.kill('SIGTERM');
311
+ resolve({ success: false, error: `Command timed out after ${timeout / 1000}s` });
312
+ }, timeout);
313
+ child.stdout.on('data', (data) => { stdout += data.toString(); });
314
+ child.stderr.on('data', (data) => { stderr += data.toString(); });
315
+ child.on('close', (code) => {
316
+ clearTimeout(timeoutId);
317
+ let output = '';
318
+ if (stdout)
319
+ output += stdout;
320
+ if (stderr) {
321
+ if (output)
322
+ output += '\n';
323
+ output += stderr;
324
+ }
325
+ if (!output)
326
+ output = '(no output)';
327
+ if (output.length > 10000) {
328
+ output = output.slice(0, 10000) + '\n... (truncated)';
329
+ }
330
+ if (code !== 0 && code !== null) {
331
+ output = `[exit code: ${code}]\n${output}`;
332
+ }
333
+ resolve({ success: true, result: output.trim() });
334
+ });
335
+ child.on('error', (err) => {
336
+ clearTimeout(timeoutId);
337
+ resolve({ success: false, error: `Command failed: ${err.message}` });
338
+ });
339
+ });
340
+ },
341
+ };
342
+ // Route "glob" tool name to "glob_tool" implementation
343
+ TOOL_IMPLEMENTATIONS['glob'] = TOOL_IMPLEMENTATIONS.glob_tool;
344
+ //# sourceMappingURL=registry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/tools/registry.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,YAAY,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACpD,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAoB5B;;GAEG;AACH,SAAS,WAAW,CAAC,SAA6B,EAAE,GAAW;IAC3D,IAAI,CAAC,SAAS,IAAI,SAAS,KAAK,GAAG;QAAE,OAAO,GAAG,CAAC;IAEhD,IAAI,QAAQ,GAAG,SAAS,CAAC;IACzB,IAAI,QAAQ,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,KAAK,GAAG,EAAE,CAAC;QAChD,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;QAC/D,QAAQ,GAAG,QAAQ,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;IAC5E,CAAC;IAED,OAAO,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,QAAQ,CAAC,CAAC;AAC5F,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,gBAAgB,GAAqB;IAC9C;QACI,IAAI,EAAE,WAAW;QACjB,WAAW,EAAE,uCAAuC;QACpD,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;gBAClD,MAAM,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,+CAA+C,EAAE;gBACxF,KAAK,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,yBAAyB,EAAE;aACpE;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACrB;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,yBAAyB;QACtC,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,WAAW,EAAE;gBAClD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kBAAkB,EAAE;gBAC5D,MAAM,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,6BAA6B,EAAE;aAC1E;YACD,QAAQ,EAAE,CAAC,MAAM,EAAE,SAAS,CAAC;SAChC;KACJ;IACD;QACI,IAAI,EAAE,YAAY;QAClB,WAAW,EAAE,2BAA2B;QACxC,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gBAAgB,EAAE;gBACvD,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBACxE,SAAS,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,kBAAkB,EAAE;aAClE;YACD,QAAQ,EAAE,CAAC,MAAM,CAAC;SACrB;KACJ;IACD;QACI,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,oCAAoC;QACjD,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,uBAAuB,EAAE;gBACjE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,wBAAwB,EAAE;aAClE;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACxB;KACJ;IACD;QACI,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,+BAA+B;QAC5C,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,6BAA6B,EAAE;gBACvE,IAAI,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,gCAAgC,EAAE;gBACvE,YAAY,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,8BAA8B,EAAE;gBAC7E,WAAW,EAAE,EAAE,IAAI,EAAE,SAAS,EAAE,WAAW,EAAE,yBAAyB,EAAE;aAC3E;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACxB;KACJ;IACD;QACI,IAAI,EAAE,MAAM;QACZ,WAAW,EAAE,qBAAqB;QAClC,WAAW,EAAE;YACT,IAAI,EAAE,QAAQ;YACd,UAAU,EAAE;gBACR,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,sBAAsB,EAAE;gBAChE,OAAO,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,WAAW,EAAE,kCAAkC,EAAE;aAC/E;YACD,QAAQ,EAAE,CAAC,SAAS,CAAC;SACxB;KACJ;CACJ,CAAC;AAEF;;GAEG;AACH,MAAM,CAAC,MAAM,oBAAoB,GAAuC;IACpE,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG;QACrB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;YACvD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;YACnD,MAAM,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;YAClC,MAAM,UAAU,GAAG,KAAK,CAAC,MAAM,CAAC;YAEhC,IAAI,IAAI,CAAC,MAAM,KAAK,SAAS,IAAI,IAAI,CAAC,KAAK,KAAK,SAAS,EAAE,CAAC;gBACxD,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAG,IAAI,CAAC,MAAiB,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC;gBAC5D,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,KAAK,GAAI,IAAI,CAAC,KAAgB,CAAC,CAAC,CAAC,UAAU,CAAC;gBACrE,MAAM,QAAQ,GAAG,KAAK,CAAC,KAAK,CAAC,KAAK,EAAE,IAAI,CAAC,GAAG,CAAC,UAAU,EAAE,GAAG,CAAC,CAAC,CAAC;gBAE/D,IAAI,MAAM,GAAG,SAAS,KAAK,GAAG,CAAC,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,UAAU,CAAC,OAAO,UAAU,OAAO,CAAC;gBACrF,QAAQ,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;gBAC5E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;YACrC,CAAC;YAED,IAAI,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,KAAK,UAAU,cAAc,CAAC;YACvD,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE,GAAG,MAAM,IAAI,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC;YAEjE,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;gBACxB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC;YAC1D,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,EAAE,EAAE,CAAC;QACnE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG;QACtB,IAAI,CAAC;YACD,MAAM,QAAQ,GAAG,WAAW,CAAC,IAAI,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;YACvD,EAAE,CAAC,SAAS,CAAC,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;YAE1D,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;gBACd,EAAE,CAAC,cAAc,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAiB,EAAE,OAAO,CAAC,CAAC;gBAC7D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,eAAe,IAAI,CAAC,IAAI,KAAM,IAAI,CAAC,OAAkB,CAAC,MAAM,SAAS,EAAE,CAAC;YAC5G,CAAC;iBAAM,CAAC;gBACJ,EAAE,CAAC,aAAa,CAAC,QAAQ,EAAE,IAAI,CAAC,OAAiB,EAAE,OAAO,CAAC,CAAC;gBAC5D,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,SAAS,IAAI,CAAC,IAAI,KAAM,IAAI,CAAC,OAAkB,CAAC,MAAM,SAAS,EAAE,CAAC;YACtG,CAAC;QACL,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,uBAAuB,GAAG,EAAE,EAAE,CAAC;QACnE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,UAAU,CAAC,IAAI,EAAE,GAAG;QACtB,IAAI,CAAC;YACD,MAAM,OAAO,GAAG,WAAW,CAAE,IAAI,CAAC,IAAe,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAE/D,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC1B,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YAC1E,CAAC;YAED,MAAM,KAAK,GAAG,EAAE,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;YACnC,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,oBAAoB,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACtE,CAAC;YAED,MAAM,KAAK,GAAa,EAAE,CAAC;YAE3B,SAAS,OAAO,CAAC,GAAW,EAAE,SAAiB,EAAE;gBAC7C,MAAM,OAAO,GAAG,EAAE,CAAC,WAAW,CAAC,GAAG,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC,CAAC;gBAC7D,KAAK,MAAM,KAAK,IAAI,OAAO,EAAE,CAAC;oBAC1B,MAAM,GAAG,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC;oBAC5D,IAAI,IAAI,CAAC,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAE,IAAI,CAAC,OAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;wBAC/F,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS;4BAAE,SAAS;oBAC1D,CAAC;oBACD,IAAI,KAAK,CAAC,WAAW,EAAE,EAAE,CAAC;wBACtB,KAAK,CAAC,IAAI,CAAC,GAAG,GAAG,GAAG,CAAC,CAAC;wBACtB,IAAI,IAAI,CAAC,SAAS;4BAAE,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC;oBACjE,CAAC;yBAAM,CAAC;wBACJ,IAAI,CAAC,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,MAAM,CAAE,IAAI,CAAC,OAAkB,CAAC,OAAO,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;4BAC/F,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBACpB,CAAC;oBACL,CAAC;gBACL,CAAC;YACL,CAAC;YAED,OAAO,CAAC,OAAO,CAAC,CAAC;YACjB,KAAK,CAAC,IAAI,EAAE,CAAC;YAEb,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACrB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,qBAAqB,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,cAAc,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC;YAC3H,CAAC;YAED,IAAI,MAAM,GAAG,GAAG,KAAK,CAAC,MAAM,aAAa,IAAI,CAAC,IAAI,KAAK,CAAC;YACxD,MAAM,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACzC,IAAI,KAAK,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,IAAI,aAAa,KAAK,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC;YAEzE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,wBAAwB,GAAG,EAAE,EAAE,CAAC;QACpE,CAAC;IACL,CAAC;IAED,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,GAAG;QACrB,IAAI,CAAC;YACD,IAAI,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;YACrC,IAAI,UAAU,GAAG,GAAG,CAAC;YAErB,IAAI,OAAO,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;gBAC3B,MAAM,IAAI,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;gBAC/D,OAAO,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAChD,CAAC;YAED,IAAI,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,CAAC;gBAC3B,MAAM,SAAS,GAAG,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;gBAClC,IAAI,SAAS,GAAG,OAAO,CAAC,MAAM,CAAC;gBAC/B,KAAK,MAAM,IAAI,IAAI,SAAS,EAAE,CAAC;oBAC3B,MAAM,GAAG,GAAG,OAAO,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;oBAClC,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,SAAS;wBAAE,SAAS,GAAG,GAAG,CAAC;gBACvD,CAAC;gBACD,MAAM,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC,IAAI,GAAG,CAAC;gBAC3E,UAAU,GAAG,OAAO,CAAC;gBACrB,OAAO,GAAG,OAAO,CAAC,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;YAC/D,CAAC;iBAAM,IAAI,IAAI,CAAC,IAAI,EAAE,CAAC;gBACnB,UAAU,GAAG,WAAW,CAAC,IAAI,CAAC,IAAc,EAAE,GAAG,CAAC,CAAC;YACvD,CAAC;YAED,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,OAAO,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAC;YAEtF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,4BAA4B,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YAClF,CAAC;YAED,IAAI,MAAM,GAAG,SAAS,OAAO,CAAC,MAAM,oBAAoB,IAAI,CAAC,OAAO,MAAM,CAAC;YAC3E,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,IAAI,aAAa,OAAO,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC;YAE7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC;QACrC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG;QAChB,IAAI,CAAC;YACD,MAAM,UAAU,GAAG,WAAW,CAAE,IAAI,CAAC,IAAe,IAAI,GAAG,EAAE,GAAG,CAAC,CAAC;YAElE,IAAI,KAAK,GAAG,KAAK,CAAC;YAClB,IAAI,CAAC;gBACD,YAAY,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,CAAC,CAAC;gBACrD,KAAK,GAAG,IAAI,CAAC;YACjB,CAAC;YAAC,MAAM,CAAC,CAAC,WAAW,CAAC,CAAC;YAEvB,IAAI,KAAK,EAAE,CAAC;gBACR,MAAM,MAAM,GAAG,CAAC,eAAe,EAAE,aAAa,CAAC,CAAC;gBAChD,IAAI,IAAI,CAAC,WAAW;oBAAE,MAAM,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;gBACnD,IAAI,IAAI,CAAC,YAAY;oBAAE,MAAM,CAAC,IAAI,CAAC,QAAQ,EAAE,IAAI,CAAC,YAAsB,CAAC,CAAC;gBAC1E,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAiB,EAAE,UAAU,CAAC,CAAC;gBAEtD,IAAI,CAAC;oBACD,MAAM,MAAM,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,EAAE,QAAQ,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,GAAG,IAAI,GAAG,IAAI,EAAE,CAAC,CAAC;oBAC9F,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;gBAC7D,CAAC;gBAAC,OAAO,GAAY,EAAE,CAAC;oBACpB,MAAM,OAAO,GAAG,GAA2C,CAAC;oBAC5D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;wBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;oBACzE,CAAC;oBACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,CAAC,MAAM,IAAI,MAAM,CAAC,GAAG,CAAC,EAAE,CAAC;gBACpE,CAAC;YACL,CAAC;YAED,wBAAwB;YACxB,MAAM,KAAK,GAAG,IAAI,MAAM,CAAC,IAAI,CAAC,OAAiB,EAAE,IAAI,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC;YAC9E,MAAM,OAAO,GAAa,EAAE,CAAC;YAE7B,SAAS,UAAU,CAAC,QAAgB,EAAE,YAAoB;gBACtD,IAAI,CAAC;oBACD,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;oBACnD,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE,EAAE;wBACpC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC;4BACnB,OAAO,CAAC,IAAI,CAAC,GAAG,YAAY,IAAI,CAAC,GAAG,CAAC,KAAK,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,EAAE,CAAC,CAAC;wBACpE,CAAC;oBACL,CAAC,CAAC,CAAC;gBACP,CAAC;gBAAC,MAAM,CAAC,CAAC,UAAU,CAAC,CAAC;YAC1B,CAAC;YAED,MAAM,SAAS,GAAG,EAAE,CAAC,QAAQ,CAAC,UAAU,CAAC,CAAC;YAC1C,IAAI,SAAS,CAAC,MAAM,EAAE,EAAE,CAAC;gBACrB,UAAU,CAAC,UAAU,EAAE,IAAI,CAAC,IAAc,CAAC,CAAC;YAChD,CAAC;iBAAM,CAAC;gBACJ,MAAM,KAAK,GAAG,MAAM,IAAI,CAAE,IAAI,CAAC,YAAuB,IAAI,MAAM,EAAE,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC;gBACpG,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC;oBACtC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,EAAE,IAAI,CAAC,CAAC;gBAClD,CAAC;YACL,CAAC;YAED,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;gBACvB,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,mBAAmB,IAAI,CAAC,OAAO,GAAG,EAAE,CAAC;YACzE,CAAC;YAED,IAAI,MAAM,GAAG,SAAS,OAAO,CAAC,MAAM,aAAa,CAAC;YAClD,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3C,IAAI,OAAO,CAAC,MAAM,GAAG,GAAG;gBAAE,MAAM,IAAI,aAAa,OAAO,CAAC,MAAM,GAAG,GAAG,OAAO,CAAC;YAE7E,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,EAAE,CAAC;QAC7D,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACX,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,kBAAkB,GAAG,EAAE,EAAE,CAAC;QAC9D,CAAC;IACL,CAAC;IAED,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,GAAG;QAChB,MAAM,OAAO,GAAG,IAAI,CAAC,OAAiB,CAAC;QACvC,MAAM,OAAO,GAAG,IAAI,CAAC,GAAG,CAAE,IAAI,CAAC,OAAkB,IAAI,EAAE,EAAE,GAAG,CAAC,GAAG,IAAI,CAAC;QAErE,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;YAC3B,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBACzC,GAAG;gBACH,KAAK,EAAE,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,CAAC;aACpC,CAAC,CAAC;YAEH,IAAI,MAAM,GAAG,EAAE,CAAC;YAChB,IAAI,MAAM,GAAG,EAAE,CAAC;YAEhB,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC9B,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;gBACtB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,2BAA2B,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC,CAAC;YACrF,CAAC,EAAE,OAAO,CAAC,CAAC;YAEZ,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAC1E,KAAK,CAAC,MAAM,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAY,EAAE,EAAE,GAAG,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;YAE1E,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,IAAI,EAAE,EAAE;gBACvB,YAAY,CAAC,SAAS,CAAC,CAAC;gBAExB,IAAI,MAAM,GAAG,EAAE,CAAC;gBAChB,IAAI,MAAM;oBAAE,MAAM,IAAI,MAAM,CAAC;gBAC7B,IAAI,MAAM,EAAE,CAAC;oBAAC,IAAI,MAAM;wBAAE,MAAM,IAAI,IAAI,CAAC;oBAAC,MAAM,IAAI,MAAM,CAAC;gBAAC,CAAC;gBAC7D,IAAI,CAAC,MAAM;oBAAE,MAAM,GAAG,aAAa,CAAC;gBAEpC,IAAI,MAAM,CAAC,MAAM,GAAG,KAAK,EAAE,CAAC;oBACxB,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,mBAAmB,CAAC;gBAC1D,CAAC;gBACD,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,IAAI,EAAE,CAAC;oBAC9B,MAAM,GAAG,eAAe,IAAI,MAAM,MAAM,EAAE,CAAC;gBAC/C,CAAC;gBAED,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;YACtD,CAAC,CAAC,CAAC;YAEH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,CAAC,GAAG,EAAE,EAAE;gBACtB,YAAY,CAAC,SAAS,CAAC,CAAC;gBACxB,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mBAAmB,GAAG,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;YACzE,CAAC,CAAC,CAAC;QACP,CAAC,CAAC,CAAC;IACP,CAAC;CACJ,CAAC;AAEF,uDAAuD;AACvD,oBAAoB,CAAC,MAAM,CAAC,GAAG,oBAAoB,CAAC,SAAS,CAAC"}
@@ -0,0 +1,200 @@
1
+ /**
2
+ * Central type definitions for the client
3
+ */
4
+ export interface DamageRect {
5
+ x: number;
6
+ y: number;
7
+ w: number;
8
+ h: number;
9
+ }
10
+ export interface CellInfo {
11
+ char: string;
12
+ styleId: number;
13
+ }
14
+ export interface CellChange extends CellInfo {
15
+ x: number;
16
+ y: number;
17
+ linkUrl?: string;
18
+ }
19
+ export interface StyleSpec {
20
+ color?: string;
21
+ bg?: string;
22
+ bold?: boolean;
23
+ dim?: boolean;
24
+ italic?: boolean;
25
+ underline?: boolean;
26
+ inverse?: boolean;
27
+ strikethrough?: boolean;
28
+ }
29
+ export interface LineSegment {
30
+ start: number;
31
+ end: number;
32
+ styleKey: string;
33
+ }
34
+ export interface LineLink {
35
+ start: number;
36
+ end: number;
37
+ url: string;
38
+ }
39
+ export interface StyledLine {
40
+ text: string;
41
+ styleKey: string;
42
+ segments?: LineSegment[];
43
+ links?: LineLink[];
44
+ }
45
+ export type ActivityPhase = 'idle' | 'submitting' | 'waiting_for_first_step' | 'streaming' | 'awaiting_prompt' | 'cancelling';
46
+ export type OverlayType = 'sessions' | 'widgets' | 'filePicker' | null;
47
+ export interface Layout {
48
+ width: number;
49
+ height: number;
50
+ inputY: number;
51
+ messagesY: number;
52
+ messagesHeight: number;
53
+ }
54
+ export interface PastedBlock {
55
+ id: number;
56
+ content: string;
57
+ lineCount: number;
58
+ }
59
+ export interface ToolCall {
60
+ name: string;
61
+ args?: Record<string, unknown>;
62
+ }
63
+ export interface Message {
64
+ id: string;
65
+ type: 'user' | 'agent' | 'tool' | 'status' | 'error';
66
+ content: string;
67
+ taskId?: string;
68
+ toolCalls?: ToolCall[] | null;
69
+ agentMessage?: string | null;
70
+ tokens?: {
71
+ input: number;
72
+ output: number;
73
+ } | null;
74
+ linkUrl?: string;
75
+ timestamp: number;
76
+ }
77
+ export interface TaskTokens {
78
+ input: number;
79
+ output: number;
80
+ cacheRead: number;
81
+ cacheCreate: number;
82
+ }
83
+ export interface Task {
84
+ id: string;
85
+ status: string;
86
+ prompt?: string;
87
+ initialPrompt?: string;
88
+ step?: number;
89
+ tokens?: TaskTokens;
90
+ updatedAt?: string;
91
+ }
92
+ export interface PromptQuestion {
93
+ question: string;
94
+ header?: string;
95
+ options?: Array<{
96
+ label: string;
97
+ description?: string;
98
+ }>;
99
+ }
100
+ export interface PendingPrompt {
101
+ taskId: string;
102
+ promptId: string;
103
+ questions: PromptQuestion[];
104
+ currentQuestionIndex: number;
105
+ answers: Record<string, string>;
106
+ contextMessage?: string | null;
107
+ }
108
+ export interface Widget {
109
+ id: string;
110
+ title: string;
111
+ width?: number;
112
+ }
113
+ export interface FilePickerEntry {
114
+ name: string;
115
+ path: string;
116
+ isDirectory: boolean;
117
+ size: number;
118
+ }
119
+ export interface AppState {
120
+ input: string;
121
+ cursor: number;
122
+ pastedBlocks: PastedBlock[];
123
+ nextPasteId: number;
124
+ connected: boolean;
125
+ serverUrl: string;
126
+ clientId: string | null;
127
+ serverStatus: unknown;
128
+ messages: Message[];
129
+ streamBuffer: string;
130
+ tasksLoaded: boolean;
131
+ tasks: Task[];
132
+ currentTaskId: string | null;
133
+ submitting: boolean;
134
+ activityPhase: ActivityPhase;
135
+ pendingPrompt: PendingPrompt | null;
136
+ promptPickerIndex: number;
137
+ promptPickerPage: number;
138
+ promptFreeInput: boolean;
139
+ promptInputText: string;
140
+ promptInputCursor: number;
141
+ scrollOffset: number;
142
+ isPinned: boolean;
143
+ showWelcome: boolean;
144
+ dirty: boolean;
145
+ forceFullRedraw: boolean;
146
+ statusMessage: string | null;
147
+ pendingEscapeClear: boolean;
148
+ overlay: OverlayType;
149
+ sessionPickerIndex: number;
150
+ sessionPickerPage: number;
151
+ filePickerDir: string | null;
152
+ filePickerIndex: number;
153
+ filePickerScroll: number;
154
+ filePickerSelected: Set<string>;
155
+ filePickerEntries: FilePickerEntry[];
156
+ filePickerError: string | null;
157
+ attachedFiles: Array<{
158
+ name: string;
159
+ base64?: string;
160
+ mimeType?: string;
161
+ path?: string;
162
+ }>;
163
+ widgets: Widget[];
164
+ widgetsIndex: number;
165
+ widgetsPage: number;
166
+ widgetsLoaded: boolean;
167
+ authenticated: boolean;
168
+ authInProgress: boolean;
169
+ authMessage: string | null;
170
+ userName: string | null;
171
+ blinkVisible: boolean;
172
+ lastBlinkTime: number;
173
+ layout: Layout;
174
+ }
175
+ export interface KeyInfo {
176
+ name?: string;
177
+ ctrl?: boolean;
178
+ meta?: boolean;
179
+ shift?: boolean;
180
+ sequence?: string;
181
+ }
182
+ export interface KeyResult {
183
+ handled?: boolean;
184
+ action?: string;
185
+ text?: string;
186
+ response?: string;
187
+ taskId?: string;
188
+ files?: Array<{
189
+ name: string;
190
+ base64?: string;
191
+ mimeType?: string;
192
+ path?: string;
193
+ }>;
194
+ }
195
+ export type StyleMap = Record<string, number>;
196
+ export interface UIComponent {
197
+ height(state: AppState, layout?: Layout): number;
198
+ draw(screen: import('./screen.js').Screen, y: number, state: AppState, layout: Layout, styles: StyleMap): void;
199
+ handleKey(str: string | undefined, key: KeyInfo, state: AppState): KeyResult;
200
+ }
package/dist/types.js ADDED
@@ -0,0 +1,5 @@
1
+ /**
2
+ * Central type definitions for the client
3
+ */
4
+ export {};
5
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA;;GAEG"}
@@ -0,0 +1,7 @@
1
+ /**
2
+ * Widgets Component — full-screen draw() API
3
+ * Shows deployed interactive widgets and allows opening them in the browser
4
+ */
5
+ import type { UIComponent } from '../types.js';
6
+ declare const backgroundTasks: UIComponent;
7
+ export default backgroundTasks;