@faros-fde-sandbox/cli 2.1.0 → 2.2.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.
- package/README.md +101 -19
- package/lib/commands/logs.d.ts +3 -0
- package/lib/commands/logs.d.ts.map +1 -0
- package/lib/commands/logs.js +141 -0
- package/lib/commands/logs.js.map +1 -0
- package/lib/commands/sync/linear.d.ts.map +1 -1
- package/lib/commands/sync/linear.js +125 -24
- package/lib/commands/sync/linear.js.map +1 -1
- package/lib/config/loader.d.ts.map +1 -1
- package/lib/config/loader.js +4 -6
- package/lib/config/loader.js.map +1 -1
- package/lib/index.js +2 -0
- package/lib/index.js.map +1 -1
- package/lib/types/config.d.ts +12 -12
- package/lib/types/config.js +6 -6
- package/lib/types/config.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -13,6 +13,7 @@ CLI for Faros AI - sync test results, CI/CD events, and Linear data.
|
|
|
13
13
|
- [faros sync tests](#faros-sync-tests)
|
|
14
14
|
- [faros sync ci-cd](#faros-sync-ci-cd)
|
|
15
15
|
- [faros sync linear](#faros-sync-linear)
|
|
16
|
+
- [faros logs](#faros-logs)
|
|
16
17
|
- [Configuration](#configuration)
|
|
17
18
|
- [Environment Variables](#environment-variables)
|
|
18
19
|
- [Configuration File](#configuration-file)
|
|
@@ -145,29 +146,28 @@ faros sync linear [options]
|
|
|
145
146
|
|
|
146
147
|
**Configuration Priority:**
|
|
147
148
|
1. CLI options (`--linear-api-key`, `--cutoff-days`)
|
|
148
|
-
2. Environment variables (`LINEAR_API_KEY`, `FAROS_API_KEY`, `FAROS_GRAPH`)
|
|
149
|
+
2. Environment variables (`LINEAR_API_KEY`, `FAROS_API_KEY`, `FAROS_GRAPH`, `FAROS_ORIGIN`)
|
|
149
150
|
3. Config file (`faros.config.yaml`)
|
|
150
|
-
4.
|
|
151
|
+
4. Built-in defaults (ships with the CLI)
|
|
151
152
|
|
|
152
153
|
**Examples:**
|
|
153
154
|
|
|
154
|
-
|
|
155
|
+
Minimal setup - just create a `.env` file:
|
|
155
156
|
```bash
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
157
|
+
# .env
|
|
158
|
+
LINEAR_API_KEY=lin_api_xxx
|
|
159
|
+
FAROS_API_KEY=your_faros_key
|
|
159
160
|
```
|
|
160
161
|
|
|
161
|
-
Then run:
|
|
162
|
+
Then run (uses default config):
|
|
162
163
|
```bash
|
|
163
164
|
faros sync linear
|
|
164
165
|
```
|
|
165
166
|
|
|
166
|
-
|
|
167
|
+
Override defaults with your own `faros.config.yaml`:
|
|
167
168
|
```yaml
|
|
168
|
-
|
|
169
|
-
|
|
170
|
-
origin: my-company-ci
|
|
169
|
+
graph: production
|
|
170
|
+
origin: my-company
|
|
171
171
|
|
|
172
172
|
sources:
|
|
173
173
|
linear:
|
|
@@ -175,7 +175,10 @@ sources:
|
|
|
175
175
|
pageSize: 100 # Larger page size
|
|
176
176
|
```
|
|
177
177
|
|
|
178
|
-
**Note:**
|
|
178
|
+
**Security Note:**
|
|
179
|
+
- ✅ API keys go in `.env` file (auto-loaded, never commit)
|
|
180
|
+
- ✅ Config goes in `faros.config.yaml` (safe to commit)
|
|
181
|
+
- ❌ Never put API keys in `faros.config.yaml` (CLI strips them anyway)
|
|
179
182
|
|
|
180
183
|
Sync only recent issues (override config):
|
|
181
184
|
```bash
|
|
@@ -203,9 +206,83 @@ faros sync linear --preview
|
|
|
203
206
|
- The connector uses pagination to handle large datasets
|
|
204
207
|
- All timestamps and relationships are preserved
|
|
205
208
|
|
|
209
|
+
### `faros logs`
|
|
210
|
+
|
|
211
|
+
View and manage the CLI log file.
|
|
212
|
+
|
|
213
|
+
**Usage:**
|
|
214
|
+
```bash
|
|
215
|
+
faros logs [options]
|
|
216
|
+
```
|
|
217
|
+
|
|
218
|
+
**Options:**
|
|
219
|
+
- `-f, --tail` - Follow log file in real-time (like `tail -f`)
|
|
220
|
+
- `-n, --lines <count>` - Show last n lines
|
|
221
|
+
- `--clear` - Clear the log file
|
|
222
|
+
- `--path` - Show log file path
|
|
223
|
+
|
|
224
|
+
**Examples:**
|
|
225
|
+
|
|
226
|
+
View entire log file:
|
|
227
|
+
```bash
|
|
228
|
+
faros logs
|
|
229
|
+
```
|
|
230
|
+
|
|
231
|
+
Follow log file in real-time:
|
|
232
|
+
```bash
|
|
233
|
+
faros logs --tail
|
|
234
|
+
```
|
|
235
|
+
|
|
236
|
+
Show last 100 lines:
|
|
237
|
+
```bash
|
|
238
|
+
faros logs --lines 100
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
Clear the log file:
|
|
242
|
+
```bash
|
|
243
|
+
faros logs --clear
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
Show log file path:
|
|
247
|
+
```bash
|
|
248
|
+
faros logs --path
|
|
249
|
+
```
|
|
250
|
+
|
|
251
|
+
**Log File Location:**
|
|
252
|
+
- Logs are written to `./faros.log` in the working directory
|
|
253
|
+
- Log file is created automatically on first CLI operation
|
|
254
|
+
- Use `faros logs --clear` to clean up old logs
|
|
255
|
+
|
|
256
|
+
**Log Format:**
|
|
257
|
+
- JSON format (one entry per line)
|
|
258
|
+
- Includes timestamp, level, process ID, and message
|
|
259
|
+
- Credentials are automatically redacted
|
|
260
|
+
|
|
206
261
|
## Configuration
|
|
207
262
|
|
|
208
|
-
The CLI
|
|
263
|
+
The CLI ships with sensible defaults in `faros.config.yaml`, so most users only need to set up a `.env` file with their API keys.
|
|
264
|
+
|
|
265
|
+
**Quick Setup:**
|
|
266
|
+
1. Create a `.env` file with your API keys:
|
|
267
|
+
```
|
|
268
|
+
FAROS_API_KEY=your_faros_api_key
|
|
269
|
+
LINEAR_API_KEY=your_linear_api_key # if using Linear sync
|
|
270
|
+
```
|
|
271
|
+
2. Run CLI commands - the default config handles the rest!
|
|
272
|
+
|
|
273
|
+
### Two-File Configuration Approach
|
|
274
|
+
|
|
275
|
+
The CLI separates configuration into two types:
|
|
276
|
+
- **`.env` file** - Secrets and API keys (never commit this!)
|
|
277
|
+
- **`faros.config.yaml`** - Non-sensitive defaults (safe to commit)
|
|
278
|
+
|
|
279
|
+
A default `faros.config.yaml` is included with sensible defaults:
|
|
280
|
+
- API URL: `https://prod.api.faros.ai`
|
|
281
|
+
- Graph: `default`
|
|
282
|
+
- Origin: `faros-cli`
|
|
283
|
+
- Linear cutoff: 180 days
|
|
284
|
+
|
|
285
|
+
You can override these by creating your own `faros.config.yaml` or using environment variables.
|
|
209
286
|
|
|
210
287
|
### Environment Variables
|
|
211
288
|
|
|
@@ -224,7 +301,7 @@ The CLI can be configured entirely through environment variables, which is ideal
|
|
|
224
301
|
|----------|-------------|---------|---------|
|
|
225
302
|
| `FAROS_URL` | Faros API URL | `https://prod.api.faros.ai` | `https://prod.api.faros.ai` |
|
|
226
303
|
| `FAROS_GRAPH` | Target graph name | `default` | `my-graph` |
|
|
227
|
-
| `FAROS_ORIGIN` | Origin identifier for synced data | - | `my-company-ci` |
|
|
304
|
+
| `FAROS_ORIGIN` | Origin identifier for synced data | `faros-cli` | `my-company-ci` |
|
|
228
305
|
|
|
229
306
|
#### Logging and Debug
|
|
230
307
|
|
|
@@ -235,13 +312,18 @@ The CLI can be configured entirely through environment variables, which is ideal
|
|
|
235
312
|
|
|
236
313
|
### Configuration File
|
|
237
314
|
|
|
238
|
-
|
|
315
|
+
The CLI ships with a default `faros.config.yaml` that works out of the box. You can override it by creating your own `faros.config.yaml` in your project:
|
|
239
316
|
|
|
240
317
|
```yaml
|
|
241
|
-
#
|
|
318
|
+
# Override API configuration (optional)
|
|
242
319
|
url: https://prod.api.faros.ai
|
|
243
|
-
graph:
|
|
244
|
-
origin: my-company-ci
|
|
320
|
+
graph: production # use a different graph
|
|
321
|
+
origin: my-company-ci # custom origin identifier
|
|
322
|
+
|
|
323
|
+
# Customize Linear sync defaults
|
|
324
|
+
sources:
|
|
325
|
+
linear:
|
|
326
|
+
cutoffDays: 30 # fetch last 30 days instead of default 180
|
|
245
327
|
|
|
246
328
|
# Default values for commands
|
|
247
329
|
defaults:
|
|
@@ -250,7 +332,7 @@ defaults:
|
|
|
250
332
|
concurrency: 8
|
|
251
333
|
```
|
|
252
334
|
|
|
253
|
-
|
|
335
|
+
**Important:** Never put API keys in `faros.config.yaml`! The CLI automatically strips any credentials from config files. All secrets must be in `.env` or environment variables.
|
|
254
336
|
|
|
255
337
|
### Configuration Priority
|
|
256
338
|
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.d.ts","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAwDpC,wBAAgB,WAAW,IAAI,OAAO,CA2DrC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
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
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
36
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
37
|
+
};
|
|
38
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
39
|
+
exports.logsCommand = logsCommand;
|
|
40
|
+
const commander_1 = require("commander");
|
|
41
|
+
const fs = __importStar(require("fs"));
|
|
42
|
+
const path = __importStar(require("path"));
|
|
43
|
+
const chalk_1 = __importDefault(require("chalk"));
|
|
44
|
+
function getLogPath() {
|
|
45
|
+
return path.join(process.cwd(), 'faros.log');
|
|
46
|
+
}
|
|
47
|
+
function showLastLines(filePath, lineCount) {
|
|
48
|
+
const content = fs.readFileSync(filePath, 'utf-8');
|
|
49
|
+
const lines = content.split('\n');
|
|
50
|
+
const lastLines = lines.slice(-lineCount);
|
|
51
|
+
console.log(lastLines.join('\n'));
|
|
52
|
+
}
|
|
53
|
+
function tailLogFile(filePath) {
|
|
54
|
+
console.log(chalk_1.default.dim(`Following ${filePath}... (Ctrl+C to stop)`));
|
|
55
|
+
console.log();
|
|
56
|
+
// Show last 10 lines initially
|
|
57
|
+
if (fs.existsSync(filePath) && fs.statSync(filePath).size > 0) {
|
|
58
|
+
showLastLines(filePath, 10);
|
|
59
|
+
}
|
|
60
|
+
let lastSize = fs.existsSync(filePath) ? fs.statSync(filePath).size : 0;
|
|
61
|
+
const interval = setInterval(() => {
|
|
62
|
+
if (!fs.existsSync(filePath)) {
|
|
63
|
+
return;
|
|
64
|
+
}
|
|
65
|
+
const stats = fs.statSync(filePath);
|
|
66
|
+
if (stats.size > lastSize) {
|
|
67
|
+
const stream = fs.createReadStream(filePath, {
|
|
68
|
+
start: lastSize,
|
|
69
|
+
end: stats.size,
|
|
70
|
+
});
|
|
71
|
+
stream.on('data', (chunk) => {
|
|
72
|
+
process.stdout.write(chunk.toString());
|
|
73
|
+
});
|
|
74
|
+
lastSize = stats.size;
|
|
75
|
+
}
|
|
76
|
+
}, 500);
|
|
77
|
+
// Handle Ctrl+C gracefully
|
|
78
|
+
process.on('SIGINT', () => {
|
|
79
|
+
clearInterval(interval);
|
|
80
|
+
console.log();
|
|
81
|
+
console.log(chalk_1.default.dim('Stopped following log file'));
|
|
82
|
+
process.exit(0);
|
|
83
|
+
});
|
|
84
|
+
}
|
|
85
|
+
function logsCommand() {
|
|
86
|
+
const cmd = new commander_1.Command('logs');
|
|
87
|
+
cmd
|
|
88
|
+
.description('View or manage CLI log file')
|
|
89
|
+
.option('-f, --tail', 'Follow log file in real-time')
|
|
90
|
+
.option('-n, --lines <count>', 'Show last n lines', parseInt)
|
|
91
|
+
.option('--clear', 'Clear the log file')
|
|
92
|
+
.option('--path', 'Show log file path')
|
|
93
|
+
.addHelpText('after', `
|
|
94
|
+
Examples:
|
|
95
|
+
$ faros logs # View entire log file
|
|
96
|
+
$ faros logs --tail # Follow log file in real-time
|
|
97
|
+
$ faros logs --lines 100 # Show last 100 lines
|
|
98
|
+
$ faros logs --clear # Clear the log file
|
|
99
|
+
$ faros logs --path # Show log file path
|
|
100
|
+
`)
|
|
101
|
+
.action(async (options) => {
|
|
102
|
+
const logPath = getLogPath();
|
|
103
|
+
if (options.path) {
|
|
104
|
+
console.log(logPath);
|
|
105
|
+
return;
|
|
106
|
+
}
|
|
107
|
+
if (options.clear) {
|
|
108
|
+
if (fs.existsSync(logPath)) {
|
|
109
|
+
fs.writeFileSync(logPath, '');
|
|
110
|
+
console.log(chalk_1.default.green('✔'), 'Log file cleared:', chalk_1.default.dim(logPath));
|
|
111
|
+
}
|
|
112
|
+
else {
|
|
113
|
+
console.log(chalk_1.default.yellow('⚠'), 'No log file found at', chalk_1.default.dim(logPath));
|
|
114
|
+
}
|
|
115
|
+
return;
|
|
116
|
+
}
|
|
117
|
+
if (!fs.existsSync(logPath)) {
|
|
118
|
+
console.log(chalk_1.default.yellow('⚠'), 'No log file found at', chalk_1.default.dim(logPath));
|
|
119
|
+
console.log();
|
|
120
|
+
console.log(chalk_1.default.dim('The log file will be created on the next sync operation.'));
|
|
121
|
+
return;
|
|
122
|
+
}
|
|
123
|
+
const stats = fs.statSync(logPath);
|
|
124
|
+
if (stats.size === 0) {
|
|
125
|
+
console.log(chalk_1.default.yellow('⚠'), 'Log file is empty:', chalk_1.default.dim(logPath));
|
|
126
|
+
return;
|
|
127
|
+
}
|
|
128
|
+
if (options.tail) {
|
|
129
|
+
tailLogFile(logPath);
|
|
130
|
+
}
|
|
131
|
+
else if (options.lines) {
|
|
132
|
+
showLastLines(logPath, options.lines);
|
|
133
|
+
}
|
|
134
|
+
else {
|
|
135
|
+
const content = fs.readFileSync(logPath, 'utf-8');
|
|
136
|
+
console.log(content);
|
|
137
|
+
}
|
|
138
|
+
});
|
|
139
|
+
return cmd;
|
|
140
|
+
}
|
|
141
|
+
//# sourceMappingURL=logs.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"logs.js","sourceRoot":"","sources":["../../src/commands/logs.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;
|
|
1
|
+
{"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAU,MAAM,WAAW,CAAC;AAyU5C,wBAAgB,iBAAiB,IAAI,OAAO,CAiE3C"}
|
|
@@ -45,20 +45,33 @@ const os = __importStar(require("os"));
|
|
|
45
45
|
const chalk_1 = __importDefault(require("chalk"));
|
|
46
46
|
const loader_1 = require("../../config/loader");
|
|
47
47
|
const ui_1 = require("../../lib/ui");
|
|
48
|
-
|
|
48
|
+
const client_1 = require("../../lib/api/client");
|
|
49
|
+
function createTempConfig(options, config, srcImage, dstImage) {
|
|
49
50
|
const tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'faros-linear-'));
|
|
50
51
|
const configPath = path.join(tempDir, 'faros_airbyte_cli_config.json');
|
|
52
|
+
// Build source config with date filtering
|
|
53
|
+
const srcConfig = {
|
|
54
|
+
api_key: options.linearApiKey || '',
|
|
55
|
+
page_size: options.pageSize,
|
|
56
|
+
};
|
|
57
|
+
// Date filtering: use startDate/endDate if provided, otherwise use cutoffDays
|
|
58
|
+
if (options.startDate) {
|
|
59
|
+
srcConfig.start_date = options.startDate;
|
|
60
|
+
}
|
|
61
|
+
if (options.endDate) {
|
|
62
|
+
srcConfig.end_date = options.endDate;
|
|
63
|
+
}
|
|
64
|
+
// Only use cutoff_days if no explicit dates provided
|
|
65
|
+
if (!options.startDate && !options.endDate) {
|
|
66
|
+
srcConfig.cutoff_days = options.cutoffDays;
|
|
67
|
+
}
|
|
51
68
|
const airbyteConfig = {
|
|
52
69
|
src: {
|
|
53
|
-
image:
|
|
54
|
-
config:
|
|
55
|
-
api_key: options.linearApiKey || '',
|
|
56
|
-
cutoff_days: options.cutoffDays || 90,
|
|
57
|
-
page_size: options.pageSize || 50,
|
|
58
|
-
},
|
|
70
|
+
image: srcImage,
|
|
71
|
+
config: srcConfig,
|
|
59
72
|
},
|
|
60
73
|
dst: {
|
|
61
|
-
image:
|
|
74
|
+
image: dstImage,
|
|
62
75
|
config: {
|
|
63
76
|
edition_configs: {
|
|
64
77
|
api_key: config.apiKey,
|
|
@@ -106,6 +119,34 @@ async function runAirbyteSync(configPath) {
|
|
|
106
119
|
});
|
|
107
120
|
});
|
|
108
121
|
}
|
|
122
|
+
async function querySyncStats(apiKey, url, graph, origin) {
|
|
123
|
+
const config = { apiKey, url, graph, origin };
|
|
124
|
+
const client = (0, client_1.createClient)(config);
|
|
125
|
+
const query = `
|
|
126
|
+
query {
|
|
127
|
+
tms_Task_aggregate(where: {source: {_eq: "Linear"}}) {
|
|
128
|
+
aggregate { count }
|
|
129
|
+
}
|
|
130
|
+
tms_Project_aggregate(where: {source: {_eq: "Linear"}}) {
|
|
131
|
+
aggregate { count }
|
|
132
|
+
}
|
|
133
|
+
tms_TaskBoard_aggregate(where: {source: {_eq: "Linear"}}) {
|
|
134
|
+
aggregate { count }
|
|
135
|
+
}
|
|
136
|
+
tms_User_aggregate(where: {source: {_eq: "Linear"}}) {
|
|
137
|
+
aggregate { count }
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
`;
|
|
141
|
+
const response = await client.post(`/graphs/${graph}/graphql`, { query });
|
|
142
|
+
const data = response.data.data;
|
|
143
|
+
return {
|
|
144
|
+
tasks: data.tms_Task_aggregate.aggregate.count,
|
|
145
|
+
projects: data.tms_Project_aggregate.aggregate.count,
|
|
146
|
+
taskBoards: data.tms_TaskBoard_aggregate.aggregate.count,
|
|
147
|
+
users: data.tms_User_aggregate.aggregate.count,
|
|
148
|
+
};
|
|
149
|
+
}
|
|
109
150
|
async function syncLinearData(options) {
|
|
110
151
|
const fileConfig = await (0, loader_1.loadConfig)();
|
|
111
152
|
const config = (0, loader_1.mergeConfig)(fileConfig, options);
|
|
@@ -123,22 +164,50 @@ async function syncLinearData(options) {
|
|
|
123
164
|
if (!config.origin) {
|
|
124
165
|
throw new Error('Origin is required. Set FAROS_ORIGIN environment variable or configure in faros.config.yaml.');
|
|
125
166
|
}
|
|
126
|
-
// Get
|
|
167
|
+
// Get date filtering options from CLI or config file
|
|
127
168
|
const linearSource = config.sources?.linear;
|
|
128
|
-
const cutoffDays = options.cutoffDays || linearSource?.cutoffDays
|
|
129
|
-
const
|
|
169
|
+
const cutoffDays = options.cutoffDays || linearSource?.cutoffDays;
|
|
170
|
+
const startDate = options.startDate || linearSource?.startDate;
|
|
171
|
+
const endDate = options.endDate || linearSource?.endDate;
|
|
172
|
+
const pageSize = options.pageSize || linearSource?.pageSize;
|
|
173
|
+
// Get Docker images from config
|
|
174
|
+
const srcImage = linearSource?.srcImage;
|
|
175
|
+
const dstImage = linearSource?.dstImage;
|
|
176
|
+
// Validate required Linear source configuration
|
|
177
|
+
if (!linearSource) {
|
|
178
|
+
throw new Error('Linear source configuration not found in faros.config.yaml. Add a "sources.linear" section.');
|
|
179
|
+
}
|
|
180
|
+
if (!pageSize) {
|
|
181
|
+
throw new Error('Linear pageSize is required. Set in faros.config.yaml under sources.linear.pageSize or use --page-size.');
|
|
182
|
+
}
|
|
183
|
+
if (!srcImage) {
|
|
184
|
+
throw new Error('Linear srcImage is required. Set in faros.config.yaml under sources.linear.srcImage (e.g., farosfde/airbyte-linear-source:1.0.1).');
|
|
185
|
+
}
|
|
186
|
+
if (!dstImage) {
|
|
187
|
+
throw new Error('Linear dstImage is required. Set in faros.config.yaml under sources.linear.dstImage (e.g., farosfde/airbyte-faros-destination:1.0.1).');
|
|
188
|
+
}
|
|
189
|
+
// Require either date range OR cutoffDays
|
|
190
|
+
if (!startDate && !endDate && !cutoffDays) {
|
|
191
|
+
throw new Error('Linear date filtering is required. Set cutoffDays in faros.config.yaml or use --cutoff-days / --start-date.');
|
|
192
|
+
}
|
|
130
193
|
// Preview mode
|
|
131
194
|
if (options.preview) {
|
|
132
195
|
console.log();
|
|
133
196
|
console.log(chalk_1.default.bold('Linear Sync Configuration:'));
|
|
134
197
|
console.log();
|
|
135
198
|
console.log(chalk_1.default.blue('Source:'));
|
|
136
|
-
console.log(` Image:
|
|
137
|
-
|
|
199
|
+
console.log(` Image: ${srcImage}`);
|
|
200
|
+
// Show date filtering method
|
|
201
|
+
if (startDate || endDate) {
|
|
202
|
+
console.log(` Date Range: ${startDate || '(beginning)'} to ${endDate || '(now)'}`);
|
|
203
|
+
}
|
|
204
|
+
else {
|
|
205
|
+
console.log(` Cutoff Days: ${cutoffDays}`);
|
|
206
|
+
}
|
|
138
207
|
console.log(` Page Size: ${pageSize}`);
|
|
139
208
|
console.log();
|
|
140
209
|
console.log(chalk_1.default.blue('Destination:'));
|
|
141
|
-
console.log(` Image:
|
|
210
|
+
console.log(` Image: ${dstImage}`);
|
|
142
211
|
console.log(` Graph: ${config.graph}`);
|
|
143
212
|
console.log(` URL: ${config.url}`);
|
|
144
213
|
console.log(` Origin: ${config.origin}`);
|
|
@@ -161,19 +230,46 @@ async function syncLinearData(options) {
|
|
|
161
230
|
...options,
|
|
162
231
|
linearApiKey,
|
|
163
232
|
cutoffDays,
|
|
233
|
+
startDate,
|
|
234
|
+
endDate,
|
|
164
235
|
pageSize,
|
|
165
236
|
};
|
|
166
|
-
configPath = createTempConfig(tempOptions, config);
|
|
237
|
+
configPath = createTempConfig(tempOptions, config, srcImage, dstImage);
|
|
167
238
|
spinner.succeed('Configuration prepared');
|
|
168
239
|
const syncSpinner = ui_1.ui.spinner('Syncing Linear data to Faros...');
|
|
169
240
|
syncSpinner.start();
|
|
170
241
|
// Run airbyte-local
|
|
171
242
|
await runAirbyteSync(configPath);
|
|
172
243
|
syncSpinner.succeed('Linear data synced successfully');
|
|
173
|
-
|
|
174
|
-
ui_1.ui.
|
|
175
|
-
|
|
176
|
-
|
|
244
|
+
// Query stats after sync
|
|
245
|
+
const statsSpinner = ui_1.ui.spinner('Fetching sync statistics...');
|
|
246
|
+
statsSpinner.start();
|
|
247
|
+
try {
|
|
248
|
+
const stats = await querySyncStats(config.apiKey, config.url, config.graph, config.origin);
|
|
249
|
+
statsSpinner.succeed('Statistics retrieved');
|
|
250
|
+
console.log();
|
|
251
|
+
ui_1.ui.log.success('Sync completed');
|
|
252
|
+
console.log();
|
|
253
|
+
console.log(chalk_1.default.bold('Records synced:'));
|
|
254
|
+
console.log(chalk_1.default.cyan(` • Tasks: ${stats.tasks.toLocaleString()}`));
|
|
255
|
+
console.log(chalk_1.default.cyan(` • Projects: ${stats.projects.toLocaleString()}`));
|
|
256
|
+
console.log(chalk_1.default.cyan(` • Task Boards: ${stats.taskBoards.toLocaleString()}`));
|
|
257
|
+
console.log(chalk_1.default.cyan(` • Users: ${stats.users.toLocaleString()}`));
|
|
258
|
+
console.log();
|
|
259
|
+
console.log(chalk_1.default.bold('Destination:'));
|
|
260
|
+
console.log(chalk_1.default.dim(` • Graph: ${config.graph}`));
|
|
261
|
+
console.log(chalk_1.default.dim(` • Origin: ${config.origin}`));
|
|
262
|
+
console.log(chalk_1.default.dim(` • View in UI: ${config.url.replace('/api', '')}/${config.graph}/tms`));
|
|
263
|
+
}
|
|
264
|
+
catch (error) {
|
|
265
|
+
statsSpinner.fail('Could not retrieve statistics');
|
|
266
|
+
ui_1.ui.log.warning(`Stats query failed: ${error.message}`);
|
|
267
|
+
// Fall back to basic success message
|
|
268
|
+
console.log();
|
|
269
|
+
ui_1.ui.log.success('Sync completed');
|
|
270
|
+
console.log(chalk_1.default.dim(` Graph: ${config.graph}`));
|
|
271
|
+
console.log(chalk_1.default.dim(` View in Faros: ${config.url.replace('/api', '')}/${config.graph}/tms`));
|
|
272
|
+
}
|
|
177
273
|
}
|
|
178
274
|
catch (error) {
|
|
179
275
|
// Try to fail spinner if it's still running
|
|
@@ -209,6 +305,8 @@ function syncLinearCommand() {
|
|
|
209
305
|
.description('Sync Linear issues, projects, teams, and users to Faros')
|
|
210
306
|
.option('--linear-api-key <key>', 'Linear API key (or set LINEAR_API_KEY env var)')
|
|
211
307
|
.option('--cutoff-days <days>', 'Fetch issues updated in the last N days', parseInt)
|
|
308
|
+
.option('--start-date <date>', 'Start date for fetching data (YYYY-MM-DD format)')
|
|
309
|
+
.option('--end-date <date>', 'End date for fetching data (YYYY-MM-DD format)')
|
|
212
310
|
.option('--page-size <size>', 'Number of records per API call (1-250)', parseInt)
|
|
213
311
|
.option('--preview', 'Show sync configuration without executing')
|
|
214
312
|
.addHelpText('after', `
|
|
@@ -223,24 +321,27 @@ Examples:
|
|
|
223
321
|
# Sync only recent issues (last 30 days)
|
|
224
322
|
$ faros sync linear --cutoff-days 30
|
|
225
323
|
|
|
324
|
+
# Or use explicit date range
|
|
325
|
+
$ faros sync linear --start-date 2024-01-01 --end-date 2024-12-31
|
|
326
|
+
|
|
226
327
|
# Preview configuration before syncing
|
|
227
328
|
$ faros sync linear --preview
|
|
228
329
|
|
|
229
330
|
Configuration:
|
|
331
|
+
Requires faros.config.yaml with Linear source configuration.
|
|
230
332
|
The command reads configuration from multiple sources (in order of precedence):
|
|
231
333
|
1. CLI options (--linear-api-key, --cutoff-days, etc.)
|
|
232
334
|
2. Environment variables (LINEAR_API_KEY, FAROS_API_KEY, FAROS_GRAPH)
|
|
233
|
-
3. Config file (faros.config.yaml)
|
|
234
|
-
4. Defaults (cutoff-days: 90, page-size: 50)
|
|
335
|
+
3. Config file (faros.config.yaml) - required
|
|
235
336
|
|
|
236
337
|
Example faros.config.yaml:
|
|
237
338
|
url: https://prod.api.faros.ai
|
|
238
339
|
graph: default
|
|
239
|
-
origin:
|
|
340
|
+
origin: faros-cli
|
|
240
341
|
sources:
|
|
241
342
|
linear:
|
|
242
|
-
cutoffDays:
|
|
243
|
-
pageSize:
|
|
343
|
+
cutoffDays: 180 # required: days to look back
|
|
344
|
+
pageSize: 50 # required: records per API call
|
|
244
345
|
|
|
245
346
|
Notes:
|
|
246
347
|
- Linear API key can be generated at https://linear.app/settings/api
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/commands/sync/linear.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
|
|
1
|
+
{"version":3,"file":"linear.js","sourceRoot":"","sources":["../../../src/commands/sync/linear.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAkCvD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBzD;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,GAAG,EACf,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,
|
|
1
|
+
{"version":3,"file":"loader.d.ts","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"AACA,OAAO,EAAgB,MAAM,EAAE,MAAM,iBAAiB,CAAC;AAkCvD,wBAAsB,UAAU,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAwBzD;AAED,wBAAgB,WAAW,CACzB,UAAU,EAAE,MAAM,GAAG,IAAI,EACzB,UAAU,EAAE,GAAG,EACf,OAAO,GAAE,MAAM,CAAC,UAAwB,GACvC,MAAM,CAiDR"}
|
package/lib/config/loader.js
CHANGED
|
@@ -92,13 +92,11 @@ async function loadConfig() {
|
|
|
92
92
|
}
|
|
93
93
|
}
|
|
94
94
|
function mergeConfig(fileConfig, cliOptions, envVars = process.env) {
|
|
95
|
+
if (!fileConfig) {
|
|
96
|
+
throw new Error('Configuration file not found. Please create a faros.config.yaml file. ' +
|
|
97
|
+
'See https://github.com/faros-fde/faros-cli for configuration template.');
|
|
98
|
+
}
|
|
95
99
|
const merged = {
|
|
96
|
-
url: 'https://prod.api.faros.ai',
|
|
97
|
-
graph: 'default',
|
|
98
|
-
origin: 'faros-cli',
|
|
99
|
-
defaults: {
|
|
100
|
-
concurrency: 8,
|
|
101
|
-
},
|
|
102
100
|
...fileConfig,
|
|
103
101
|
};
|
|
104
102
|
// Strip any credentials that may have been placed in the config file.
|
package/lib/config/loader.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmCA,gCAwBC;AAED,
|
|
1
|
+
{"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
|
package/lib/index.js
CHANGED
|
@@ -8,6 +8,7 @@ const commander_1 = require("commander");
|
|
|
8
8
|
const chalk_1 = __importDefault(require("chalk"));
|
|
9
9
|
const update_notifier_1 = __importDefault(require("update-notifier"));
|
|
10
10
|
const sync_1 = require("./commands/sync");
|
|
11
|
+
const logs_1 = require("./commands/logs");
|
|
11
12
|
const ui_1 = require("./lib/ui");
|
|
12
13
|
const logger_1 = require("./lib/logger");
|
|
13
14
|
const fs_1 = require("fs");
|
|
@@ -59,6 +60,7 @@ ${chalk_1.default.bold('Support:')} https://community.faros.ai
|
|
|
59
60
|
log.info({ version: pkg.version, argv: process.argv.slice(2) }, 'faros-cli started');
|
|
60
61
|
// Register commands
|
|
61
62
|
program.addCommand((0, sync_1.syncCommand)());
|
|
63
|
+
program.addCommand((0, logs_1.logsCommand)());
|
|
62
64
|
// Parse arguments
|
|
63
65
|
await program.parseAsync(process.argv);
|
|
64
66
|
}
|
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
package/lib/types/config.d.ts
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { z } from 'zod';
|
|
2
2
|
export declare const ConfigSchema: z.ZodObject<{
|
|
3
|
-
url: z.
|
|
4
|
-
graph: z.
|
|
5
|
-
origin: z.
|
|
3
|
+
url: z.ZodString;
|
|
4
|
+
graph: z.ZodString;
|
|
5
|
+
origin: z.ZodString;
|
|
6
6
|
apiKey: z.ZodOptional<z.ZodString>;
|
|
7
7
|
sources: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
|
|
8
8
|
type: z.ZodOptional<z.ZodString>;
|
|
@@ -53,22 +53,22 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
53
53
|
defaults: z.ZodOptional<z.ZodObject<{
|
|
54
54
|
testSource: z.ZodOptional<z.ZodString>;
|
|
55
55
|
testType: z.ZodOptional<z.ZodString>;
|
|
56
|
-
concurrency: z.
|
|
56
|
+
concurrency: z.ZodOptional<z.ZodNumber>;
|
|
57
57
|
}, "strip", z.ZodTypeAny, {
|
|
58
|
-
concurrency: number;
|
|
59
58
|
testSource?: string | undefined;
|
|
60
59
|
testType?: string | undefined;
|
|
60
|
+
concurrency?: number | undefined;
|
|
61
61
|
}, {
|
|
62
62
|
testSource?: string | undefined;
|
|
63
63
|
testType?: string | undefined;
|
|
64
64
|
concurrency?: number | undefined;
|
|
65
65
|
}>>;
|
|
66
66
|
logs: z.ZodOptional<z.ZodObject<{
|
|
67
|
-
level: z.
|
|
67
|
+
level: z.ZodEnum<["debug", "info", "warn", "error"]>;
|
|
68
68
|
}, "strip", z.ZodTypeAny, {
|
|
69
69
|
level: "debug" | "info" | "warn" | "error";
|
|
70
70
|
}, {
|
|
71
|
-
level
|
|
71
|
+
level: "debug" | "info" | "warn" | "error";
|
|
72
72
|
}>>;
|
|
73
73
|
}, "strip", z.ZodTypeAny, {
|
|
74
74
|
url: string;
|
|
@@ -92,17 +92,17 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
92
92
|
connectionName?: string | undefined;
|
|
93
93
|
}> | null | undefined;
|
|
94
94
|
defaults?: {
|
|
95
|
-
concurrency: number;
|
|
96
95
|
testSource?: string | undefined;
|
|
97
96
|
testType?: string | undefined;
|
|
97
|
+
concurrency?: number | undefined;
|
|
98
98
|
} | undefined;
|
|
99
99
|
logs?: {
|
|
100
100
|
level: "debug" | "info" | "warn" | "error";
|
|
101
101
|
} | undefined;
|
|
102
102
|
}, {
|
|
103
|
-
url
|
|
104
|
-
graph
|
|
105
|
-
origin
|
|
103
|
+
url: string;
|
|
104
|
+
graph: string;
|
|
105
|
+
origin: string;
|
|
106
106
|
apiKey?: string | undefined;
|
|
107
107
|
sources?: Record<string, {
|
|
108
108
|
type?: string | undefined;
|
|
@@ -126,7 +126,7 @@ export declare const ConfigSchema: z.ZodObject<{
|
|
|
126
126
|
concurrency?: number | undefined;
|
|
127
127
|
} | undefined;
|
|
128
128
|
logs?: {
|
|
129
|
-
level
|
|
129
|
+
level: "debug" | "info" | "warn" | "error";
|
|
130
130
|
} | undefined;
|
|
131
131
|
}>;
|
|
132
132
|
export type Config = z.infer<typeof ConfigSchema>;
|
package/lib/types/config.js
CHANGED
|
@@ -5,10 +5,10 @@ const zod_1 = require("zod");
|
|
|
5
5
|
// Config schema
|
|
6
6
|
// NOTE: All credentials (API keys, tokens) MUST be in .env or env vars, NOT in config files.
|
|
7
7
|
exports.ConfigSchema = zod_1.z.object({
|
|
8
|
-
// API Configuration (
|
|
9
|
-
url: zod_1.z.string().url()
|
|
10
|
-
graph: zod_1.z.string()
|
|
11
|
-
origin: zod_1.z.string()
|
|
8
|
+
// API Configuration (required in config file)
|
|
9
|
+
url: zod_1.z.string().url(),
|
|
10
|
+
graph: zod_1.z.string(),
|
|
11
|
+
origin: zod_1.z.string(),
|
|
12
12
|
// Credentials - populated at runtime from env vars / CLI flags only.
|
|
13
13
|
// Not read from config file. Set FAROS_API_KEY in .env or environment.
|
|
14
14
|
apiKey: zod_1.z.string().optional(),
|
|
@@ -37,11 +37,11 @@ exports.ConfigSchema = zod_1.z.object({
|
|
|
37
37
|
defaults: zod_1.z.object({
|
|
38
38
|
testSource: zod_1.z.string().optional(),
|
|
39
39
|
testType: zod_1.z.string().optional(),
|
|
40
|
-
concurrency: zod_1.z.number().
|
|
40
|
+
concurrency: zod_1.z.number().optional(),
|
|
41
41
|
}).optional(),
|
|
42
42
|
// Logging
|
|
43
43
|
logs: zod_1.z.object({
|
|
44
|
-
level: zod_1.z.enum(['debug', 'info', 'warn', 'error'])
|
|
44
|
+
level: zod_1.z.enum(['debug', 'info', 'warn', 'error']),
|
|
45
45
|
}).optional(),
|
|
46
46
|
});
|
|
47
47
|
//# sourceMappingURL=config.js.map
|
package/lib/types/config.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gBAAgB;AAChB,6FAA6F;AAChF,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,
|
|
1
|
+
{"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gBAAgB;AAChB,6FAA6F;AAChF,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,8CAA8C;IAC9C,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE;IACrB,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE;IACjB,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE;IAElB,qEAAqE;IACrE,uEAAuE;IACvE,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IAE7B,eAAe;IACf,iFAAiF;IACjF,OAAO,EAAE,OAAC,CAAC,MAAM,CAAC,OAAC,CAAC,MAAM,CAAC;QACzB,IAAI,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC3B,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,iBAAiB;QAChD,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,YAAY;QAC3C,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,aAAa;QAC7C,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACnC,OAAO,EAAE,OAAC,CAAC,KAAK,CAAC,OAAC,CAAC,MAAM,EAAE,CAAC,CAAC,QAAQ,EAAE;QACvC,2BAA2B;QAC3B,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,OAAO,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC9B,yBAAyB;QACzB,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,sBAAsB;QACtB,cAAc,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACtC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE;IAEzB,WAAW;IACX,QAAQ,EAAE,OAAC,CAAC,MAAM,CAAC;QACjB,UAAU,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QACjC,QAAQ,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAC/B,WAAW,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACnC,CAAC,CAAC,QAAQ,EAAE;IAEb,UAAU;IACV,IAAI,EAAE,OAAC,CAAC,MAAM,CAAC;QACb,KAAK,EAAE,OAAC,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,CAAC;KAClD,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
|