@faros-fde-sandbox/cli 1.0.2 → 1.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.
package/README.md CHANGED
@@ -1,5 +1,7 @@
1
1
  # Faros CLI
2
2
 
3
+ [![npm version](https://badge.fury.io/js/@faros-fde-sandbox%2Fcli.svg)](https://www.npmjs.com/package/@faros-fde-sandbox/cli)
4
+
3
5
  CLI for Faros AI - sync data, manage sources, view logs.
4
6
 
5
7
  ## Installation
@@ -411,6 +413,10 @@ npm test
411
413
  npm run lint
412
414
  ```
413
415
 
416
+ ### Publishing
417
+
418
+ See [PUBLISHING.md](PUBLISHING.md) for instructions on publishing new versions to npm.
419
+
414
420
  ## License
415
421
 
416
422
  Apache-2.0
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/logs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA0HpC,wBAAgB,WAAW,IAAI,OAAO,CA2BrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/logs/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6FpC,wBAAgB,WAAW,IAAI,OAAO,CA0BrC"}
@@ -40,113 +40,92 @@ exports.logsCommand = logsCommand;
40
40
  const commander_1 = require("commander");
41
41
  const chalk_1 = __importDefault(require("chalk"));
42
42
  const fs = __importStar(require("fs"));
43
- const path = __importStar(require("path"));
44
- const os = __importStar(require("os"));
45
43
  const ui_1 = require("../../lib/ui");
46
- function getLogsDirectory() {
47
- return path.join(os.homedir(), '.faros', 'logs');
44
+ const logger_1 = require("../../lib/logger");
45
+ // pino numeric levels -> names
46
+ const LEVEL_NAMES = {
47
+ 10: 'trace', 20: 'debug', 30: 'info', 40: 'warn', 50: 'error', 60: 'fatal',
48
+ };
49
+ function levelName(level) {
50
+ if (typeof level === 'number')
51
+ return LEVEL_NAMES[level] ?? String(level);
52
+ return String(level);
48
53
  }
49
- function readLogs(options) {
50
- const logsDir = getLogsDirectory();
51
- if (!fs.existsSync(logsDir)) {
52
- return [];
54
+ function formatLevel(level) {
55
+ switch (level) {
56
+ case 'info': return chalk_1.default.blue('INFO ');
57
+ case 'warn': return chalk_1.default.yellow('WARN ');
58
+ case 'error': return chalk_1.default.red('ERROR');
59
+ case 'fatal': return chalk_1.default.red.bold('FATAL');
60
+ case 'debug': return chalk_1.default.dim('DEBUG');
61
+ case 'trace': return chalk_1.default.dim('TRACE');
62
+ default: return level.toUpperCase().padEnd(5);
53
63
  }
54
- const logFiles = fs.readdirSync(logsDir)
55
- .filter(f => f.endsWith('.log'))
56
- .sort()
57
- .reverse();
58
- const logs = [];
59
- for (const file of logFiles.slice(0, 10)) { // Last 10 log files
60
- const content = fs.readFileSync(path.join(logsDir, file), 'utf-8');
61
- const lines = content.split('\n').filter(l => l.trim());
62
- for (const line of lines) {
63
- try {
64
- const entry = JSON.parse(line);
65
- logs.push({
66
- timestamp: entry.time || entry.timestamp,
67
- level: entry.level,
68
- source: entry.source,
69
- message: entry.msg || entry.message,
70
- });
71
- }
72
- catch {
73
- // Skip invalid lines
74
- }
75
- }
76
- }
77
- return logs;
78
64
  }
79
- function formatLogLevel(level) {
80
- switch (level.toLowerCase()) {
81
- case 'info':
82
- return chalk_1.default.blue('INFO');
83
- case 'warn':
84
- case 'warning':
85
- return chalk_1.default.yellow('WARN');
86
- case 'error':
87
- return chalk_1.default.red('ERROR');
88
- case 'debug':
89
- return chalk_1.default.dim('DEBUG');
90
- default:
91
- return level.toUpperCase();
65
+ function readLogFile() {
66
+ if (!fs.existsSync(logger_1.LOG_FILE_PATH))
67
+ return [];
68
+ const lines = fs.readFileSync(logger_1.LOG_FILE_PATH, 'utf-8').split('\n').filter(Boolean);
69
+ const entries = [];
70
+ for (const line of lines) {
71
+ try {
72
+ const raw = JSON.parse(line);
73
+ entries.push({
74
+ time: raw.time ?? raw.timestamp ?? '',
75
+ level: levelName(raw.level),
76
+ source: raw.source,
77
+ msg: raw.msg ?? raw.message ?? '',
78
+ ...raw,
79
+ });
80
+ }
81
+ catch { /* skip malformed lines */ }
92
82
  }
83
+ return entries;
93
84
  }
94
85
  async function viewLogs(options) {
95
- const logs = readLogs(options);
96
- if (logs.length === 0) {
86
+ let entries = readLogFile();
87
+ if (entries.length === 0) {
97
88
  ui_1.ui.log.info('No logs found');
98
- console.log(chalk_1.default.dim('Logs are stored in: ' + getLogsDirectory()));
89
+ console.log(chalk_1.default.dim(`Log file: ${logger_1.LOG_FILE_PATH}`));
99
90
  return;
100
91
  }
101
- // Filter by level
102
- let filteredLogs = logs;
103
92
  if (options.level) {
104
- filteredLogs = logs.filter(l => l.level === options.level);
93
+ entries = entries.filter(e => e.level === options.level.toLowerCase());
105
94
  }
106
- // Filter by time range
107
95
  if (options.since) {
108
- const sinceTime = new Date(options.since).getTime();
109
- filteredLogs = filteredLogs.filter(l => new Date(l.timestamp).getTime() >= sinceTime);
96
+ const t = new Date(options.since).getTime();
97
+ entries = entries.filter(e => new Date(e.time).getTime() >= t);
110
98
  }
111
99
  if (options.until) {
112
- const untilTime = new Date(options.until).getTime();
113
- filteredLogs = filteredLogs.filter(l => new Date(l.timestamp).getTime() <= untilTime);
114
- }
115
- // Output to file if requested
116
- if (options.outFile) {
117
- fs.writeFileSync(options.outFile, JSON.stringify(filteredLogs, null, 2));
118
- ui_1.ui.log.success(`Exported ${filteredLogs.length} log entries to ${options.outFile}`);
119
- return;
120
- }
121
- // Display logs
122
- console.log(chalk_1.default.bold(`\nRecent Logs (${filteredLogs.length} entries):\n`));
123
- const displayLogs = filteredLogs.slice(0, 100); // Limit to 100 for display
124
- for (const log of displayLogs) {
125
- const timestamp = new Date(log.timestamp).toLocaleString();
126
- const level = formatLogLevel(log.level);
127
- const source = log.source ? chalk_1.default.cyan(`[${log.source}]`) : '';
128
- console.log(`${chalk_1.default.dim(timestamp)} ${level} ${source} ${log.message}`);
100
+ const t = new Date(options.until).getTime();
101
+ entries = entries.filter(e => new Date(e.time).getTime() <= t);
129
102
  }
130
- if (filteredLogs.length > 100) {
131
- console.log(chalk_1.default.dim(`\n... and ${filteredLogs.length - 100} more entries`));
132
- console.log(chalk_1.default.dim('Use --out-file to export all logs'));
103
+ // Tail: show last N entries (default 50)
104
+ const tail = parseInt(options.tail, 10) || 50;
105
+ entries = entries.slice(-tail);
106
+ console.log(chalk_1.default.bold(`\nLogs (${entries.length} entries) — ${logger_1.LOG_FILE_PATH}\n`));
107
+ for (const e of entries) {
108
+ const ts = chalk_1.default.dim(e.time);
109
+ const lvl = formatLevel(e.level);
110
+ const src = e.source ? chalk_1.default.cyan(`[${e.source}]`) + ' ' : '';
111
+ console.log(`${ts} ${lvl} ${src}${e.msg}`);
133
112
  }
113
+ console.log();
134
114
  }
135
115
  function logsCommand() {
136
116
  const cmd = new commander_1.Command('logs');
137
117
  cmd
138
- .description('View sync logs and debug information')
139
- .option('--level <level>', 'Filter by log level (info, warn, error, debug)')
140
- .option('--since <time>', 'Show logs since time (ISO-8601)')
141
- .option('--until <time>', 'Show logs until time (ISO-8601)')
142
- .option('--out-file <path>', 'Export logs to file')
143
- .option('--follow', 'Follow logs in real-time (not yet implemented)')
118
+ .description('View faros.log in the current directory')
119
+ .option('--level <level>', 'Filter by level (debug, info, warn, error)')
120
+ .option('--since <time>', 'Show entries since (ISO-8601)')
121
+ .option('--until <time>', 'Show entries until (ISO-8601)')
122
+ .option('--tail <n>', 'Show last N entries', '50')
144
123
  .addHelpText('after', `
145
124
  Examples:
146
125
  $ faros logs
147
126
  $ faros logs --level error
148
- $ faros logs --since "2024-01-15T10:00:00Z"
149
- $ faros logs --out-file sync-logs.json
127
+ $ faros logs --tail 20
128
+ $ faros logs --since "2025-01-01"
150
129
  `)
151
130
  .action(async (options) => {
152
131
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/logs/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/logs/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA6EpC,wBAAgB,cAAc,IAAI,OAAO,CAwCxC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sources/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAiGpC,wBAAgB,cAAc,IAAI,OAAO,CAwCxC"}
@@ -8,8 +8,23 @@ const commander_1 = require("commander");
8
8
  const chalk_1 = __importDefault(require("chalk"));
9
9
  const loader_1 = require("../../config/loader");
10
10
  const ui_1 = require("../../lib/ui");
11
+ // Map source names to the env var that provides their credential
12
+ const SOURCE_CREDENTIAL_ENV = {
13
+ linear: 'LINEAR_API_KEY',
14
+ github: 'GITHUB_TOKEN',
15
+ };
16
+ function hasCredential(sourceName) {
17
+ const envVar = SOURCE_CREDENTIAL_ENV[sourceName];
18
+ return envVar ? !!process.env[envVar] : false;
19
+ }
20
+ function maskCredential(value) {
21
+ if (value.length <= 6)
22
+ return '***';
23
+ return `${value.substring(0, 6)}***`;
24
+ }
11
25
  async function listSources() {
12
- const config = await (0, loader_1.loadConfig)();
26
+ const fileConfig = await (0, loader_1.loadConfig)();
27
+ const config = (0, loader_1.mergeConfig)(fileConfig, {});
13
28
  if (!config || !config.sources || Object.keys(config.sources).length === 0) {
14
29
  ui_1.ui.log.info('No sources configured');
15
30
  console.log();
@@ -18,24 +33,30 @@ async function listSources() {
18
33
  return;
19
34
  }
20
35
  console.log(chalk_1.default.bold('\nConfigured Sources:\n'));
21
- const table = ui_1.ui.table(['Source', 'Type', 'Status', 'Config']);
36
+ const table = ui_1.ui.table(['Source', 'Type', 'Credentials', 'Status']);
22
37
  for (const [name, sourceConfig] of Object.entries(config.sources)) {
23
38
  const type = sourceConfig.type || 'Unknown';
24
- const hasAuth = sourceConfig.apiKey || sourceConfig.token ? ui_1.ui.success : chalk_1.default.yellow('⚠');
25
- const status = sourceConfig.apiKey || sourceConfig.token ? 'Configured' : 'Missing credentials';
39
+ const envVar = SOURCE_CREDENTIAL_ENV[name];
40
+ const hasCred = hasCredential(name);
41
+ const credIcon = hasCred ? ui_1.ui.success : chalk_1.default.yellow('⚠');
42
+ const status = hasCred
43
+ ? `${envVar} set`
44
+ : envVar ? `Set ${envVar} in .env` : 'N/A';
26
45
  table.push([
27
46
  name,
28
47
  type,
29
- hasAuth,
30
- status
48
+ credIcon,
49
+ status,
31
50
  ]);
32
51
  }
33
52
  console.log(table.toString());
34
53
  console.log();
54
+ console.log(chalk_1.default.dim('Credentials are read from environment variables / .env file'));
35
55
  console.log(chalk_1.default.dim('Run \'faros sources get <name>\' for details'));
36
56
  }
37
57
  async function getSource(name) {
38
- const config = await (0, loader_1.loadConfig)();
58
+ const fileConfig = await (0, loader_1.loadConfig)();
59
+ const config = (0, loader_1.mergeConfig)(fileConfig, {});
39
60
  if (!config || !config.sources || !config.sources[name]) {
40
61
  ui_1.ui.log.error(`Source '${name}' not found`);
41
62
  console.log(chalk_1.default.dim('Run \'faros sources list\' to see all sources'));
@@ -44,11 +65,16 @@ async function getSource(name) {
44
65
  const source = config.sources[name];
45
66
  console.log(chalk_1.default.bold(`\nSource: ${name}\n`));
46
67
  console.log(`Type: ${source.type || 'Unknown'}`);
47
- if (source.apiKey) {
48
- console.log(`API Key: ${source.apiKey.substring(0, 10)}***`);
49
- }
50
- if (source.token) {
51
- console.log(`Token: ${source.token.substring(0, 10)}***`);
68
+ // Show credential status from env vars
69
+ const envVar = SOURCE_CREDENTIAL_ENV[name];
70
+ if (envVar) {
71
+ const value = process.env[envVar];
72
+ if (value) {
73
+ console.log(`Credential: ${envVar} = ${maskCredential(value)}`);
74
+ }
75
+ else {
76
+ console.log(chalk_1.default.yellow(`Credential: ${envVar} not set (add to .env file)`));
77
+ }
52
78
  }
53
79
  if (source.syncInterval) {
54
80
  console.log(`Sync Interval: ${source.syncInterval}`);
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sources/index.ts"],"names":[],"mappings":";;;;;AA6EA,wCAwCC;AArHD,yCAAoC;AACpC,kDAA0B;AAC1B,gDAAiD;AACjD,qCAAkC;AASlC,KAAK,UAAU,WAAW;IACxB,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC3E,OAAE,CAAC,GAAG,CAAC,IAAI,CAAC,uBAAuB,CAAC,CAAC;QACrC,OAAO,CAAC,GAAG,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,gDAAgD,CAAC,CAAC,CAAC;QACzE,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC,CAAC,CAAC;QAC9C,OAAO;IACT,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,yBAAyB,CAAC,CAAC,CAAC;IAEnD,MAAM,KAAK,GAAG,OAAE,CAAC,KAAK,CAAC,CAAC,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAC;IAE/D,KAAK,MAAM,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,EAAE,CAAC;QAClE,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,IAAI,SAAS,CAAC;QAC5C,MAAM,OAAO,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,OAAE,CAAC,OAAO,CAAC,CAAC,CAAC,eAAK,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;QAC3F,MAAM,MAAM,GAAG,YAAY,CAAC,MAAM,IAAI,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,qBAAqB,CAAC;QAEhG,KAAK,CAAC,IAAI,CAAC;YACT,IAAI;YACJ,IAAI;YACJ,OAAO;YACP,MAAM;SACP,CAAC,CAAC;IACL,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC,CAAC;IAC9B,OAAO,CAAC,GAAG,EAAE,CAAC;IACd,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC,CAAC;AACzE,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,IAAY;IACnC,MAAM,MAAM,GAAG,MAAM,IAAA,mBAAU,GAAE,CAAC;IAElC,IAAI,CAAC,MAAM,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC;QACxD,OAAE,CAAC,GAAG,CAAC,KAAK,CAAC,WAAW,IAAI,aAAa,CAAC,CAAC;QAC3C,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,GAAG,CAAC,+CAA+C,CAAC,CAAC,CAAC;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAEpC,OAAO,CAAC,GAAG,CAAC,eAAK,CAAC,IAAI,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,CAAC;IAC/C,OAAO,CAAC,GAAG,CAAC,SAAS,MAAM,CAAC,IAAI,IAAI,SAAS,EAAE,CAAC,CAAC;IAEjD,IAAI,MAAM,CAAC,MAAM,EAAE,CAAC;QAClB,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC/D,CAAC;IACD,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;QACjB,OAAO,CAAC,GAAG,CAAC,UAAU,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CAAC,CAAC;IAC5D,CAAC;IAED,IAAI,MAAM,CAAC,YAAY,EAAE,CAAC;QACxB,OAAO,CAAC,GAAG,CAAC,kBAAkB,MAAM,CAAC,YAAY,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,IAAI,MAAM,CAAC,OAAO,IAAI,MAAM,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAChD,OAAO,CAAC,GAAG,CAAC,YAAY,MAAM,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;IACvD,CAAC;IAED,OAAO,CAAC,GAAG,EAAE,CAAC;AAChB,CAAC;AAED,SAAgB,cAAc;IAC5B,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,SAAS,CAAC,CAAC;IAEnC,GAAG;SACA,WAAW,CAAC,qBAAqB,CAAC;SAClC,WAAW,CAAC,OAAO,EAAE;;;;KAIrB,CAAC,CAAC;IAEL,kBAAkB;IAClB,MAAM,OAAO,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC;SAChC,WAAW,CAAC,6BAA6B,CAAC;SAC1C,MAAM,CAAC,KAAK,IAAI,EAAE;QACjB,IAAI,CAAC;YACH,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,iBAAiB;IACjB,MAAM,MAAM,GAAG,IAAI,mBAAO,CAAC,KAAK,CAAC;SAC9B,WAAW,CAAC,mCAAmC,CAAC;SAChD,QAAQ,CAAC,QAAQ,EAAE,aAAa,CAAC;SACjC,MAAM,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACrB,IAAI,CAAC;YACH,MAAM,SAAS,CAAC,IAAI,CAAC,CAAC;QACxB,CAAC;QAAC,OAAO,KAAU,EAAE,CAAC;YACpB,OAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;YAC5B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;IACxB,GAAG,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAEvB,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sources/index.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAIpC,wBAAgB,WAAW,IAAI,OAAO,CAoBrC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAKpC,wBAAgB,WAAW,IAAI,OAAO,CAuBrC"}
@@ -4,6 +4,7 @@ exports.syncCommand = syncCommand;
4
4
  const commander_1 = require("commander");
5
5
  const tests_1 = require("./tests");
6
6
  const ci_cd_1 = require("./ci-cd");
7
+ const linear_1 = require("./linear");
7
8
  function syncCommand() {
8
9
  const cmd = new commander_1.Command('sync');
9
10
  cmd
@@ -12,14 +13,17 @@ function syncCommand() {
12
13
  Available Sources:
13
14
  tests Sync test results (JUnit/TestNG/xUnit/Cucumber/Mocha)
14
15
  ci-cd Sync CI/CD events (builds and deployments)
16
+ linear Sync Linear data (issues, projects, teams, users, comments)
15
17
 
16
18
  Examples:
17
19
  $ faros sync tests test-results/*.xml --source "Jenkins"
18
20
  $ faros sync ci-cd build --status Success --commit "GitHub://org/repo/abc"
21
+ $ faros sync linear --streams issues,projects
19
22
  `);
20
23
  // Register subcommands
21
24
  cmd.addCommand((0, tests_1.syncTestsCommand)());
22
25
  cmd.addCommand((0, ci_cd_1.syncCICDCommand)());
26
+ cmd.addCommand((0, linear_1.syncLinearCommand)());
23
27
  return cmd;
24
28
  }
