@oaysus/cli 0.1.14 → 0.1.16

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
@@ -53,8 +53,8 @@
53
53
  Watch how fast you can go from code to a published website with Oaysus.
54
54
 
55
55
  ```bash
56
- oaysus init # Pick your framework. Name your project.
57
- oaysus push # Your component builds and deploys in seconds.
56
+ oaysus theme init # Pick your framework. Name your project.
57
+ oaysus theme push # Your component builds and deploys in seconds.
58
58
  ```
59
59
 
60
60
  No build pipelines. No complex deployments. Your marketing team creates pages visually, and you get back to building features.
@@ -74,13 +74,13 @@ Requires Node.js 20 or higher.
74
74
  oaysus login
75
75
 
76
76
  # 2. Create a new theme pack project
77
- oaysus init my-components
77
+ oaysus theme init my-components
78
78
 
79
79
  # 3. Navigate to the project
80
80
  cd my-components
81
81
 
82
82
  # 4. Push your components to Oaysus
83
- oaysus push
83
+ oaysus theme push
84
84
  ```
85
85
 
86
86
  That's it. Your components are now available in the visual page builder.
@@ -148,16 +148,51 @@ Marketing edits these props in the visual editor. You never touch the code again
148
148
 
149
149
  ## Commands
150
150
 
151
+ ### Theme Pack Commands
152
+
153
+ Build and manage reusable component libraries.
154
+
155
+ | Command | Description |
156
+ |---------|-------------|
157
+ | `oaysus theme init` | Create a new theme pack project |
158
+ | `oaysus theme create` | Add a component to your theme pack |
159
+ | `oaysus theme validate` | Validate theme pack structure |
160
+ | `oaysus theme push` | Build and upload to Oaysus |
161
+ | `oaysus theme delete` | Delete a theme pack from Oaysus |
162
+
163
+ ### Site Commands
164
+
165
+ Manage website pages and content.
166
+
167
+ | Command | Description |
168
+ |---------|-------------|
169
+ | `oaysus site init` | Create a new website project |
170
+ | `oaysus site validate` | Validate pages against installed components |
171
+ | `oaysus site publish` | Publish pages to your website |
172
+ | `oaysus site pull` | Download pages from server to local files |
173
+
174
+ ### Global Commands
175
+
176
+ Authentication and account management.
177
+
151
178
  | Command | Description |
152
179
  |---------|-------------|
153
- | `oaysus init [name]` | Create a new theme pack project |
154
- | `oaysus create` | Add a component to your project |
155
- | `oaysus validate` | Validate package structure |
156
- | `oaysus build` | Build components locally (no upload) |
157
- | `oaysus push` | Build and upload to Oaysus |
158
- | `oaysus login` | Authenticate with Oaysus |
159
- | `oaysus logout` | Clear authentication |
160
- | `oaysus whoami` | Display current user |
180
+ | `oaysus login` | Authenticate with your Oaysus account |
181
+ | `oaysus whoami` | Display current user information |
182
+ | `oaysus switch` | Switch between your websites |
183
+ | `oaysus logout` | Clear authentication tokens |
184
+
185
+ ### Telemetry Commands
186
+
187
+ Manage anonymous usage analytics.
188
+
189
+ | Command | Description |
190
+ |---------|-------------|
191
+ | `oaysus telemetry status` | Show current telemetry status |
192
+ | `oaysus telemetry enable` | Enable anonymous usage tracking |
193
+ | `oaysus telemetry disable` | Disable anonymous usage tracking |
194
+
195
+ Oaysus CLI collects anonymous usage data to help improve the tool. No personal data, file contents, or source code is collected. You can also disable telemetry via the `OAYSUS_TELEMETRY_DISABLED=1` environment variable.
161
196
 
162
197
  ## Project Structure
163
198
 
package/dist/cli.d.ts.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AA0CA;;;GAGG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,kBAsP3B"}
1
+ {"version":3,"file":"cli.d.ts","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":";AAgDA;;;GAGG;AAEH;;;GAGG;AACH,wBAAsB,MAAM,kBA8R3B"}
package/dist/cli.js CHANGED
@@ -19,10 +19,12 @@ import { SitePublishScreen } from './screens/site/SitePublishScreen.js';
19
19
  import { SitePullScreen } from './screens/site/SitePullScreen.js';
20
20
  import { SiteInitScreen } from './screens/site/SiteInitScreen.js';
21
21
  import { App } from './components/App.js';
22
+ import { TelemetryScreen } from './screens/TelemetryScreen.js';
22
23
  import { saveCommandToHistory } from './lib/shared/command-history.js';
23
24
  import { push } from './lib/push.js';
24
25
  import { switchCommand } from './commands/switch.js';
25
26
  import { checkAuthForCommand } from './lib/shared/auth-middleware.js';
27
+ import { initTelemetry, trackCommand, flushEvents, } from './lib/shared/telemetry.js';
26
28
  // Get package version function
27
29
  const __filename = fileURLToPath(import.meta.url);
28
30
  const __dirname = path.dirname(__filename);
@@ -47,8 +49,21 @@ async function getVersion() {
47
49
  export async function runCli() {
48
50
  const args = process.argv.slice(2);
49
51
  const command = args[0];
50
- // Handle exit callback
51
- const handleExit = () => {
52
+ const startTime = Date.now();
53
+ // Initialize telemetry and show first-run notice if needed
54
+ const telemetryStatus = await initTelemetry();
55
+ if (telemetryStatus.showNotice) {
56
+ console.log('\nOaysus CLI collects anonymous usage data to help improve the tool.');
57
+ console.log('Run `oaysus telemetry disable` to opt out.\n');
58
+ }
59
+ // Handle exit callback with telemetry flush
60
+ const handleExit = async () => {
61
+ // Track command completion
62
+ if (command && command !== 'telemetry') {
63
+ const durationMs = Date.now() - startTime;
64
+ await trackCommand(command, { success: true, durationMs });
65
+ await flushEvents();
66
+ }
52
67
  process.exit(0);
53
68
  };
54
69
  // Handle version flag
@@ -89,6 +104,7 @@ Global Commands
89
104
  logout Clear authentication tokens
90
105
  whoami Display current user information
91
106
  switch Switch between your websites
107
+ telemetry <action> Manage telemetry (status, enable, disable)
92
108
 
93
109
  Options
94
110
  --help, -h Show this help message
@@ -253,6 +269,20 @@ For more information, visit https://oaysus.com/docs/cli
253
269
  render(React.createElement(SwitchScreen, { onExit: handleExit }));
254
270
  }
255
271
  break;
272
+ case 'telemetry': {
273
+ const action = args[1];
274
+ if (!action || !['status', 'enable', 'disable'].includes(action)) {
275
+ console.error('Usage: oaysus telemetry <status|enable|disable>');
276
+ console.log('');
277
+ console.log('Available actions:');
278
+ console.log(' status Show current telemetry status');
279
+ console.log(' enable Enable telemetry');
280
+ console.log(' disable Disable telemetry');
281
+ process.exit(1);
282
+ }
283
+ render(React.createElement(TelemetryScreen, { action, onExit: handleExit }));
284
+ break;
285
+ }
256
286
  default:
257
287
  console.error(`Unknown command: ${command}`);
258
288
  console.log('');
@@ -263,8 +293,16 @@ For more information, visit https://oaysus.com/docs/cli
263
293
  console.log(' oaysus logout Clear authentication');
264
294
  console.log(' oaysus whoami Display current user');
265
295
  console.log(' oaysus switch Switch websites');
296
+ console.log(' oaysus telemetry Manage telemetry settings');
266
297
  console.log('');
267
298
  console.log('Run "oaysus --help" for more information');
299
+ // Track unknown command
300
+ await trackCommand(command, {
301
+ success: false,
302
+ errorType: 'UnknownCommand',
303
+ errorMessage: `Unknown command: ${command}`,
304
+ });
305
+ await flushEvents();
268
306
  process.exit(1);
269
307
  }
270
308
  }
package/dist/cli.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,86 @@
1
+ /**
2
+ * CLI Telemetry Module
3
+ *
4
+ * Tracks anonymous usage data to help improve the Oaysus CLI.
5
+ * Users can opt out via:
6
+ * - Command: oaysus telemetry disable
7
+ * - Env var: OAYSUS_TELEMETRY_DISABLED=1
8
+ * - Config file: ~/.oaysus/config.json -> telemetryEnabled: false
9
+ */
10
+ /**
11
+ * Telemetry event structure
12
+ */
13
+ export interface TelemetryEvent {
14
+ eventName: string;
15
+ cliVersion: string;
16
+ timestamp?: string;
17
+ userId?: string;
18
+ email?: string;
19
+ websiteId?: string;
20
+ nodeVersion?: string;
21
+ osPlatform?: string;
22
+ osArch?: string;
23
+ command?: string;
24
+ success?: string;
25
+ durationMs?: number;
26
+ errorType?: string;
27
+ errorMessage?: string;
28
+ properties?: Record<string, unknown>;
29
+ }
30
+ /**
31
+ * Check if telemetry is enabled
32
+ * Priority: Env var > Config file > Default (enabled)
33
+ */
34
+ export declare function isTelemetryEnabled(): Promise<boolean>;
35
+ /**
36
+ * Enable or disable telemetry
37
+ */
38
+ export declare function setTelemetryEnabled(enabled: boolean): Promise<void>;
39
+ /**
40
+ * Check if the telemetry notice has been shown
41
+ */
42
+ export declare function hasSeenTelemetryNotice(): Promise<boolean>;
43
+ /**
44
+ * Mark the telemetry notice as shown
45
+ */
46
+ export declare function markTelemetryNoticeShown(): Promise<void>;
47
+ /**
48
+ * Get telemetry status for display
49
+ */
50
+ export declare function getTelemetryStatus(): Promise<{
51
+ enabled: boolean;
52
+ noticeShown: boolean;
53
+ envDisabled: boolean;
54
+ }>;
55
+ /**
56
+ * Track a telemetry event (queued for batching)
57
+ */
58
+ export declare function trackEvent(eventName: string, properties?: Record<string, unknown>): Promise<void>;
59
+ /**
60
+ * Track a CLI command execution
61
+ */
62
+ export declare function trackCommand(command: string, options?: {
63
+ success?: boolean;
64
+ durationMs?: number;
65
+ errorType?: string;
66
+ errorMessage?: string;
67
+ properties?: Record<string, unknown>;
68
+ }): Promise<void>;
69
+ /**
70
+ * Flush all queued events to the backend
71
+ * GA4 forwarding is handled server-side to keep credentials secure
72
+ */
73
+ export declare function flushEvents(): Promise<void>;
74
+ /**
75
+ * Initialize telemetry on CLI startup
76
+ * Shows first-run notice if needed
77
+ */
78
+ export declare function initTelemetry(): Promise<{
79
+ enabled: boolean;
80
+ showNotice: boolean;
81
+ }>;
82
+ /**
83
+ * Graceful shutdown - flush any remaining events
84
+ */
85
+ export declare function shutdownTelemetry(): Promise<void>;
86
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../../../src/lib/shared/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAqBH;;GAEG;AACH,MAAM,WAAW,cAAc;IAC7B,SAAS,EAAE,MAAM,CAAC;IAClB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,OAAO,CAAC,EAAE,MAAM,CAAC;IACjB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC;AA2CD;;;GAGG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,OAAO,CAAC,CAU3D;AAED;;GAEG;AACH,wBAAsB,mBAAmB,CAAC,OAAO,EAAE,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAIzE;AAED;;GAEG;AACH,wBAAsB,sBAAsB,IAAI,OAAO,CAAC,OAAO,CAAC,CAG/D;AAED;;GAEG;AACH,wBAAsB,wBAAwB,IAAI,OAAO,CAAC,IAAI,CAAC,CAI9D;AAED;;GAEG;AACH,wBAAsB,kBAAkB,IAAI,OAAO,CAAC;IAClD,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,OAAO,CAAC;IACrB,WAAW,EAAE,OAAO,CAAC;CACtB,CAAC,CAUD;AAgCD;;GAEG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GACnC,OAAO,CAAC,IAAI,CAAC,CA+Cf;AAED;;GAEG;AACH,wBAAsB,YAAY,CAChC,OAAO,EAAE,MAAM,EACf,OAAO,CAAC,EAAE;IACR,OAAO,CAAC,EAAE,OAAO,CAAC;IAClB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,YAAY,CAAC,EAAE,MAAM,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACtC,GACA,OAAO,CAAC,IAAI,CAAC,CA8Cf;AAED;;;GAGG;AACH,wBAAsB,WAAW,IAAI,OAAO,CAAC,IAAI,CAAC,CAiBjD;AA8BD;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC;IAC7C,OAAO,EAAE,OAAO,CAAC;IACjB,UAAU,EAAE,OAAO,CAAC;CACrB,CAAC,CAmBD;AAED;;GAEG;AACH,wBAAsB,iBAAiB,IAAI,OAAO,CAAC,IAAI,CAAC,CASvD"}
@@ -0,0 +1,310 @@
1
+ /**
2
+ * CLI Telemetry Module
3
+ *
4
+ * Tracks anonymous usage data to help improve the Oaysus CLI.
5
+ * Users can opt out via:
6
+ * - Command: oaysus telemetry disable
7
+ * - Env var: OAYSUS_TELEMETRY_DISABLED=1
8
+ * - Config file: ~/.oaysus/config.json -> telemetryEnabled: false
9
+ */
10
+ import fs from 'fs/promises';
11
+ import path from 'path';
12
+ import os from 'os';
13
+ import axios from 'axios';
14
+ import { CONFIG_DIR, SSO_BASE_URL, IS_LOCAL_DEV, debug as log, debugError as logError } from './config.js';
15
+ import { loadCredentials } from './auth.js';
16
+ // GA4 is handled server-side in FastAPI to keep credentials secure
17
+ // Events sent to our backend are automatically forwarded to GA4
18
+ // Telemetry config file path
19
+ const TELEMETRY_CONFIG_PATH = path.join(CONFIG_DIR, 'config.json');
20
+ // Event queue for batching
21
+ let eventQueue = [];
22
+ let flushTimeout = null;
23
+ const FLUSH_INTERVAL_MS = 5000; // Flush every 5 seconds
24
+ const MAX_QUEUE_SIZE = 10; // Flush when queue reaches this size
25
+ /**
26
+ * Load telemetry configuration from disk
27
+ */
28
+ async function loadTelemetryConfig() {
29
+ try {
30
+ const data = await fs.readFile(TELEMETRY_CONFIG_PATH, 'utf-8');
31
+ return JSON.parse(data);
32
+ }
33
+ catch {
34
+ // Default config: enabled with notice not shown
35
+ return {
36
+ telemetryEnabled: true,
37
+ telemetryNoticeShown: false,
38
+ };
39
+ }
40
+ }
41
+ /**
42
+ * Save telemetry configuration to disk
43
+ */
44
+ async function saveTelemetryConfig(config) {
45
+ const configDir = path.dirname(TELEMETRY_CONFIG_PATH);
46
+ // Create config directory if it doesn't exist
47
+ await fs.mkdir(configDir, { recursive: true });
48
+ // Write config
49
+ await fs.writeFile(TELEMETRY_CONFIG_PATH, JSON.stringify(config, null, 2), { mode: 0o600 });
50
+ }
51
+ /**
52
+ * Check if telemetry is enabled
53
+ * Priority: Env var > Config file > Default (enabled)
54
+ */
55
+ export async function isTelemetryEnabled() {
56
+ // Check environment variable first (highest priority)
57
+ if (process.env.OAYSUS_TELEMETRY_DISABLED === '1' ||
58
+ process.env.OAYSUS_TELEMETRY_DISABLED === 'true') {
59
+ return false;
60
+ }
61
+ // Check config file
62
+ const config = await loadTelemetryConfig();
63
+ return config.telemetryEnabled;
64
+ }
65
+ /**
66
+ * Enable or disable telemetry
67
+ */
68
+ export async function setTelemetryEnabled(enabled) {
69
+ const config = await loadTelemetryConfig();
70
+ config.telemetryEnabled = enabled;
71
+ await saveTelemetryConfig(config);
72
+ }
73
+ /**
74
+ * Check if the telemetry notice has been shown
75
+ */
76
+ export async function hasSeenTelemetryNotice() {
77
+ const config = await loadTelemetryConfig();
78
+ return config.telemetryNoticeShown;
79
+ }
80
+ /**
81
+ * Mark the telemetry notice as shown
82
+ */
83
+ export async function markTelemetryNoticeShown() {
84
+ const config = await loadTelemetryConfig();
85
+ config.telemetryNoticeShown = true;
86
+ await saveTelemetryConfig(config);
87
+ }
88
+ /**
89
+ * Get telemetry status for display
90
+ */
91
+ export async function getTelemetryStatus() {
92
+ const envDisabled = process.env.OAYSUS_TELEMETRY_DISABLED === '1' ||
93
+ process.env.OAYSUS_TELEMETRY_DISABLED === 'true';
94
+ const config = await loadTelemetryConfig();
95
+ return {
96
+ enabled: !envDisabled && config.telemetryEnabled,
97
+ noticeShown: config.telemetryNoticeShown,
98
+ envDisabled,
99
+ };
100
+ }
101
+ /**
102
+ * Get current CLI version from package.json
103
+ */
104
+ async function getCliVersion() {
105
+ try {
106
+ // Try to find package.json relative to this file
107
+ const possiblePaths = [
108
+ path.join(import.meta.dirname || __dirname || process.cwd(), '../../package.json'),
109
+ path.join(import.meta.dirname || __dirname || process.cwd(), '../../../package.json'),
110
+ path.join(process.cwd(), 'package.json'),
111
+ ];
112
+ for (const pkgPath of possiblePaths) {
113
+ try {
114
+ const data = await fs.readFile(pkgPath, 'utf-8');
115
+ const pkg = JSON.parse(data);
116
+ if (pkg.name === '@oaysus/cli' || pkg.name === 'oaysus-cli') {
117
+ return pkg.version || '0.0.0';
118
+ }
119
+ }
120
+ catch {
121
+ continue;
122
+ }
123
+ }
124
+ return '0.0.0';
125
+ }
126
+ catch {
127
+ return '0.0.0';
128
+ }
129
+ }
130
+ /**
131
+ * Track a telemetry event (queued for batching)
132
+ */
133
+ export async function trackEvent(eventName, properties) {
134
+ // Check if telemetry is enabled
135
+ const enabled = await isTelemetryEnabled();
136
+ if (!enabled) {
137
+ return;
138
+ }
139
+ try {
140
+ // Get user context if logged in
141
+ const credentials = await loadCredentials();
142
+ const cliVersion = await getCliVersion();
143
+ const event = {
144
+ eventName,
145
+ cliVersion,
146
+ timestamp: new Date().toISOString(),
147
+ nodeVersion: process.version,
148
+ osPlatform: os.platform(),
149
+ osArch: os.arch(),
150
+ properties,
151
+ };
152
+ // Add user context if available
153
+ if (credentials) {
154
+ event.userId = credentials.userId;
155
+ event.email = credentials.email;
156
+ event.websiteId = credentials.websiteId;
157
+ }
158
+ // Add to queue
159
+ eventQueue.push(event);
160
+ // Flush if queue is full
161
+ if (eventQueue.length >= MAX_QUEUE_SIZE) {
162
+ await flushEvents();
163
+ }
164
+ else if (!flushTimeout) {
165
+ // Set up delayed flush
166
+ flushTimeout = setTimeout(() => {
167
+ flushEvents().catch(() => {
168
+ // Silently ignore flush errors
169
+ });
170
+ }, FLUSH_INTERVAL_MS);
171
+ }
172
+ }
173
+ catch (error) {
174
+ // Silently ignore telemetry errors - never interrupt user flow
175
+ log('[TELEMETRY] Error tracking event:', error);
176
+ }
177
+ }
178
+ /**
179
+ * Track a CLI command execution
180
+ */
181
+ export async function trackCommand(command, options) {
182
+ const enabled = await isTelemetryEnabled();
183
+ if (!enabled) {
184
+ return;
185
+ }
186
+ try {
187
+ const credentials = await loadCredentials();
188
+ const cliVersion = await getCliVersion();
189
+ const event = {
190
+ eventName: 'cli_command',
191
+ cliVersion,
192
+ timestamp: new Date().toISOString(),
193
+ nodeVersion: process.version,
194
+ osPlatform: os.platform(),
195
+ osArch: os.arch(),
196
+ command,
197
+ success: options?.success !== undefined ? String(options.success) : undefined,
198
+ durationMs: options?.durationMs,
199
+ errorType: options?.errorType,
200
+ errorMessage: options?.errorMessage,
201
+ properties: options?.properties,
202
+ };
203
+ // Add user context if available
204
+ if (credentials) {
205
+ event.userId = credentials.userId;
206
+ event.email = credentials.email;
207
+ event.websiteId = credentials.websiteId;
208
+ }
209
+ // Add to queue
210
+ eventQueue.push(event);
211
+ // Flush if queue is full
212
+ if (eventQueue.length >= MAX_QUEUE_SIZE) {
213
+ await flushEvents();
214
+ }
215
+ else if (!flushTimeout) {
216
+ flushTimeout = setTimeout(() => {
217
+ flushEvents().catch(() => { });
218
+ }, FLUSH_INTERVAL_MS);
219
+ }
220
+ }
221
+ catch (error) {
222
+ log('[TELEMETRY] Error tracking command:', error);
223
+ }
224
+ }
225
+ /**
226
+ * Flush all queued events to the backend
227
+ * GA4 forwarding is handled server-side to keep credentials secure
228
+ */
229
+ export async function flushEvents() {
230
+ if (eventQueue.length === 0) {
231
+ return;
232
+ }
233
+ // Clear timeout
234
+ if (flushTimeout) {
235
+ clearTimeout(flushTimeout);
236
+ flushTimeout = null;
237
+ }
238
+ // Get events to send and clear queue
239
+ const eventsToSend = [...eventQueue];
240
+ eventQueue = [];
241
+ // Send to FastAPI backend (which forwards to GA4 server-side)
242
+ await sendToBackend(eventsToSend);
243
+ }
244
+ /**
245
+ * Send events to FastAPI backend
246
+ */
247
+ async function sendToBackend(events) {
248
+ try {
249
+ const baseUrl = SSO_BASE_URL.replace('/sso', '').replace('auth.', 'api.');
250
+ // For local dev, use localhost
251
+ const apiUrl = IS_LOCAL_DEV
252
+ ? 'http://localhost:3003/oaysus/cli-telemetry/events'
253
+ : `${baseUrl}/oaysus/cli-telemetry/events`;
254
+ log('[TELEMETRY] Sending to backend:', apiUrl);
255
+ await axios.post(apiUrl, { events }, {
256
+ timeout: 5000, // 5 second timeout
257
+ headers: {
258
+ 'Content-Type': 'application/json',
259
+ },
260
+ });
261
+ log('[TELEMETRY] Successfully sent to backend');
262
+ }
263
+ catch (error) {
264
+ // Log but don't throw - telemetry should never interrupt user flow
265
+ logError('[TELEMETRY] Failed to send to backend:', error);
266
+ }
267
+ }
268
+ /**
269
+ * Initialize telemetry on CLI startup
270
+ * Shows first-run notice if needed
271
+ */
272
+ export async function initTelemetry() {
273
+ const status = await getTelemetryStatus();
274
+ // If env var disabled, telemetry is off
275
+ if (status.envDisabled) {
276
+ return { enabled: false, showNotice: false };
277
+ }
278
+ // Check if we need to show the first-run notice
279
+ const showNotice = status.enabled && !status.noticeShown;
280
+ if (showNotice) {
281
+ await markTelemetryNoticeShown();
282
+ }
283
+ return {
284
+ enabled: status.enabled,
285
+ showNotice,
286
+ };
287
+ }
288
+ /**
289
+ * Graceful shutdown - flush any remaining events
290
+ */
291
+ export async function shutdownTelemetry() {
292
+ if (flushTimeout) {
293
+ clearTimeout(flushTimeout);
294
+ flushTimeout = null;
295
+ }
296
+ if (eventQueue.length > 0) {
297
+ await flushEvents();
298
+ }
299
+ }
300
+ // Handle process exit - try to flush events
301
+ process.on('exit', () => {
302
+ // Note: async operations don't work in exit handler
303
+ // Events will be lost if not flushed before exit
304
+ });
305
+ // Handle SIGINT (Ctrl+C) - flush events before exit
306
+ process.on('SIGINT', async () => {
307
+ await shutdownTelemetry();
308
+ process.exit(0);
309
+ });
310
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../../../src/lib/shared/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,aAAa,CAAC;AAC7B,OAAO,IAAI,MAAM,MAAM,CAAC;AACxB,OAAO,EAAE,MAAM,IAAI,CAAC;AACpB,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,YAAY,EAAE,KAAK,IAAI,GAAG,EAAE,UAAU,IAAI,QAAQ,EAAE,MAAM,aAAa,CAAC;AAC3G,OAAO,EAAE,eAAe,EAAE,MAAM,WAAW,CAAC;AAE5C,mEAAmE;AACnE,gEAAgE;AAEhE,6BAA6B;AAC7B,MAAM,qBAAqB,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,aAAa,CAAC,CAAC;AAEnE,2BAA2B;AAC3B,IAAI,UAAU,GAAqB,EAAE,CAAC;AACtC,IAAI,YAAY,GAA0B,IAAI,CAAC;AAC/C,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,wBAAwB;AACxD,MAAM,cAAc,GAAG,EAAE,CAAC,CAAC,qCAAqC;AA+BhE;;GAEG;AACH,KAAK,UAAU,mBAAmB;IAChC,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,qBAAqB,EAAE,OAAO,CAAC,CAAC;QAC/D,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;IAC1B,CAAC;IAAC,MAAM,CAAC;QACP,gDAAgD;QAChD,OAAO;YACL,gBAAgB,EAAE,IAAI;YACtB,oBAAoB,EAAE,KAAK;SAC5B,CAAC;IACJ,CAAC;AACH,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,mBAAmB,CAAC,MAAuB;IACxD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,qBAAqB,CAAC,CAAC;IAEtD,8CAA8C;IAC9C,MAAM,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;IAE/C,eAAe;IACf,MAAM,EAAE,CAAC,SAAS,CAChB,qBAAqB,EACrB,IAAI,CAAC,SAAS,CAAC,MAAM,EAAE,IAAI,EAAE,CAAC,CAAC,EAC/B,EAAE,IAAI,EAAE,KAAK,EAAE,CAChB,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IACtC,sDAAsD;IACtD,IAAI,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG;QAC7C,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM,EAAE,CAAC;QACrD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,oBAAoB;IACpB,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,OAAO,MAAM,CAAC,gBAAgB,CAAC;AACjC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,mBAAmB,CAAC,OAAgB;IACxD,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,MAAM,CAAC,gBAAgB,GAAG,OAAO,CAAC;IAClC,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,sBAAsB;IAC1C,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,OAAO,MAAM,CAAC,oBAAoB,CAAC;AACrC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,wBAAwB;IAC5C,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAC3C,MAAM,CAAC,oBAAoB,GAAG,IAAI,CAAC;IACnC,MAAM,mBAAmB,CAAC,MAAM,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,kBAAkB;IAKtC,MAAM,WAAW,GAAG,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,GAAG;QAC7C,OAAO,CAAC,GAAG,CAAC,yBAAyB,KAAK,MAAM,CAAC;IACrE,MAAM,MAAM,GAAG,MAAM,mBAAmB,EAAE,CAAC;IAE3C,OAAO;QACL,OAAO,EAAE,CAAC,WAAW,IAAI,MAAM,CAAC,gBAAgB;QAChD,WAAW,EAAE,MAAM,CAAC,oBAAoB;QACxC,WAAW;KACZ,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa;IAC1B,IAAI,CAAC;QACH,iDAAiD;QACjD,MAAM,aAAa,GAAG;YACpB,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,oBAAoB,CAAC;YAClF,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,IAAI,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,EAAE,uBAAuB,CAAC;YACrF,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,cAAc,CAAC;SACzC,CAAC;QAEF,KAAK,MAAM,OAAO,IAAI,aAAa,EAAE,CAAC;YACpC,IAAI,CAAC;gBACH,MAAM,IAAI,GAAG,MAAM,EAAE,CAAC,QAAQ,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC;gBACjD,MAAM,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC;gBAC7B,IAAI,GAAG,CAAC,IAAI,KAAK,aAAa,IAAI,GAAG,CAAC,IAAI,KAAK,YAAY,EAAE,CAAC;oBAC5D,OAAO,GAAG,CAAC,OAAO,IAAI,OAAO,CAAC;gBAChC,CAAC;YACH,CAAC;YAAC,MAAM,CAAC;gBACP,SAAS;YACX,CAAC;QACH,CAAC;QAED,OAAO,OAAO,CAAC;IACjB,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,OAAO,CAAC;IACjB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,UAAU,CAC9B,SAAiB,EACjB,UAAoC;IAEpC,gCAAgC;IAChC,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,gCAAgC;QAChC,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QAEzC,MAAM,KAAK,GAAmB;YAC5B,SAAS;YACT,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE;YACzB,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE;YACjB,UAAU;SACX,CAAC;QAEF,gCAAgC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAChC,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,yBAAyB;QACzB,IAAI,UAAU,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YACxC,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,uBAAuB;YACvB,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE;oBACvB,+BAA+B;gBACjC,CAAC,CAAC,CAAC;YACL,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,+DAA+D;QAC/D,GAAG,CAAC,mCAAmC,EAAE,KAAK,CAAC,CAAC;IAClD,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAChC,OAAe,EACf,OAMC;IAED,MAAM,OAAO,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC3C,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,OAAO;IACT,CAAC;IAED,IAAI,CAAC;QACH,MAAM,WAAW,GAAG,MAAM,eAAe,EAAE,CAAC;QAC5C,MAAM,UAAU,GAAG,MAAM,aAAa,EAAE,CAAC;QAEzC,MAAM,KAAK,GAAmB;YAC5B,SAAS,EAAE,aAAa;YACxB,UAAU;YACV,SAAS,EAAE,IAAI,IAAI,EAAE,CAAC,WAAW,EAAE;YACnC,WAAW,EAAE,OAAO,CAAC,OAAO;YAC5B,UAAU,EAAE,EAAE,CAAC,QAAQ,EAAE;YACzB,MAAM,EAAE,EAAE,CAAC,IAAI,EAAE;YACjB,OAAO;YACP,OAAO,EAAE,OAAO,EAAE,OAAO,KAAK,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,SAAS;YAC7E,UAAU,EAAE,OAAO,EAAE,UAAU;YAC/B,SAAS,EAAE,OAAO,EAAE,SAAS;YAC7B,YAAY,EAAE,OAAO,EAAE,YAAY;YACnC,UAAU,EAAE,OAAO,EAAE,UAAU;SAChC,CAAC;QAEF,gCAAgC;QAChC,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC;YAClC,KAAK,CAAC,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC;YAChC,KAAK,CAAC,SAAS,GAAG,WAAW,CAAC,SAAS,CAAC;QAC1C,CAAC;QAED,eAAe;QACf,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAEvB,yBAAyB;QACzB,IAAI,UAAU,CAAC,MAAM,IAAI,cAAc,EAAE,CAAC;YACxC,MAAM,WAAW,EAAE,CAAC;QACtB,CAAC;aAAM,IAAI,CAAC,YAAY,EAAE,CAAC;YACzB,YAAY,GAAG,UAAU,CAAC,GAAG,EAAE;gBAC7B,WAAW,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,GAAE,CAAC,CAAC,CAAC;YAChC,CAAC,EAAE,iBAAiB,CAAC,CAAC;QACxB,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,GAAG,CAAC,qCAAqC,EAAE,KAAK,CAAC,CAAC;IACpD,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW;IAC/B,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC5B,OAAO;IACT,CAAC;IAED,gBAAgB;IAChB,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,qCAAqC;IACrC,MAAM,YAAY,GAAG,CAAC,GAAG,UAAU,CAAC,CAAC;IACrC,UAAU,GAAG,EAAE,CAAC;IAEhB,8DAA8D;IAC9D,MAAM,aAAa,CAAC,YAAY,CAAC,CAAC;AACpC,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,aAAa,CAAC,MAAwB;IACnD,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;QAE1E,+BAA+B;QAC/B,MAAM,MAAM,GAAG,YAAY;YACzB,CAAC,CAAC,mDAAmD;YACrD,CAAC,CAAC,GAAG,OAAO,8BAA8B,CAAC;QAE7C,GAAG,CAAC,iCAAiC,EAAE,MAAM,CAAC,CAAC;QAE/C,MAAM,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,EAAE,MAAM,EAAE,EAAE;YACnC,OAAO,EAAE,IAAI,EAAE,mBAAmB;YAClC,OAAO,EAAE;gBACP,cAAc,EAAE,kBAAkB;aACnC;SACF,CAAC,CAAC;QAEH,GAAG,CAAC,0CAA0C,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,mEAAmE;QACnE,QAAQ,CAAC,wCAAwC,EAAE,KAAK,CAAC,CAAC;IAC5D,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa;IAIjC,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAE1C,wCAAwC;IACxC,IAAI,MAAM,CAAC,WAAW,EAAE,CAAC;QACvB,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;IAC/C,CAAC;IAED,gDAAgD;IAChD,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,WAAW,CAAC;IAEzD,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,wBAAwB,EAAE,CAAC;IACnC,CAAC;IAED,OAAO;QACL,OAAO,EAAE,MAAM,CAAC,OAAO;QACvB,UAAU;KACX,CAAC;AACJ,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,iBAAiB;IACrC,IAAI,YAAY,EAAE,CAAC;QACjB,YAAY,CAAC,YAAY,CAAC,CAAC;QAC3B,YAAY,GAAG,IAAI,CAAC;IACtB,CAAC;IAED,IAAI,UAAU,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC1B,MAAM,WAAW,EAAE,CAAC;IACtB,CAAC;AACH,CAAC;AAED,4CAA4C;AAC5C,OAAO,CAAC,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE;IACtB,oDAAoD;IACpD,iDAAiD;AACnD,CAAC,CAAC,CAAC;AAEH,oDAAoD;AACpD,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,KAAK,IAAI,EAAE;IAC9B,MAAM,iBAAiB,EAAE,CAAC;IAC1B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC,CAAC,CAAC"}
@@ -0,0 +1,8 @@
1
+ import React from 'react';
2
+ interface TelemetryScreenProps {
3
+ action: 'status' | 'enable' | 'disable';
4
+ onExit?: () => void;
5
+ }
6
+ export declare function TelemetryScreen({ action, onExit }: TelemetryScreenProps): React.JSX.Element;
7
+ export {};
8
+ //# sourceMappingURL=TelemetryScreen.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryScreen.d.ts","sourceRoot":"","sources":["../../src/screens/TelemetryScreen.tsx"],"names":[],"mappings":"AAAA,OAAO,KAA8B,MAAM,OAAO,CAAC;AAOnD,UAAU,oBAAoB;IAC5B,MAAM,EAAE,QAAQ,GAAG,QAAQ,GAAG,SAAS,CAAC;IACxC,MAAM,CAAC,EAAE,MAAM,IAAI,CAAC;CACrB;AAED,wBAAgB,eAAe,CAAC,EAAE,MAAM,EAAE,MAAM,EAAE,EAAE,oBAAoB,qBAwGvE"}
@@ -0,0 +1,72 @@
1
+ import React, { useEffect, useState } from 'react';
2
+ import { Box, Text, useApp } from 'ink';
3
+ import { getTelemetryStatus, setTelemetryEnabled, } from '../lib/shared/telemetry.js';
4
+ export function TelemetryScreen({ action, onExit }) {
5
+ const { exit } = useApp();
6
+ const [status, setStatus] = useState(null);
7
+ const [message, setMessage] = useState('');
8
+ const [done, setDone] = useState(false);
9
+ useEffect(() => {
10
+ async function handleAction() {
11
+ try {
12
+ if (action === 'status') {
13
+ const currentStatus = await getTelemetryStatus();
14
+ setStatus(currentStatus);
15
+ setDone(true);
16
+ }
17
+ else if (action === 'enable') {
18
+ await setTelemetryEnabled(true);
19
+ setMessage('Telemetry has been enabled.');
20
+ setDone(true);
21
+ }
22
+ else if (action === 'disable') {
23
+ await setTelemetryEnabled(false);
24
+ setMessage('Telemetry has been disabled.');
25
+ setDone(true);
26
+ }
27
+ }
28
+ catch (error) {
29
+ setMessage(`Error: ${error instanceof Error ? error.message : 'Unknown error'}`);
30
+ setDone(true);
31
+ }
32
+ }
33
+ handleAction();
34
+ }, [action]);
35
+ useEffect(() => {
36
+ if (done) {
37
+ const timer = setTimeout(() => {
38
+ if (onExit) {
39
+ onExit();
40
+ }
41
+ exit();
42
+ }, 100);
43
+ return () => clearTimeout(timer);
44
+ }
45
+ }, [done, exit, onExit]);
46
+ if (action === 'status' && status) {
47
+ return (React.createElement(Box, { flexDirection: "column", padding: 1 },
48
+ React.createElement(Box, { marginBottom: 1 },
49
+ React.createElement(Text, { bold: true }, "Oaysus CLI Telemetry Status")),
50
+ React.createElement(Box, { flexDirection: "column" },
51
+ React.createElement(Box, null,
52
+ React.createElement(Text, null, "Status: "),
53
+ status.enabled ? (React.createElement(Text, { color: "green", bold: true }, "Enabled")) : (React.createElement(Text, { color: "red", bold: true }, "Disabled"))),
54
+ status.envDisabled && (React.createElement(Box, { marginTop: 1 },
55
+ React.createElement(Text, { color: "yellow" }, "Note: Telemetry is disabled via OAYSUS_TELEMETRY_DISABLED environment variable."))),
56
+ React.createElement(Box, { marginTop: 1, flexDirection: "column" },
57
+ React.createElement(Text, { dimColor: true }, "Oaysus CLI collects anonymous usage data to help improve the tool."),
58
+ React.createElement(Text, { dimColor: true }, "No personal data, file contents, or source code is collected.")),
59
+ React.createElement(Box, { marginTop: 1, flexDirection: "column" },
60
+ React.createElement(Text, { dimColor: true }, "Commands:"),
61
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry enable - Enable telemetry"),
62
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry disable - Disable telemetry"),
63
+ React.createElement(Text, { dimColor: true }, " oaysus telemetry status - Show current status")))));
64
+ }
65
+ if (message) {
66
+ return (React.createElement(Box, { padding: 1 },
67
+ React.createElement(Text, null, message)));
68
+ }
69
+ return (React.createElement(Box, { padding: 1 },
70
+ React.createElement(Text, null, "Processing...")));
71
+ }
72
+ //# sourceMappingURL=TelemetryScreen.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"TelemetryScreen.js","sourceRoot":"","sources":["../../src/screens/TelemetryScreen.tsx"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@oaysus/cli",
3
- "version": "0.1.14",
3
+ "version": "0.1.16",
4
4
  "description": "Oaysus CLI - Professional developer tool for component uploads",
5
5
  "type": "module",
6
6
  "bin": {