25
29
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":";;AAIA,kCAoBC;AAxBD,yCAAoC;AACpC,mCAA2C;AAC3C,mCAA0C;AAE1C,SAAgB,WAAW;IACzB,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,GAAG;SACA,WAAW,CAAC,yCAAyC,CAAC;SACtD,WAAW,CAAC,OAAO,EAAE;;;;;;;;KAQrB,CAAC,CAAC;IAEL,uBAAuB;IACvB,GAAG,CAAC,UAAU,CAAC,IAAA,wBAAgB,GAAE,CAAC,CAAC;IACnC,GAAG,CAAC,UAAU,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAC;IAElC,OAAO,GAAG,CAAC;AACb,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/commands/sync/index.ts"],"names":[],"mappings":";;AAKA,kCAuBC;AA5BD,yCAAoC;AACpC,mCAA2C;AAC3C,mCAA0C;AAC1C,qCAA6C;AAE7C,SAAgB,WAAW;IACzB,MAAM,GAAG,GAAG,IAAI,mBAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,GAAG;SACA,WAAW,CAAC,yCAAyC,CAAC;SACtD,WAAW,CAAC,OAAO,EAAE;;;;;;;;;;KAUrB,CAAC,CAAC;IAEL,uBAAuB;IACvB,GAAG,CAAC,UAAU,CAAC,IAAA,wBAAgB,GAAE,CAAC,CAAC;IACnC,GAAG,CAAC,UAAU,CAAC,IAAA,uBAAe,GAAE,CAAC,CAAC;IAClC,GAAG,CAAC,UAAU,CAAC,IAAA,0BAAiB,GAAE,CAAC,CAAC;IAEpC,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function syncLinearCommand(): Command;
3
+ //# sourceMappingURL=linear.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"linear.d.ts","sourceRoot":"","sources":["../../../src/commands/sync/linear.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AA8RpC,wBAAgB,iBAAiB,IAAI,OAAO,CA4E3C"}
@@ -0,0 +1,347 @@
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.syncLinearCommand = syncLinearCommand;
40
+ const commander_1 = require("commander");
41
+ const child_process_1 = require("child_process");
42
+ const fs = __importStar(require("fs"));
43
+ const os = __importStar(require("os"));
44
+ const path = __importStar(require("path"));
45
+ const chalk_1 = __importDefault(require("chalk"));
46
+ const loader_1 = require("../../config/loader");
47
+ const ui_1 = require("../../lib/ui");
48
+ const logger_1 = require("../../lib/logger");
49
+ // Default Docker images
50
+ const DEFAULT_LINEAR_SRC_IMAGE = 'farosai/airbyte-linear-source';
51
+ const DEFAULT_FAROS_DST_IMAGE = 'farosai/airbyte-faros-destination';
52
+ // All available Linear streams
53
+ const ALL_LINEAR_STREAMS = ['teams', 'users', 'projects', 'issues', 'comments'];
54
+ function buildLinearSourceConfig(config, options) {
55
+ const sourceEntry = config.sources?.linear;
56
+ const apiKey = options.linearApiKey || process.env.LINEAR_API_KEY;
57
+ if (!apiKey) {
58
+ throw new Error('Linear API key is required. Provide via --linear-api-key flag or LINEAR_API_KEY env var (in .env file or environment)');
59
+ }
60
+ const srcConfig = { api_key: apiKey };
61
+ const cutoffDays = options.cutoffDays ?? sourceEntry?.cutoffDays;
62
+ if (cutoffDays !== undefined)
63
+ srcConfig.cutoff_days = cutoffDays;
64
+ const startDate = options.startDate ?? sourceEntry?.startDate;
65
+ if (startDate)
66
+ srcConfig.start_date = startDate;
67
+ const endDate = options.endDate ?? sourceEntry?.endDate;
68
+ if (endDate)
69
+ srcConfig.end_date = endDate;
70
+ return srcConfig;
71
+ }
72
+ function buildFarosDestinationConfig(config, options) {
73
+ const targetGraph = options.dryRun ? (0, loader_1.getStagingGraph)(config) : config.graph;
74
+ const farosApiKey = config.apiKey;
75
+ if (!farosApiKey) {
76
+ throw new Error('Faros API key is required. Set via --api-key flag or FAROS_API_KEY env var (in .env file or environment)');
77
+ }
78
+ return {
79
+ edition_configs: {
80
+ edition: 'cloud',
81
+ api_key: farosApiKey,
82
+ api_url: config.url,
83
+ graph: targetGraph,
84
+ },
85
+ origin: config.origin,
86
+ };
87
+ }
88
+ function resolveAirbyteLocalBin() {
89
+ const localPaths = [
90
+ path.resolve(__dirname, '../../../../airbyte-local-cli/airbyte-local-cli-nodejs/lib/index.js'),
91
+ path.resolve(__dirname, '../../../../../airbyte-local-cli/airbyte-local-cli-nodejs/lib/index.js'),
92
+ ];
93
+ for (const p of localPaths) {
94
+ if (fs.existsSync(p)) {
95
+ return { command: process.execPath, args: [p] };
96
+ }
97
+ }
98
+ const whichCmd = process.platform === 'win32' ? 'where' : 'which';
99
+ try {
100
+ const { execSync } = require('child_process');
101
+ execSync(`${whichCmd} airbyte-local`, { stdio: 'pipe' });
102
+ return { command: 'airbyte-local', args: [] };
103
+ }
104
+ catch { /* not on PATH */ }
105
+ return { command: 'npx', args: ['airbyte-local'] };
106
+ }
107
+ async function syncLinear(options) {
108
+ const log = (0, logger_1.getLogger)().child({ source: 'sync-linear' });
109
+ // Load and merge config
110
+ const fileConfig = await (0, loader_1.loadConfig)();
111
+ const config = (0, loader_1.mergeConfig)(fileConfig, options);
112
+ log.info('Config loaded');
113
+ const sourceEntry = config.sources?.linear;
114
+ if (!sourceEntry && !options.linearApiKey && !process.env.LINEAR_API_KEY) {
115
+ throw new Error('No Linear source configuration found. Add a "linear" entry under "sources" in faros.config.yaml, ' +
116
+ 'or provide --linear-api-key');
117
+ }
118
+ // Resolve images
119
+ const srcImage = options.srcImage ?? sourceEntry?.srcImage ?? DEFAULT_LINEAR_SRC_IMAGE;
120
+ const dstImage = options.dstImage ?? sourceEntry?.dstImage ?? DEFAULT_FAROS_DST_IMAGE;
121
+ // Build airbyte-local config
122
+ const srcConfig = buildLinearSourceConfig(config, options);
123
+ const dstConfig = buildFarosDestinationConfig(config, options);
124
+ const airbyteConfig = {
125
+ src: { image: srcImage, config: srcConfig },
126
+ dst: { image: dstImage, config: dstConfig },
127
+ };
128
+ const targetGraph = options.dryRun ? (0, loader_1.getStagingGraph)(config) : config.graph;
129
+ // Resolve streams
130
+ const requestedStreams = options.streams
131
+ ? options.streams.split(',').map(s => s.trim())
132
+ : sourceEntry?.streams ?? ALL_LINEAR_STREAMS;
133
+ const invalidStreams = requestedStreams.filter(s => !ALL_LINEAR_STREAMS.includes(s));
134
+ if (invalidStreams.length > 0) {
135
+ throw new Error(`Invalid stream(s): ${invalidStreams.join(', ')}. Valid streams: ${ALL_LINEAR_STREAMS.join(', ')}`);
136
+ }
137
+ const mode = options.fullRefresh ? 'full_refresh' : 'incremental';
138
+ const connName = options.connectionName ?? sourceEntry?.connectionName ?? 'mylinearsrc';
139
+ log.info({
140
+ srcImage, dstImage, graph: targetGraph, origin: config.origin,
141
+ streams: requestedStreams, mode, connectionName: connName,
142
+ dryRun: !!options.dryRun,
143
+ }, 'Sync plan resolved');
144
+ // Display sync plan to console
145
+ console.log();
146
+ console.log(chalk_1.default.bold('Linear Sync Configuration'));
147
+ console.log(chalk_1.default.dim('─'.repeat(40)));
148
+ console.log(` Source: ${chalk_1.default.cyan(srcImage)}`);
149
+ console.log(` Destination: ${chalk_1.default.cyan(dstImage)}`);
150
+ console.log(` Graph: ${chalk_1.default.cyan(targetGraph)}`);
151
+ console.log(` Origin: ${chalk_1.default.cyan(config.origin)}`);
152
+ console.log(` Streams: ${chalk_1.default.cyan(requestedStreams.join(', '))}`);
153
+ if (options.fullRefresh) {
154
+ console.log(` Mode: ${chalk_1.default.yellow('full_refresh (overwrite)')}`);
155
+ }
156
+ else {
157
+ console.log(` Mode: ${chalk_1.default.green('incremental')}`);
158
+ }
159
+ if (options.dryRun) {
160
+ console.log();
161
+ ui_1.ui.log.warning(`Dry-run mode: syncing to staging graph '${targetGraph}'`);
162
+ }
163
+ console.log(chalk_1.default.dim('─'.repeat(40)));
164
+ console.log();
165
+ // Write config to temp file
166
+ const tmpDir = fs.mkdtempSync(path.join(os.tmpdir(), 'faros-linear-'));
167
+ const configFilePath = path.join(tmpDir, 'airbyte_config.json');
168
+ try {
169
+ fs.writeFileSync(configFilePath, JSON.stringify(airbyteConfig, null, 2));
170
+ log.debug({ configFilePath }, 'Wrote airbyte config to temp file');
171
+ // Build airbyte-local CLI arguments
172
+ const cliArgs = ['--config-file', configFilePath];
173
+ if (options.fullRefresh)
174
+ cliArgs.push('--full-refresh');
175
+ if (options.checkConnection)
176
+ cliArgs.push('--src-check-connection');
177
+ cliArgs.push('--connection-name', connName);
178
+ if (options.stateFile)
179
+ cliArgs.push('--state-file', options.stateFile);
180
+ if (options.keepContainers)
181
+ cliArgs.push('--keep-containers');
182
+ const logLevel = options.logLevel ?? (options.debug ? 'debug' : config.logs?.level ?? 'info');
183
+ cliArgs.push('--log-level', logLevel);
184
+ if (options.rawMessages)
185
+ cliArgs.push('--raw-messages');
186
+ if (options.noSrcPull)
187
+ cliArgs.push('--no-src-pull');
188
+ if (options.noDstPull)
189
+ cliArgs.push('--no-dst-pull');
190
+ if (options.debug)
191
+ cliArgs.push('--debug');
192
+ // Resolve airbyte-local binary
193
+ const bin = resolveAirbyteLocalBin();
194
+ const fullArgs = [...bin.args, ...cliArgs];
195
+ log.info({ command: bin.command, args: fullArgs }, 'Spawning airbyte-local');
196
+ if (options.debug) {
197
+ console.log(chalk_1.default.dim(` Config file: ${configFilePath}`));
198
+ console.log(chalk_1.default.dim(` Command: ${bin.command} ${fullArgs.join(' ')}`));
199
+ console.log();
200
+ }
201
+ const spinner = ui_1.ui.spinner('Starting Linear sync via airbyte-local...');
202
+ spinner.start();
203
+ const startTime = Date.now();
204
+ // Spawn airbyte-local
205
+ const exitCode = await new Promise((resolve, reject) => {
206
+ const child = (0, child_process_1.spawn)(bin.command, fullArgs, {
207
+ stdio: ['inherit', 'pipe', 'pipe'],
208
+ env: { ...process.env },
209
+ });
210
+ let started = false;
211
+ child.stdout?.on('data', (data) => {
212
+ if (!started) {
213
+ started = true;
214
+ spinner.succeed('Linear sync started');
215
+ console.log();
216
+ }
217
+ process.stdout.write(data);
218
+ });
219
+ child.stderr?.on('data', (data) => {
220
+ if (!started) {
221
+ started = true;
222
+ spinner.succeed('Linear sync started');
223
+ console.log();
224
+ }
225
+ process.stderr.write(data);
226
+ });
227
+ child.on('error', (err) => {
228
+ spinner.fail('Failed to start airbyte-local');
229
+ if (err.message.includes('ENOENT')) {
230
+ reject(new Error(`Could not find 'airbyte-local' command. Please install it:\n` +
231
+ ` npm install -g airbyte-local-cli\n` +
232
+ `Or ensure it is on your PATH.`));
233
+ }
234
+ else {
235
+ reject(err);
236
+ }
237
+ });
238
+ child.on('close', (code) => {
239
+ if (!started) {
240
+ if (code === 0) {
241
+ spinner.succeed('Linear sync completed');
242
+ }
243
+ else {
244
+ spinner.fail('Linear sync failed');
245
+ }
246
+ }
247
+ resolve(code ?? 1);
248
+ });
249
+ });
250
+ const durationMs = Date.now() - startTime;
251
+ if (exitCode !== 0) {
252
+ log.error({ exitCode, durationMs }, 'Sync failed');
253
+ throw new Error(`airbyte-local exited with code ${exitCode}`);
254
+ }
255
+ log.info({ durationMs }, 'Sync completed successfully');
256
+ console.log();
257
+ ui_1.ui.log.success(`Linear sync completed${options.dryRun ? ' (dry-run to staging graph)' : ''}`);
258
+ if (options.dryRun) {
259
+ console.log(chalk_1.default.dim(` Graph: ${targetGraph}`));
260
+ console.log(chalk_1.default.dim(' Run without --dry-run to sync to production'));
261
+ }
262
+ }
263
+ finally {
264
+ try {
265
+ fs.rmSync(tmpDir, { recursive: true, force: true });
266
+ }
267
+ catch { /* ignore */ }
268
+ log.debug('Cleaned up temp dir');
269
+ }
270
+ }
271
+ function syncLinearCommand() {
272
+ const cmd = new commander_1.Command('linear');
273
+ cmd
274
+ .description('Sync Linear data (issues, projects, teams, users, comments) to Faros via airbyte-connectors')
275
+ .option('--linear-api-key <key>', 'Linear API key (or set LINEAR_API_KEY env var)')
276
+ .option('--cutoff-days <days>', 'Only fetch data updated in the last N days', parseInt)
277
+ .option('--start-date <date>', 'Start date (ISO 8601: YYYY-MM-DD)')
278
+ .option('--end-date <date>', 'End date (ISO 8601: YYYY-MM-DD)')
279
+ .option('--streams <streams>', `Comma-separated streams (${ALL_LINEAR_STREAMS.join(',')})`)
280
+ .option('--full-refresh', 'Force full_refresh + overwrite mode (ignore saved state)')
281
+ .option('--connection-name <name>', 'Connection name for state tracking', 'mylinearsrc')
282
+ .option('--state-file <path>', 'Path to state file for incremental sync')
283
+ .option('--check-connection', 'Validate source connection before syncing')
284
+ .option('--src-image <image>', 'Override Linear source Docker image')
285
+ .option('--dst-image <image>', 'Override Faros destination Docker image')
286
+ .option('--keep-containers', 'Do not remove Docker containers after exit')
287
+ .option('--log-level <level>', 'Log level for connectors (debug, info, warn, error)')
288
+ .option('--raw-messages', 'Output raw Airbyte messages')
289
+ .option('--no-src-pull', 'Skip pulling the source Docker image')
290
+ .option('--no-dst-pull', 'Skip pulling the destination Docker image')
291
+ .option('--dry-run', 'Sync to staging graph for verification')
292
+ .addHelpText('after', `
293
+ Credentials (.env file or environment variables):
294
+ LINEAR_API_KEY Linear API key (or --linear-api-key flag)
295
+ FAROS_API_KEY Faros API key (or --api-key flag)
296
+
297
+ Other Environment Variables:
298
+ FAROS_URL Faros API URL
299
+ FAROS_GRAPH Target Faros graph
300
+
301
+ Config File (faros.config.yaml -- non-sensitive settings only):
302
+ sources:
303
+ linear:
304
+ type: Linear
305
+ cutoffDays: 90
306
+ streams:
307
+ - issues
308
+ - projects
309
+ - teams
310
+ - users
311
+ - comments
312
+
313
+ Examples:
314
+ # Sync all Linear data using config file + env vars
315
+ $ faros sync linear
316
+
317
+ # Sync only issues and projects
318
+ $ faros sync linear --streams issues,projects
319
+
320
+ # Full refresh (ignore incremental state)
321
+ $ faros sync linear --full-refresh
322
+
323
+ # Check connection first, then sync
324
+ $ faros sync linear --check-connection
325
+
326
+ # Dry-run to staging graph
327
+ $ faros sync linear --dry-run
328
+
329
+ # Use a specific API key inline
330
+ $ faros sync linear --linear-api-key lin_api_xxxxx
331
+ `)
332
+ .action(async (options) => {
333
+ try {
334
+ await syncLinear(options);
335
+ }
336
+ catch (error) {
337
+ (0, logger_1.getLogger)().error({ err: error }, error.message);
338
+ ui_1.ui.log.error(error.message);
339
+ if (options.debug) {
340
+ console.error(error.stack);
341
+ }
342
+ process.exit(1);
343
+ }
344
+ });
345
+ return cmd;
346
+ }
347
+ //# sourceMappingURL=linear.js.map
@@ -0,0 +1 @@
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,CAoCR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
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,CAgDR;AAED,wBAAgB,eAAe,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,CAEtD"}
@@ -102,14 +102,29 @@ function mergeConfig(fileConfig, cliOptions, envVars = process.env) {
102
102
  },
103
103
  ...fileConfig,
104
104
  };
105
- // Credentials from environment variables (highest priority for secrets)
105
+ // Strip any credentials that may have been placed in the config file.
106
+ // Credentials must come from env vars / .env only.
107
+ delete merged.apiKey;
108
+ if (merged.sources) {
109
+ for (const source of Object.values(merged.sources)) {
110
+ delete source?.apiKey;
111
+ delete source?.token;
112
+ }
113
+ }
114
+ // Credentials from environment variables / .env file only
106
115
  if (envVars.FAROS_API_KEY)
107
116
  merged.apiKey = envVars.FAROS_API_KEY;
108
- if (envVars.LINEAR_API_KEY && merged.sources?.linear) {
109
- merged.sources.linear.apiKey = envVars.LINEAR_API_KEY;
117
+ if (envVars.LINEAR_API_KEY) {
118
+ if (!merged.sources)
119
+ merged.sources = {};
120
+ if (!merged.sources.linear)
121
+ merged.sources.linear = { type: 'Linear' };
110
122
  }
111
- if (envVars.GITHUB_TOKEN && merged.sources?.github) {
112
- merged.sources.github.token = envVars.GITHUB_TOKEN;
123
+ if (envVars.GITHUB_TOKEN) {
124
+ if (!merged.sources)
125
+ merged.sources = {};
126
+ if (!merged.sources.github)
127
+ merged.sources.github = { type: 'GitHub' };
113
128
  }
114
129
  // AWS credentials from environment
115
130
  if (envVars.AWS_ACCESS_KEY_ID) {
@@ -1 +1 @@
1
- {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"loader.js","sourceRoot":"","sources":["../../src/config/loader.ts"],"names":[],"mappings":"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"}
package/lib/index.js CHANGED
@@ -11,6 +11,7 @@ const sync_1 = require("./commands/sync");
11
11
  const sources_1 = require("./commands/sources");
12
12
  const logs_1 = require("./commands/logs");
13
13
  const ui_1 = require("./lib/ui");
14
+ const logger_1 = require("./lib/logger");
14
15
  const pkg = require('../package.json');
15
16
  // Check for updates
16
17
  const notifier = (0, update_notifier_1.default)({
@@ -31,6 +32,12 @@ ${chalk_1.default.bold.blue('Faros CLI')} - Instrumentation & Data Sync
31
32
  `)
32
33
  .addHelpText('after', `
33
34
  ${chalk_1.default.bold('Quick Start:')}
35
+ ${chalk_1.default.dim('# Sync Linear data (issues, projects, teams, etc.)')}
36
+ $ faros sync linear
37
+
38
+ ${chalk_1.default.dim('# Sync only specific Linear streams')}
39
+ $ faros sync linear --streams issues,projects
40
+
34
41
  ${chalk_1.default.dim('# Sync test results')}
35
42
  $ faros sync tests test-results/*.xml --source "Jenkins" --commit "GitHub://org/repo/abc"
36
43
 
@@ -55,6 +62,10 @@ ${chalk_1.default.bold('Support:')} https://community.faros.ai
55
62
  .option('--quiet', 'Minimal output')
56
63
  .option('--json', 'Output JSON (for scripting)')
57
64
  .option('--no-color', 'Disable colors');
65
+ // Init file logger (debug level if --debug is present, else info)
66
+ const debugFlag = process.argv.includes('--debug') || process.argv.includes('-d');
67
+ const log = (0, logger_1.initLogger)(debugFlag ? 'debug' : 'info');
68
+ log.info({ version: pkg.version, argv: process.argv.slice(2) }, 'faros-cli started');
58
69
  // Register commands
59
70
  program.addCommand((0, sync_1.syncCommand)());
60
71
  program.addCommand((0, sources_1.sourcesCommand)());
package/lib/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,sEAA6C;AAC7C,0CAA8C;AAC9C,gDAAoD;AACpD,0CAA8C;AAC9C,iCAA8B;AAE9B,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,oBAAoB;AACpB,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC;IAC9B,GAAG;IACH,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ;CACnD,CAAC,CAAC;AAEH,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CACT,OAAE,CAAC,GAAG,CACJ,qBAAqB,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,YAAY,EAC1K,EAAE,WAAW,EAAE,QAAQ,EAAE,CAC1B,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,WAAW,CAAC,QAAQ,EAAE;EACzB,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;CAC7B,CAAC;SACG,WAAW,CAAC,OAAO,EAAE;EACxB,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IACxB,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;;;IAGhC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC;;;IAGlC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC;;;IAGxB,eAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;EAG7B,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;EAC5B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;KACnB,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAC1C,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;SAChD,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;SACnC,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAE1C,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAc,GAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;IAElC,kBAAkB;IAClB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,UAAU;AACV,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":";;;;;;AAEA,yCAAoC;AACpC,kDAA0B;AAC1B,sEAA6C;AAC7C,0CAA8C;AAC9C,gDAAoD;AACpD,0CAA8C;AAC9C,iCAA8B;AAC9B,yCAA0C;AAE1C,MAAM,GAAG,GAAG,OAAO,CAAC,iBAAiB,CAAC,CAAC;AAEvC,oBAAoB;AACpB,MAAM,QAAQ,GAAG,IAAA,yBAAc,EAAC;IAC9B,GAAG;IACH,mBAAmB,EAAE,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,QAAQ;CACnD,CAAC,CAAC;AAEH,IAAI,QAAQ,CAAC,MAAM,EAAE,CAAC;IACpB,OAAO,CAAC,GAAG,CACT,OAAE,CAAC,GAAG,CACJ,qBAAqB,eAAK,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,CAAC,OAAO,CAAC,MAAM,eAAK,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,WAAW,eAAK,CAAC,IAAI,CAAC,uCAAuC,CAAC,YAAY,EAC1K,EAAE,WAAW,EAAE,QAAQ,EAAE,CAC1B,CACF,CAAC;AACJ,CAAC;AAED,KAAK,UAAU,IAAI;IACjB,MAAM,OAAO,GAAG,IAAI,mBAAO,EAAE,CAAC;IAE9B,OAAO;SACJ,IAAI,CAAC,OAAO,CAAC;SACb,WAAW,CAAC,yDAAyD,CAAC;SACtE,OAAO,CAAC,GAAG,CAAC,OAAO,CAAC;SACpB,WAAW,CAAC,QAAQ,EAAE;EACzB,eAAK,CAAC,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC;CAC7B,CAAC;SACG,WAAW,CAAC,OAAO,EAAE;EACxB,eAAK,CAAC,IAAI,CAAC,cAAc,CAAC;IACxB,eAAK,CAAC,GAAG,CAAC,oDAAoD,CAAC;;;IAG/D,eAAK,CAAC,GAAG,CAAC,qCAAqC,CAAC;;;IAGhD,eAAK,CAAC,GAAG,CAAC,qBAAqB,CAAC;;;IAGhC,eAAK,CAAC,GAAG,CAAC,uBAAuB,CAAC;;;IAGlC,eAAK,CAAC,GAAG,CAAC,aAAa,CAAC;;;IAGxB,eAAK,CAAC,GAAG,CAAC,gBAAgB,CAAC;;;EAG7B,eAAK,CAAC,IAAI,CAAC,gBAAgB,CAAC;EAC5B,eAAK,CAAC,IAAI,CAAC,UAAU,CAAC;KACnB,CAAC,CAAC;IAEL,iBAAiB;IACjB,OAAO;SACJ,MAAM,CAAC,qBAAqB,EAAE,sCAAsC,CAAC;SACrE,MAAM,CAAC,iBAAiB,EAAE,eAAe,CAAC;SAC1C,MAAM,CAAC,oBAAoB,EAAE,kBAAkB,CAAC;SAChD,MAAM,CAAC,SAAS,EAAE,sBAAsB,CAAC;SACzC,MAAM,CAAC,SAAS,EAAE,gBAAgB,CAAC;SACnC,MAAM,CAAC,QAAQ,EAAE,6BAA6B,CAAC;SAC/C,MAAM,CAAC,YAAY,EAAE,gBAAgB,CAAC,CAAC;IAE1C,kEAAkE;IAClE,MAAM,SAAS,GAAG,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;IAClF,MAAM,GAAG,GAAG,IAAA,mBAAU,EAAC,SAAS,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,CAAC;IACrD,GAAG,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,OAAO,EAAE,IAAI,EAAE,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,EAAE,mBAAmB,CAAC,CAAC;IAErF,oBAAoB;IACpB,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;IAClC,OAAO,CAAC,UAAU,CAAC,IAAA,wBAAc,GAAE,CAAC,CAAC;IACrC,OAAO,CAAC,UAAU,CAAC,IAAA,kBAAW,GAAE,CAAC,CAAC;IAElC,kBAAkB;IAClB,MAAM,OAAO,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AACzC,CAAC;AAED,UAAU;AACV,IAAI,EAAE,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,EAAE;IACrB,OAAE,CAAC,GAAG,CAAC,KAAK,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;IAC5B,IAAI,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC;QACtB,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;IAC7B,CAAC;IACD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -9,7 +9,7 @@ const axios_1 = __importDefault(require("axios"));
9
9
  const axios_retry_1 = __importDefault(require("axios-retry"));
10
10
  function createClient(config) {
11
11
  if (!config.apiKey) {
12
- throw new Error('Faros API key is required. Set via --api-key, FAROS_API_KEY env var, or config file');
12
+ throw new Error('Faros API key is required. Set via --api-key flag or FAROS_API_KEY in .env / environment');
13
13
  }
14
14
  const client = axios_1.default.create({
15
15
  baseURL: config.url,
@@ -1 +1 @@
1
- {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/api/client.ts"],"names":[],"mappings":";;;;;AAIA,oCA4BC;AAED,8BAeC;AAjDD,kDAA6C;AAC7C,8DAAqC;AAGrC,SAAgB,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,qFAAqF,CAAC,CAAC;IACzG,CAAC;IAED,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,GAAG;QACnB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC,MAAM;YAC5B,YAAY,EAAE,iBAAiB;SAChC;KACF,CAAC,CAAC;IAEH,kBAAkB;IAClB,IAAA,qBAAU,EAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,qBAAU,CAAC,gBAAgB;QACvC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CACL,qBAAU,CAAC,iCAAiC,CAAC,KAAK,CAAC;gBACnD,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,aAAa;gBAC/C,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAI,sBAAsB;aACzD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,MAAqB,EACrB,KAAa,EACb,IAAS,EACT,UAGI,EAAE;IAEN,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,IAAI,EAAE;QACjD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;SAC5C;KACF,CAAC,CAAC;AACL,CAAC"}
1
+ {"version":3,"file":"client.js","sourceRoot":"","sources":["../../../src/lib/api/client.ts"],"names":[],"mappings":";;;;;AAIA,oCA4BC;AAED,8BAeC;AAjDD,kDAA6C;AAC7C,8DAAqC;AAGrC,SAAgB,YAAY,CAAC,MAAc;IACzC,IAAI,CAAC,MAAM,CAAC,MAAM,EAAE,CAAC;QACnB,MAAM,IAAI,KAAK,CAAC,0FAA0F,CAAC,CAAC;IAC9G,CAAC;IAED,MAAM,MAAM,GAAG,eAAK,CAAC,MAAM,CAAC;QAC1B,OAAO,EAAE,MAAM,CAAC,GAAG;QACnB,OAAO,EAAE,KAAK;QACd,OAAO,EAAE;YACP,aAAa,EAAE,MAAM,CAAC,MAAM;YAC5B,YAAY,EAAE,iBAAiB;SAChC;KACF,CAAC,CAAC;IAEH,kBAAkB;IAClB,IAAA,qBAAU,EAAC,MAAM,EAAE;QACjB,OAAO,EAAE,CAAC;QACV,UAAU,EAAE,qBAAU,CAAC,gBAAgB;QACvC,cAAc,EAAE,CAAC,KAAK,EAAE,EAAE;YACxB,OAAO,CACL,qBAAU,CAAC,iCAAiC,CAAC,KAAK,CAAC;gBACnD,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,IAAI,aAAa;gBAC/C,KAAK,CAAC,QAAQ,EAAE,MAAM,KAAK,GAAG,CAAI,sBAAsB;aACzD,CAAC;QACJ,CAAC;KACF,CAAC,CAAC;IAEH,OAAO,MAAM,CAAC;AAChB,CAAC;AAEM,KAAK,UAAU,SAAS,CAC7B,MAAqB,EACrB,KAAa,EACb,IAAS,EACT,UAGI,EAAE;IAEN,MAAM,MAAM,CAAC,IAAI,CAAC,WAAW,KAAK,SAAS,EAAE,IAAI,EAAE;QACjD,MAAM,EAAE;YACN,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,IAAI;YAC1B,YAAY,EAAE,OAAO,CAAC,YAAY,IAAI,KAAK;SAC5C;KACF,CAAC,CAAC;AACL,CAAC"}
@@ -0,0 +1,8 @@
1
+ import pino from 'pino';
2
+ /** Initialise the file logger. Call once at startup. */
3
+ export declare function initLogger(level?: string): pino.Logger;
4
+ /** Get the logger. Returns a silent logger if initLogger hasn't been called. */
5
+ export declare function getLogger(): pino.Logger;
6
+ /** Path to the log file. */
7
+ export declare const LOG_FILE_PATH: string;
8
+ //# sourceMappingURL=logger.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.d.ts","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":"AAAA,OAAO,IAAI,MAAM,MAAM,CAAC;AAQxB,wDAAwD;AACxD,wBAAgB,UAAU,CAAC,KAAK,GAAE,MAAe,GAAG,IAAI,CAAC,MAAM,CAmB9D;AAED,gFAAgF;AAChF,wBAAgB,SAAS,IAAI,IAAI,CAAC,MAAM,CAKvC;AAED,4BAA4B;AAC5B,eAAO,MAAM,aAAa,QAAW,CAAC"}
@@ -0,0 +1,73 @@
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.LOG_FILE_PATH = void 0;
40
+ exports.initLogger = initLogger;
41
+ exports.getLogger = getLogger;
42
+ const pino_1 = __importDefault(require("pino"));
43
+ const path = __importStar(require("path"));
44
+ const LOG_FILE = path.join(process.cwd(), 'faros.log');
45
+ let _logger = null;
46
+ /** Initialise the file logger. Call once at startup. */
47
+ function initLogger(level = 'info') {
48
+ _logger = (0, pino_1.default)({
49
+ level,
50
+ timestamp: pino_1.default.stdTimeFunctions.isoTime,
51
+ redact: {
52
+ paths: [
53
+ 'apiKey', 'api_key', 'token', 'secret',
54
+ 'password', 'authorization',
55
+ '*.apiKey', '*.api_key', '*.token', '*.secret',
56
+ '*.password', '*.authorization',
57
+ 'config.api_key', 'dstConfig.edition_configs.api_key',
58
+ ],
59
+ censor: '***',
60
+ },
61
+ }, pino_1.default.destination({ dest: LOG_FILE, append: true, sync: true }));
62
+ return _logger;
63
+ }
64
+ /** Get the logger. Returns a silent logger if initLogger hasn't been called. */
65
+ function getLogger() {
66
+ if (!_logger) {
67
+ _logger = (0, pino_1.default)({ level: 'silent' });
68
+ }
69
+ return _logger;
70
+ }
71
+ /** Path to the log file. */
72
+ exports.LOG_FILE_PATH = LOG_FILE;
73
+ //# sourceMappingURL=logger.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logger.js","sourceRoot":"","sources":["../../src/lib/logger.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AASA,gCAmBC;AAGD,8BAKC;AApCD,gDAAwB;AAExB,2CAA6B;AAE7B,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,WAAW,CAAC,CAAC;AAEvD,IAAI,OAAO,GAAuB,IAAI,CAAC;AAEvC,wDAAwD;AACxD,SAAgB,UAAU,CAAC,QAAgB,MAAM;IAC/C,OAAO,GAAG,IAAA,cAAI,EACZ;QACE,KAAK;QACL,SAAS,EAAE,cAAI,CAAC,gBAAgB,CAAC,OAAO;QACxC,MAAM,EAAE;YACN,KAAK,EAAE;gBACL,QAAQ,EAAE,SAAS,EAAE,OAAO,EAAE,QAAQ;gBACtC,UAAU,EAAE,eAAe;gBAC3B,UAAU,EAAE,WAAW,EAAE,SAAS,EAAE,UAAU;gBAC9C,YAAY,EAAE,iBAAiB;gBAC/B,gBAAgB,EAAE,mCAAmC;aACtD;YACD,MAAM,EAAE,KAAK;SACd;KACF,EACD,cAAI,CAAC,WAAW,CAAC,EAAE,IAAI,EAAE,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAC/D,CAAC;IACF,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,gFAAgF;AAChF,SAAgB,SAAS;IACvB,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO,GAAG,IAAA,cAAI,EAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAC;IACtC,CAAC;IACD,OAAO,OAAO,CAAC;AACjB,CAAC;AAED,4BAA4B;AACf,QAAA,aAAa,GAAG,QAAQ,CAAC"}
@@ -7,34 +7,46 @@ export declare const ConfigSchema: z.ZodObject<{
7
7
  apiKey: z.ZodOptional<z.ZodString>;
8
8
  sources: z.ZodNullable<z.ZodOptional<z.ZodRecord<z.ZodString, z.ZodObject<{
9
9
  type: z.ZodOptional<z.ZodString>;
10
- apiKey: z.ZodOptional<z.ZodString>;
11
- token: z.ZodOptional<z.ZodString>;
12
10
  bucket: z.ZodOptional<z.ZodString>;
13
11
  region: z.ZodOptional<z.ZodString>;
14
12
  prefix: z.ZodOptional<z.ZodString>;
15
13
  pattern: z.ZodOptional<z.ZodString>;
16
14
  syncInterval: z.ZodOptional<z.ZodString>;
17
15
  streams: z.ZodOptional<z.ZodArray<z.ZodString, "many">>;
16
+ cutoffDays: z.ZodOptional<z.ZodNumber>;
17
+ startDate: z.ZodOptional<z.ZodString>;
18
+ endDate: z.ZodOptional<z.ZodString>;
19
+ srcImage: z.ZodOptional<z.ZodString>;
20
+ dstImage: z.ZodOptional<z.ZodString>;
21
+ connectionName: z.ZodOptional<z.ZodString>;
18
22
  }, "strip", z.ZodTypeAny, {
19
- apiKey?: string | undefined;
20
23
  type?: string | undefined;
21
- token?: string | undefined;
22
24
  bucket?: string | undefined;
23
25
  region?: string | undefined;
24
26
  prefix?: string | undefined;
25
27
  pattern?: string | undefined;
26
28
  syncInterval?: string | undefined;
27
29
  streams?: string[] | undefined;
30
+ cutoffDays?: number | undefined;
31
+ startDate?: string | undefined;
32
+ endDate?: string | undefined;
33
+ srcImage?: string | undefined;
34
+ dstImage?: string | undefined;
35
+ connectionName?: string | undefined;
28
36
  }, {
29
- apiKey?: string | undefined;
30
37
  type?: string | undefined;
31
- token?: string | undefined;
32
38
  bucket?: string | undefined;
33
39
  region?: string | undefined;
34
40
  prefix?: string | undefined;
35
41
  pattern?: string | undefined;
36
42
  syncInterval?: string | undefined;
37
43
  streams?: string[] | undefined;
44
+ cutoffDays?: number | undefined;
45
+ startDate?: string | undefined;
46
+ endDate?: string | undefined;
47
+ srcImage?: string | undefined;
48
+ dstImage?: string | undefined;
49
+ connectionName?: string | undefined;
38
50
  }>>>>;
39
51
  defaults: z.ZodOptional<z.ZodObject<{
40
52
  testSource: z.ZodOptional<z.ZodString>;
@@ -51,16 +63,10 @@ export declare const ConfigSchema: z.ZodObject<{
51
63
  }>>;
52
64
  logs: z.ZodOptional<z.ZodObject<{
53
65
  level: z.ZodDefault<z.ZodEnum<["debug", "info", "warn", "error"]>>;
54
- directory: z.ZodOptional<z.ZodString>;
55
- retention: z.ZodOptional<z.ZodString>;
56
66
  }, "strip", z.ZodTypeAny, {
57
67
  level: "debug" | "info" | "warn" | "error";
58
- directory?: string | undefined;
59
- retention?: string | undefined;
60
68
  }, {
61
69
  level?: "debug" | "info" | "warn" | "error" | undefined;
62
- directory?: string | undefined;
63
- retention?: string | undefined;
64
70
  }>>;
65
71
  }, "strip", z.ZodTypeAny, {
66
72
  url: string;
@@ -69,15 +75,19 @@ export declare const ConfigSchema: z.ZodObject<{
69
75
  stagingGraph?: string | undefined;
70
76
  apiKey?: string | undefined;
71
77
  sources?: Record<string, {
72
- apiKey?: string | undefined;
73
78
  type?: string | undefined;
74
- token?: string | undefined;
75
79
  bucket?: string | undefined;
76
80
  region?: string | undefined;
77
81
  prefix?: string | undefined;
78
82
  pattern?: string | undefined;
79
83
  syncInterval?: string | undefined;
80
84
  streams?: string[] | undefined;
85
+ cutoffDays?: number | undefined;
86
+ startDate?: string | undefined;
87
+ endDate?: string | undefined;
88
+ srcImage?: string | undefined;
89
+ dstImage?: string | undefined;
90
+ connectionName?: string | undefined;
81
91
  }> | null | undefined;
82
92
  defaults?: {
83
93
  concurrency: number;
@@ -86,8 +96,6 @@ export declare const ConfigSchema: z.ZodObject<{
86
96
  } | undefined;
87
97
  logs?: {
88
98
  level: "debug" | "info" | "warn" | "error";
89
- directory?: string | undefined;
90
- retention?: string | undefined;
91
99
  } | undefined;
92
100
  }, {
93
101
  url?: string | undefined;
@@ -96,15 +104,19 @@ export declare const ConfigSchema: z.ZodObject<{
96
104
  origin?: string | undefined;
97
105
  apiKey?: string | undefined;
98
106
  sources?: Record<string, {
99
- apiKey?: string | undefined;
100
107
  type?: string | undefined;
101
- token?: string | undefined;
102
108
  bucket?: string | undefined;
103
109
  region?: string | undefined;
104
110
  prefix?: string | undefined;
105
111
  pattern?: string | undefined;
106
112
  syncInterval?: string | undefined;
107
113
  streams?: string[] | undefined;
114
+ cutoffDays?: number | undefined;
115
+ startDate?: string | undefined;
116
+ endDate?: string | undefined;
117
+ srcImage?: string | undefined;
118
+ dstImage?: string | undefined;
119
+ connectionName?: string | undefined;
108
120
  }> | null | undefined;
109
121
  defaults?: {
110
122
  testSource?: string | undefined;
@@ -113,8 +125,6 @@ export declare const ConfigSchema: z.ZodObject<{
113
125
  } | undefined;
114
126
  logs?: {
115
127
  level?: "debug" | "info" | "warn" | "error" | undefined;
116
- directory?: string | undefined;
117
- retention?: string | undefined;
118
128
  } | undefined;
119
129
  }>;
120
130
  export type Config = z.infer<typeof ConfigSchema>;
@@ -157,4 +167,22 @@ export interface SyncCICDOptions extends BaseCommandOptions {
157
167
  deployEndTime?: string;
158
168
  artifact?: string;
159
169
  }
170
+ export interface SyncLinearOptions extends BaseCommandOptions {
171
+ linearApiKey?: string;
172
+ cutoffDays?: number;
173
+ startDate?: string;
174
+ endDate?: string;
175
+ streams?: string;
176
+ fullRefresh?: boolean;
177
+ connectionName?: string;
178
+ checkConnection?: boolean;
179
+ stateFile?: string;
180
+ srcImage?: string;
181
+ dstImage?: string;
182
+ keepContainers?: boolean;
183
+ logLevel?: string;
184
+ rawMessages?: boolean;
185
+ noSrcPull?: boolean;
186
+ noDstPull?: boolean;
187
+ }
160
188
  //# sourceMappingURL=config.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAoCvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAIxB,eAAO,MAAM,YAAY;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EA2CvB,CAAC;AAEH,MAAM,MAAM,MAAM,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,YAAY,CAAC,CAAC;AAGlD,MAAM,WAAW,kBAAkB;IACjC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,MAAM,CAAC,EAAE,OAAO,CAAC;IACjB,QAAQ,CAAC,EAAE,OAAO,CAAC;IACnB,OAAO,CAAC,EAAE,OAAO,CAAC;CACnB;AAED,MAAM,WAAW,gBAAiB,SAAQ,kBAAkB;IAC1D,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,iBAAiB,CAAC,EAAE,MAAM,CAAC;IAC3B,OAAO,CAAC,EAAE,MAAM,CAAC;CAClB;AAED,MAAM,WAAW,eAAgB,SAAQ,kBAAkB;IACzD,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,MAAM,WAAW,iBAAkB,SAAQ,kBAAkB;IAC3D,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,OAAO,CAAC;IAC1B,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,SAAS,CAAC,EAAE,OAAO,CAAC;IACpB,SAAS,CAAC,EAAE,OAAO,CAAC;CACrB"}
@@ -3,26 +3,35 @@ Object.defineProperty(exports, "__esModule", { value: true });
3
3
  exports.ConfigSchema = void 0;
4
4
  const zod_1 = require("zod");
5
5
  // Config schema
6
- // NOTE: Sensitive credentials should be in .env, not config files
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
8
  // API Configuration (can be in config file)
9
9
  url: zod_1.z.string().url().default('https://prod.api.faros.ai'),
10
10
  graph: zod_1.z.string().default('default'),
11
11
  stagingGraph: zod_1.z.string().optional(),
12
12
  origin: zod_1.z.string().default('faros-cli'),
13
- // Credentials (prefer .env over config file)
14
- apiKey: zod_1.z.string().optional(), // Prefer FAROS_API_KEY env var
15
- // Data Sources (credentials should be in .env)
13
+ // Credentials - populated at runtime from env vars / CLI flags only.
14
+ // Not read from config file. Set FAROS_API_KEY in .env or environment.
15
+ apiKey: zod_1.z.string().optional(),
16
+ // Data Sources
17
+ // Credentials (apiKey, token) are injected at runtime from env vars / .env only.
16
18
  sources: zod_1.z.record(zod_1.z.object({
17
19
  type: zod_1.z.string().optional(),
18
- apiKey: zod_1.z.string().optional(), // Prefer SOURCE_API_KEY env var
19
- token: zod_1.z.string().optional(), // Prefer SOURCE_TOKEN env var
20
20
  bucket: zod_1.z.string().optional(), // S3 bucket name
21
21
  region: zod_1.z.string().optional(), // S3 region
22
22
  prefix: zod_1.z.string().optional(), // S3 prefix
23
23
  pattern: zod_1.z.string().optional(), // S3 pattern
24
24
  syncInterval: zod_1.z.string().optional(),
25
25
  streams: zod_1.z.array(zod_1.z.string()).optional(),
26
+ // Linear-specific settings
27
+ cutoffDays: zod_1.z.number().optional(),
28
+ startDate: zod_1.z.string().optional(),
29
+ endDate: zod_1.z.string().optional(),
30
+ // Docker image overrides
31
+ srcImage: zod_1.z.string().optional(),
32
+ dstImage: zod_1.z.string().optional(),
33
+ // Connection settings
34
+ connectionName: zod_1.z.string().optional(),
26
35
  })).optional().nullable(),
27
36
  // Defaults
28
37
  defaults: zod_1.z.object({
@@ -33,8 +42,6 @@ exports.ConfigSchema = zod_1.z.object({
33
42
  // Logging
34
43
  logs: zod_1.z.object({
35
44
  level: zod_1.z.enum(['debug', 'info', 'warn', 'error']).default('info'),
36
- directory: zod_1.z.string().optional(),
37
- retention: zod_1.z.string().optional(),
38
45
  }).optional(),
39
46
  });
40
47
  //# sourceMappingURL=config.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/types/config.ts"],"names":[],"mappings":";;;AAAA,6BAAwB;AAExB,gBAAgB;AAChB,kEAAkE;AACrD,QAAA,YAAY,GAAG,OAAC,CAAC,MAAM,CAAC;IACnC,4CAA4C;IAC5C,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACpC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IAEvC,6CAA6C;IAC7C,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,+BAA+B;IAE9D,+CAA+C;IAC/C,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,gCAAgC;QAC/D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE,EAAE,8BAA8B;QAC5D,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;KACxC,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,OAAO,CAAC,CAAC,CAAC;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,CAAC,OAAO,CAAC,MAAM,CAAC;QACjE,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;QAChC,SAAS,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;KACjC,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
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,4CAA4C;IAC5C,GAAG,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,GAAG,EAAE,CAAC,OAAO,CAAC,2BAA2B,CAAC;IAC1D,KAAK,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,SAAS,CAAC;IACpC,YAAY,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,QAAQ,EAAE;IACnC,MAAM,EAAE,OAAC,CAAC,MAAM,EAAE,CAAC,OAAO,CAAC,WAAW,CAAC;IAEvC,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,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,OAAO,CAAC,CAAC,CAAC;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,CAAC,OAAO,CAAC,MAAM,CAAC;KAClE,CAAC,CAAC,QAAQ,EAAE;CACd,CAAC,CAAC"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@faros-fde-sandbox/cli",
3
- "version": "1.0.2",
3
+ "version": "1.1.1",
4
4
  "description": "CLI for Faros AI - sync data, manage sources, view logs",
5
5
  "keywords": [
6
6
  "faros",
@@ -12,9 +12,16 @@
12
12
  "linear",
13
13
  "github"
14
14
  ],
15
- "homepage": "https://www.faros.ai",
15
+ "homepage": "https://github.com/faros-fde/faros-cli#readme",
16
16
  "author": "Faros AI, Inc.",
17
17
  "license": "Apache-2.0",
18
+ "repository": {
19
+ "type": "git",
20
+ "url": "https://github.com/faros-fde/faros-cli.git"
21
+ },
22
+ "bugs": {
23
+ "url": "https://github.com/faros-fde/faros-cli/issues"
24
+ },
18
25
  "bin": {
19
26
  "faros": "./bin/faros"
20
27
  },