@sudocode-ai/cli 0.1.20 → 0.1.22

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (55) hide show
  1. package/dist/cli/config-commands.d.ts +28 -0
  2. package/dist/cli/config-commands.d.ts.map +1 -0
  3. package/dist/cli/config-commands.js +203 -0
  4. package/dist/cli/config-commands.js.map +1 -0
  5. package/dist/cli/feedback-commands.d.ts.map +1 -1
  6. package/dist/cli/feedback-commands.js +4 -0
  7. package/dist/cli/feedback-commands.js.map +1 -1
  8. package/dist/cli/init-commands.d.ts.map +1 -1
  9. package/dist/cli/init-commands.js +46 -19
  10. package/dist/cli/init-commands.js.map +1 -1
  11. package/dist/cli/issue-commands.d.ts.map +1 -1
  12. package/dist/cli/issue-commands.js +16 -0
  13. package/dist/cli/issue-commands.js.map +1 -1
  14. package/dist/cli/query-commands.d.ts.map +1 -1
  15. package/dist/cli/query-commands.js +4 -0
  16. package/dist/cli/query-commands.js.map +1 -1
  17. package/dist/cli/relationship-commands.d.ts.map +1 -1
  18. package/dist/cli/relationship-commands.js +4 -0
  19. package/dist/cli/relationship-commands.js.map +1 -1
  20. package/dist/cli/spec-commands.d.ts.map +1 -1
  21. package/dist/cli/spec-commands.js +13 -0
  22. package/dist/cli/spec-commands.js.map +1 -1
  23. package/dist/cli/sync-commands.d.ts.map +1 -1
  24. package/dist/cli/sync-commands.js +15 -2
  25. package/dist/cli/sync-commands.js.map +1 -1
  26. package/dist/cli/update-commands.d.ts.map +1 -1
  27. package/dist/cli/update-commands.js +251 -8
  28. package/dist/cli/update-commands.js.map +1 -1
  29. package/dist/cli.js +25 -0
  30. package/dist/cli.js.map +1 -1
  31. package/dist/config.d.ts +34 -3
  32. package/dist/config.d.ts.map +1 -1
  33. package/dist/config.js +181 -22
  34. package/dist/config.js.map +1 -1
  35. package/dist/import.d.ts.map +1 -1
  36. package/dist/import.js +13 -0
  37. package/dist/import.js.map +1 -1
  38. package/dist/install-source.d.ts +37 -0
  39. package/dist/install-source.d.ts.map +1 -0
  40. package/dist/install-source.js +136 -0
  41. package/dist/install-source.js.map +1 -0
  42. package/dist/telemetry.d.ts +84 -0
  43. package/dist/telemetry.d.ts.map +1 -0
  44. package/dist/telemetry.js +410 -0
  45. package/dist/telemetry.js.map +1 -0
  46. package/dist/update-checker.d.ts.map +1 -1
  47. package/dist/update-checker.js +30 -2
  48. package/dist/update-checker.js.map +1 -1
  49. package/dist/version.d.ts.map +1 -1
  50. package/dist/version.js +16 -5
  51. package/dist/version.js.map +1 -1
  52. package/dist/watcher.d.ts.map +1 -1
  53. package/dist/watcher.js +213 -38
  54. package/dist/watcher.js.map +1 -1
  55. package/package.json +3 -2
@@ -0,0 +1,84 @@
1
+ /**
2
+ * CLI Telemetry via OTLP with Buffer-and-Flush
3
+ *
4
+ * Appends usage events to a local buffer file (<1ms per call).
5
+ * Flushes to a configured OTLP endpoint when conditions are met.
6
+ * Constructs OTLP/HTTP JSON manually — no SDK dependency.
7
+ */
8
+ export interface TelemetryEvent {
9
+ /** CLI command name (e.g., "upsert_issue", "link") */
10
+ cmd: string;
11
+ /** Whether the command succeeded */
12
+ success: boolean;
13
+ /** Duration in milliseconds */
14
+ dur: number;
15
+ /** Session ID from SUDOCODE_SESSION_ID env var (optional) */
16
+ sid?: string;
17
+ /** Command-specific attributes */
18
+ attrs?: Record<string, string | number | boolean | undefined>;
19
+ }
20
+ interface BufferLine {
21
+ ts: number;
22
+ cmd: string;
23
+ success: boolean;
24
+ dur: number;
25
+ sid?: string;
26
+ attrs?: Record<string, string | number | boolean | undefined>;
27
+ }
28
+ export interface TelemetryConfig {
29
+ endpoint: string;
30
+ authHeader: string;
31
+ projectId: string;
32
+ installationId: string;
33
+ serviceVersion: string;
34
+ }
35
+ /**
36
+ * Check if telemetry is enabled by reading config.
37
+ * Returns TelemetryConfig if enabled, null otherwise.
38
+ */
39
+ export declare function getTelemetryConfig(outputDir: string): TelemetryConfig | null;
40
+ /**
41
+ * Record a telemetry event and maybe flush the buffer.
42
+ * Convenience wrapper for command handlers — handles config check,
43
+ * event recording, and flush in one call. All errors caught silently.
44
+ */
45
+ export declare function trackCommand(outputDir: string, command: string, args: Record<string, unknown>, success: boolean, durationMs: number): Promise<void>;
46
+ /**
47
+ * Append a telemetry event to the buffer file.
48
+ * <1ms overhead — sync file append.
49
+ * No-op if telemetry is not configured.
50
+ */
51
+ export declare function recordEvent(outputDir: string, event: TelemetryEvent): void;
52
+ /**
53
+ * Check flush conditions and flush if needed.
54
+ * Only adds latency (~100-200ms) when actually flushing.
55
+ */
56
+ export declare function maybeFlush(outputDir: string, config: TelemetryConfig): Promise<void>;
57
+ /**
58
+ * Build OTLP/HTTP JSON Log Records payload from buffered events.
59
+ */
60
+ export declare function buildOtlpPayload(events: BufferLine[], config: TelemetryConfig): object;
61
+ /**
62
+ * Extract command-specific attributes from CLI command name and args.
63
+ */
64
+ export declare function extractAttributes(command: string, args: Record<string, unknown>): Record<string, string | number | boolean | undefined>;
65
+ /**
66
+ * Get the installation config directory path.
67
+ * Uses XDG_CONFIG_HOME if set, otherwise ~/.config/sudocode
68
+ * (same location as cli/src/auth/credentials.ts)
69
+ */
70
+ export declare function getInstallationConfigDir(): string;
71
+ /**
72
+ * Ensure projectId exists in project config, generate if missing.
73
+ * Migrates from old `anonymousId` if present.
74
+ * Returns the project ID.
75
+ */
76
+ export declare function ensureProjectId(outputDir: string): string;
77
+ /**
78
+ * Ensure installationId exists in home directory config, generate if missing.
79
+ * Stored at ~/.config/sudocode/config.json (respects XDG_CONFIG_HOME).
80
+ * Returns the installation ID.
81
+ */
82
+ export declare function ensureInstallationId(): string;
83
+ export {};
84
+ //# sourceMappingURL=telemetry.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.d.ts","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAcH,MAAM,WAAW,cAAc;IAC7B,sDAAsD;IACtD,GAAG,EAAE,MAAM,CAAC;IACZ,oCAAoC;IACpC,OAAO,EAAE,OAAO,CAAC;IACjB,+BAA+B;IAC/B,GAAG,EAAE,MAAM,CAAC;IACZ,6DAA6D;IAC7D,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,kCAAkC;IAClC,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC/D;AAED,UAAU,UAAU;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,OAAO,CAAC;IACjB,GAAG,EAAE,MAAM,CAAC;IACZ,GAAG,CAAC,EAAE,MAAM,CAAC;IACb,KAAK,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAAC;CAC/D;AAMD,MAAM,WAAW,eAAe;IAC9B,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,SAAS,EAAE,MAAM,CAAC;IAClB,cAAc,EAAE,MAAM,CAAC;IACvB,cAAc,EAAE,MAAM,CAAC;CACxB;AAaD;;;GAGG;AACH,wBAAgB,kBAAkB,CAAC,SAAS,EAAE,MAAM,GAAG,eAAe,GAAG,IAAI,CA+B5E;AAED;;;;GAIG;AACH,wBAAsB,YAAY,CAChC,SAAS,EAAE,MAAM,EACjB,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC7B,OAAO,EAAE,OAAO,EAChB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,IAAI,CAAC,CAiBf;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,SAAS,EAAE,MAAM,EAAE,KAAK,EAAE,cAAc,GAAG,IAAI,CAwB1E;AAED;;;GAGG;AACH,wBAAsB,UAAU,CAC9B,SAAS,EAAE,MAAM,EACjB,MAAM,EAAE,eAAe,GACtB,OAAO,CAAC,IAAI,CAAC,CAmFf;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAC9B,MAAM,EAAE,UAAU,EAAE,EACpB,MAAM,EAAE,eAAe,GACtB,MAAM,CAsER;AAED;;GAEG;AACH,wBAAgB,iBAAiB,CAC/B,OAAO,EAAE,MAAM,EACf,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAC5B,MAAM,CAAC,MAAM,EAAE,MAAM,GAAG,MAAM,GAAG,OAAO,GAAG,SAAS,CAAC,CAqEvD;AAED;;;;GAIG;AACH,wBAAgB,wBAAwB,IAAI,MAAM,CAIjD;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAgCzD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,IAAI,MAAM,CAkD7C"}
@@ -0,0 +1,410 @@
1
+ /**
2
+ * CLI Telemetry via OTLP with Buffer-and-Flush
3
+ *
4
+ * Appends usage events to a local buffer file (<1ms per call).
5
+ * Flushes to a configured OTLP endpoint when conditions are met.
6
+ * Constructs OTLP/HTTP JSON manually — no SDK dependency.
7
+ */
8
+ import * as fs from "fs";
9
+ import * as path from "path";
10
+ import * as os from "os";
11
+ import * as crypto from "crypto";
12
+ import { getProjectConfig, getLocalConfig, updateProjectConfig, } from "./config.js";
13
+ // --- Constants ---
14
+ const BUFFER_FILE = "telemetry-buffer.jsonl";
15
+ const FLUSH_META_FILE = "telemetry-flush.json";
16
+ const FLUSH_INTERVAL_MS = 60_000; // 60 seconds
17
+ const MAX_BUFFER_LINES = 100;
18
+ const FLUSH_TIMEOUT_MS = 5_000; // 5 second HTTP timeout
19
+ const INSTALLATION_CONFIG_FILE = "config.json";
20
+ // --- Public API ---
21
+ /**
22
+ * Check if telemetry is enabled by reading config.
23
+ * Returns TelemetryConfig if enabled, null otherwise.
24
+ */
25
+ export function getTelemetryConfig(outputDir) {
26
+ try {
27
+ const localConfig = getLocalConfig(outputDir);
28
+ if (!localConfig.telemetry?.endpoint || localConfig.telemetry?.disabled) {
29
+ return null;
30
+ }
31
+ const projectId = ensureProjectId(outputDir);
32
+ const installationId = ensureInstallationId();
33
+ // Read version from package.json
34
+ let serviceVersion = "unknown";
35
+ try {
36
+ const pkgPath = path.join(__dirname, "..", "package.json");
37
+ const pkg = JSON.parse(fs.readFileSync(pkgPath, "utf8"));
38
+ serviceVersion = pkg.version || "unknown";
39
+ }
40
+ catch {
41
+ // ignore
42
+ }
43
+ return {
44
+ endpoint: localConfig.telemetry.endpoint,
45
+ authHeader: localConfig.telemetry.authHeader || "",
46
+ projectId,
47
+ installationId,
48
+ serviceVersion,
49
+ };
50
+ }
51
+ catch {
52
+ return null;
53
+ }
54
+ }
55
+ /**
56
+ * Record a telemetry event and maybe flush the buffer.
57
+ * Convenience wrapper for command handlers — handles config check,
58
+ * event recording, and flush in one call. All errors caught silently.
59
+ */
60
+ export async function trackCommand(outputDir, command, args, success, durationMs) {
61
+ try {
62
+ const config = getTelemetryConfig(outputDir);
63
+ if (!config)
64
+ return;
65
+ recordEvent(outputDir, {
66
+ cmd: command,
67
+ success,
68
+ dur: durationMs,
69
+ sid: process.env.SUDOCODE_SESSION_ID,
70
+ attrs: extractAttributes(command, args),
71
+ });
72
+ await maybeFlush(outputDir, config);
73
+ }
74
+ catch {
75
+ // Telemetry must never break CLI commands
76
+ }
77
+ }
78
+ /**
79
+ * Append a telemetry event to the buffer file.
80
+ * <1ms overhead — sync file append.
81
+ * No-op if telemetry is not configured.
82
+ */
83
+ export function recordEvent(outputDir, event) {
84
+ try {
85
+ const bufferPath = path.join(outputDir, BUFFER_FILE);
86
+ // Strip undefined values from attrs
87
+ const attrs = event.attrs
88
+ ? Object.fromEntries(Object.entries(event.attrs).filter(([, v]) => v !== undefined))
89
+ : undefined;
90
+ const line = {
91
+ ts: Date.now(),
92
+ cmd: event.cmd,
93
+ success: event.success,
94
+ dur: event.dur,
95
+ ...(event.sid ? { sid: event.sid } : {}),
96
+ ...(attrs && Object.keys(attrs).length > 0 ? { attrs } : {}),
97
+ };
98
+ fs.appendFileSync(bufferPath, JSON.stringify(line) + "\n", "utf8");
99
+ }
100
+ catch {
101
+ // Telemetry must never break CLI commands
102
+ }
103
+ }
104
+ /**
105
+ * Check flush conditions and flush if needed.
106
+ * Only adds latency (~100-200ms) when actually flushing.
107
+ */
108
+ export async function maybeFlush(outputDir, config) {
109
+ try {
110
+ const bufferPath = path.join(outputDir, BUFFER_FILE);
111
+ const flushMetaPath = path.join(outputDir, FLUSH_META_FILE);
112
+ // Check if buffer file exists
113
+ if (!fs.existsSync(bufferPath))
114
+ return;
115
+ const bufferContent = fs.readFileSync(bufferPath, "utf8").trim();
116
+ if (!bufferContent)
117
+ return;
118
+ const lines = bufferContent.split("\n");
119
+ // Read flush metadata
120
+ let lastFlushAt = 0;
121
+ try {
122
+ if (fs.existsSync(flushMetaPath)) {
123
+ const meta = JSON.parse(fs.readFileSync(flushMetaPath, "utf8"));
124
+ lastFlushAt = meta.lastFlushAt || 0;
125
+ }
126
+ }
127
+ catch {
128
+ // ignore corrupt flush meta
129
+ }
130
+ const now = Date.now();
131
+ const shouldFlush = now - lastFlushAt > FLUSH_INTERVAL_MS ||
132
+ lines.length >= MAX_BUFFER_LINES;
133
+ if (!shouldFlush)
134
+ return;
135
+ // Parse buffer lines
136
+ const events = [];
137
+ for (const line of lines) {
138
+ try {
139
+ events.push(JSON.parse(line));
140
+ }
141
+ catch {
142
+ // skip malformed lines
143
+ }
144
+ }
145
+ if (events.length === 0)
146
+ return;
147
+ // Build and send OTLP payload
148
+ const payload = buildOtlpPayload(events, config);
149
+ const controller = new AbortController();
150
+ const timeout = setTimeout(() => controller.abort(), FLUSH_TIMEOUT_MS);
151
+ try {
152
+ const response = await fetch(config.endpoint, {
153
+ method: "POST",
154
+ headers: {
155
+ "Content-Type": "application/json",
156
+ ...(config.authHeader
157
+ ? { Authorization: config.authHeader }
158
+ : {}),
159
+ },
160
+ body: JSON.stringify(payload),
161
+ signal: controller.signal,
162
+ });
163
+ clearTimeout(timeout);
164
+ if (response.ok || response.status === 204) {
165
+ // Success — truncate buffer and update flush metadata
166
+ fs.writeFileSync(bufferPath, "", "utf8");
167
+ fs.writeFileSync(flushMetaPath, JSON.stringify({ lastFlushAt: now }), "utf8");
168
+ }
169
+ // On non-OK response, leave buffer intact for retry
170
+ }
171
+ catch {
172
+ clearTimeout(timeout);
173
+ // Network error or timeout — leave buffer intact for retry
174
+ }
175
+ }
176
+ catch {
177
+ // Telemetry must never break CLI commands
178
+ }
179
+ }
180
+ /**
181
+ * Build OTLP/HTTP JSON Log Records payload from buffered events.
182
+ */
183
+ export function buildOtlpPayload(events, config) {
184
+ const logRecords = events.map((event) => {
185
+ const attributes = [
186
+ { key: "tool.name", value: { stringValue: event.cmd } },
187
+ { key: "tool.success", value: { boolValue: event.success } },
188
+ { key: "tool.duration_ms", value: { intValue: String(event.dur) } },
189
+ ];
190
+ // Add session ID if present
191
+ if (event.sid) {
192
+ attributes.push({
193
+ key: "session.id",
194
+ value: { stringValue: event.sid },
195
+ });
196
+ }
197
+ // Add command-specific attributes
198
+ if (event.attrs) {
199
+ for (const [key, val] of Object.entries(event.attrs)) {
200
+ if (val === undefined)
201
+ continue;
202
+ if (typeof val === "boolean") {
203
+ attributes.push({ key, value: { boolValue: val } });
204
+ }
205
+ else if (typeof val === "number") {
206
+ attributes.push({ key, value: { intValue: String(val) } });
207
+ }
208
+ else {
209
+ attributes.push({ key, value: { stringValue: String(val) } });
210
+ }
211
+ }
212
+ }
213
+ return {
214
+ timeUnixNano: String(event.ts) + "000000",
215
+ severityNumber: 9,
216
+ body: { stringValue: "tool_call" },
217
+ attributes,
218
+ };
219
+ });
220
+ return {
221
+ resourceLogs: [
222
+ {
223
+ resource: {
224
+ attributes: [
225
+ {
226
+ key: "service.name",
227
+ value: { stringValue: "sudocode-cli" },
228
+ },
229
+ {
230
+ key: "service.version",
231
+ value: { stringValue: config.serviceVersion },
232
+ },
233
+ {
234
+ key: "project.id",
235
+ value: { stringValue: config.projectId },
236
+ },
237
+ {
238
+ key: "installation.id",
239
+ value: { stringValue: config.installationId },
240
+ },
241
+ ],
242
+ },
243
+ scopeLogs: [
244
+ {
245
+ scope: { name: "sudocode.usage", version: "1" },
246
+ logRecords,
247
+ },
248
+ ],
249
+ },
250
+ ],
251
+ };
252
+ }
253
+ /**
254
+ * Extract command-specific attributes from CLI command name and args.
255
+ */
256
+ export function extractAttributes(command, args) {
257
+ switch (command) {
258
+ case "issue_create":
259
+ return {
260
+ "entity.type": "issue",
261
+ "entity.operation": "create",
262
+ };
263
+ case "issue_update":
264
+ case "issue_close":
265
+ return {
266
+ "entity.id": args.id,
267
+ "entity.type": "issue",
268
+ "entity.operation": "update",
269
+ "entity.status": args.status,
270
+ "entity.archived": args.archived,
271
+ };
272
+ case "issue_show":
273
+ return {
274
+ "entity.id": args.id,
275
+ "entity.type": "issue",
276
+ };
277
+ case "issue_list":
278
+ return { "entity.type": "issue" };
279
+ case "spec_create":
280
+ return {
281
+ "entity.type": "spec",
282
+ "entity.operation": "create",
283
+ };
284
+ case "spec_update":
285
+ return {
286
+ "entity.id": args.id,
287
+ "entity.type": "spec",
288
+ "entity.operation": "update",
289
+ };
290
+ case "spec_show":
291
+ return {
292
+ "entity.id": args.id,
293
+ "entity.type": "spec",
294
+ };
295
+ case "spec_list":
296
+ return { "entity.type": "spec" };
297
+ case "link":
298
+ return {
299
+ "link.from_id": args.from_id,
300
+ "link.to_id": args.to_id,
301
+ "link.type": args.type,
302
+ };
303
+ case "add_feedback":
304
+ return {
305
+ "feedback.to_id": args.to_id,
306
+ "feedback.from_id": args.from_id,
307
+ "feedback.type": args.feedback_type,
308
+ };
309
+ case "ready":
310
+ return {};
311
+ default:
312
+ return {};
313
+ }
314
+ }
315
+ /**
316
+ * Get the installation config directory path.
317
+ * Uses XDG_CONFIG_HOME if set, otherwise ~/.config/sudocode
318
+ * (same location as cli/src/auth/credentials.ts)
319
+ */
320
+ export function getInstallationConfigDir() {
321
+ return process.env.XDG_CONFIG_HOME
322
+ ? path.join(process.env.XDG_CONFIG_HOME, "sudocode")
323
+ : path.join(os.homedir(), ".config", "sudocode");
324
+ }
325
+ /**
326
+ * Ensure projectId exists in project config, generate if missing.
327
+ * Migrates from old `anonymousId` if present.
328
+ * Returns the project ID.
329
+ */
330
+ export function ensureProjectId(outputDir) {
331
+ const projectConfig = getProjectConfig(outputDir);
332
+ // Check for new projectId first
333
+ if (projectConfig.telemetry?.projectId) {
334
+ return projectConfig.telemetry.projectId;
335
+ }
336
+ // Migrate from old anonymousId
337
+ if (projectConfig.telemetry?.anonymousId) {
338
+ const projectId = projectConfig.telemetry.anonymousId;
339
+ updateProjectConfig(outputDir, {
340
+ ...projectConfig,
341
+ telemetry: {
342
+ projectId,
343
+ },
344
+ });
345
+ return projectId;
346
+ }
347
+ // Generate new project ID
348
+ const projectId = `proj-${crypto.randomBytes(4).toString("hex")}`;
349
+ updateProjectConfig(outputDir, {
350
+ ...projectConfig,
351
+ telemetry: {
352
+ ...projectConfig.telemetry,
353
+ projectId,
354
+ },
355
+ });
356
+ return projectId;
357
+ }
358
+ /**
359
+ * Ensure installationId exists in home directory config, generate if missing.
360
+ * Stored at ~/.config/sudocode/config.json (respects XDG_CONFIG_HOME).
361
+ * Returns the installation ID.
362
+ */
363
+ export function ensureInstallationId() {
364
+ try {
365
+ const configDir = getInstallationConfigDir();
366
+ const configPath = path.join(configDir, INSTALLATION_CONFIG_FILE);
367
+ // Try to read existing
368
+ try {
369
+ if (fs.existsSync(configPath)) {
370
+ const config = JSON.parse(fs.readFileSync(configPath, "utf8"));
371
+ if (config.telemetry?.installationId) {
372
+ return config.telemetry.installationId;
373
+ }
374
+ }
375
+ }
376
+ catch {
377
+ // ignore corrupt config
378
+ }
379
+ // Generate new installation ID
380
+ const installationId = `inst-${crypto.randomBytes(4).toString("hex")}`;
381
+ // Ensure directory exists with secure permissions
382
+ fs.mkdirSync(configDir, { recursive: true, mode: 0o700 });
383
+ // Read existing config to preserve other fields (e.g., credentials references)
384
+ let config = {};
385
+ try {
386
+ if (fs.existsSync(configPath)) {
387
+ config = JSON.parse(fs.readFileSync(configPath, "utf8"));
388
+ }
389
+ }
390
+ catch {
391
+ // start fresh
392
+ }
393
+ config.telemetry = {
394
+ ...(config.telemetry || {}),
395
+ installationId,
396
+ };
397
+ // Atomic write with secure permissions
398
+ const tmpPath = configPath + ".tmp";
399
+ fs.writeFileSync(tmpPath, JSON.stringify(config, null, 2), {
400
+ mode: 0o600,
401
+ });
402
+ fs.renameSync(tmpPath, configPath);
403
+ return installationId;
404
+ }
405
+ catch {
406
+ // Fallback: return a transient ID if we can't persist
407
+ return `inst-${crypto.randomBytes(4).toString("hex")}`;
408
+ }
409
+ }
410
+ //# sourceMappingURL=telemetry.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"telemetry.js","sourceRoot":"","sources":["../src/telemetry.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAmBH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AA+ED;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAyBlE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAa9D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpE;AA+BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC"}
1
+ {"version":3,"file":"update-checker.d.ts","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAqBH,UAAU,UAAU;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,eAAe,EAAE,OAAO,CAAC;CAC1B;AA4GD;;;GAGG;AACH,wBAAsB,eAAe,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA2BlE;AAED;;;GAGG;AACH,wBAAgB,cAAc,CAAC,EAAE,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAa9D;AAED;;GAEG;AACH,wBAAsB,qBAAqB,IAAI,OAAO,CAAC,MAAM,GAAG,IAAI,CAAC,CAmBpE;AA+BD;;GAEG;AACH,wBAAgB,aAAa,CAAC,OAAO,EAAE,MAAM,GAAG,IAAI,CAiBnD;AAED;;GAEG;AACH,wBAAgB,gBAAgB,IAAI,IAAI,CAWvC"}
@@ -6,7 +6,9 @@ import * as fs from "fs";
6
6
  import * as path from "path";
7
7
  import * as os from "os";
8
8
  import { VERSION } from "./version.js";
9
+ import { isBinaryInstall } from "./install-source.js";
9
10
  const PACKAGE_NAME = "@sudocode-ai/cli";
11
+ const GITHUB_REPO = "sudocode-ai/sudocode";
10
12
  const CACHE_DIR = path.join(os.tmpdir(), "sudocode-cli");
11
13
  const CACHE_FILE = path.join(CACHE_DIR, "update-cache.json");
12
14
  const DISMISS_FILE = path.join(CACHE_DIR, "update-dismissed.json");
@@ -32,6 +34,30 @@ async function fetchLatestVersion() {
32
34
  return null;
33
35
  }
34
36
  }
37
+ /**
38
+ * Fetch latest version from GitHub Releases (for binary installs)
39
+ */
40
+ async function fetchLatestVersionFromGitHub() {
41
+ try {
42
+ const response = await fetch(`https://api.github.com/repos/${GITHUB_REPO}/releases/latest`, {
43
+ headers: {
44
+ Accept: "application/vnd.github+json",
45
+ },
46
+ });
47
+ if (!response.ok) {
48
+ return null;
49
+ }
50
+ const data = (await response.json());
51
+ const tag = data.tag_name;
52
+ if (!tag)
53
+ return null;
54
+ // Strip leading "v" from tag (e.g. "v0.1.22" → "0.1.22")
55
+ return tag.startsWith("v") ? tag.slice(1) : tag;
56
+ }
57
+ catch {
58
+ return null;
59
+ }
60
+ }
35
61
  /**
36
62
  * Read cached version info
37
63
  */
@@ -84,8 +110,10 @@ export async function checkForUpdates() {
84
110
  updateAvailable: VERSION !== cached.latest,
85
111
  };
86
112
  }
87
- // Fetch latest version from npm
88
- const latest = await fetchLatestVersion();
113
+ // Fetch latest version from appropriate source
114
+ const latest = isBinaryInstall()
115
+ ? await fetchLatestVersionFromGitHub()
116
+ : await fetchLatestVersion();
89
117
  if (!latest) {
90
118
  return null;
91
119
  }
@@ -1 +1 @@
1
- {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,MAAM,YAAY,GAAG,kBAAkB,CAAC;AACxC,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE,EAAE,cAAc,CAAC,CAAC;AACzD,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,mBAAmB,CAAC,CAAC;AAC7D,MAAM,YAAY,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,uBAAuB,CAAC,CAAC;AACnE,MAAM,cAAc,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,WAAW;AACvD,MAAM,gBAAgB,GAAG,IAAI,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC,UAAU;AAsB7D;;GAEG;AACH,KAAK,UAAU,kBAAkB;IAC/B,IAAI,CAAC;QACH,MAAM,QAAQ,GAAG,MAAM,KAAK,CAC1B,8BAA8B,YAAY,SAAS,EACnD;YACE,OAAO,EAAE;gBACP,MAAM,EAAE,kBAAkB;aAC3B;SACF,CACF,CAAC;QAEF,IAAI,CAAC,QAAQ,CAAC,EAAE,EAAE,CAAC;YACjB,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,IAAI,GAAG,CAAC,MAAM,QAAQ,CAAC,IAAI,EAAE,CAAwB,CAAC;QAC5D,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC;IAC9B,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,SAAS;IAChB,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC/B,OAAO,IAAI,CAAC;QACd,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;QACrD,MAAM,KAAK,GAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAE/C,gCAAgC;QAChC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,KAAK,CAAC,SAAS,GAAG,cAAc,EAAE,CAAC;YAC3C,OAAO,IAAI,CAAC;QACd,CAAC;QAED,OAAO,KAAK,CAAC;IACf,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,IAAI,CAAC;IACd,CAAC;AACH,CAAC;AAED;;GAEG;AACH,SAAS,UAAU,CAAC,MAAc;IAChC,IAAI,CAAC;QACH,gCAAgC;QAChC,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,MAAM,KAAK,GAAgB;YACzB,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,MAAM;SACP,CAAC;QAEF,EAAE,CAAC,aAAa,CAAC,UAAU,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,EAAE,OAAO,CAAC,CAAC;IACxE,CAAC;IAAC,MAAM,CAAC;QACP,wCAAwC;IAC1C,CAAC;AACH,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,eAAe;IACnC,kCAAkC;IAClC,MAAM,MAAM,GAAG,SAAS,EAAE,CAAC;IAC3B,IAAI,MAAM,EAAE,CAAC;QACX,OAAO;YACL,OAAO,EAAE,OAAO;YAChB,MAAM,EAAE,MAAM,CAAC,MAAM;YACrB,eAAe,EAAE,OAAO,KAAK,MAAM,CAAC,MAAM;SAC3C,CAAC;IACJ,CAAC;IAED,gCAAgC;IAChC,MAAM,MAAM,GAAG,MAAM,kBAAkB,EAAE,CAAC;IAC1C,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mBAAmB;IACnB,UAAU,CAAC,MAAM,CAAC,CAAC;IAEnB,OAAO;QACL,OAAO,EAAE,OAAO;QAChB,MAAM;QACN,eAAe,EAAE,OAAO,KAAK,MAAM;KACpC,CAAC;AACJ,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,cAAc,CAAC,EAAU,EAAE,EAAU;IACnD,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACzC,MAAM,MAAM,GAAG,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IAEzC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC;QAC3B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;QAE1B,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,IAAI,CAAC;QACzB,IAAI,EAAE,GAAG,EAAE;YAAE,OAAO,KAAK,CAAC;IAC5B,CAAC;IAED,OAAO,KAAK,CAAC;AACf,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,KAAK,UAAU,qBAAqB;IACzC,MAAM,IAAI,GAAG,MAAM,eAAe,EAAE,CAAC;IAErC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,eAAe,EAAE,CAAC;QACnC,OAAO,IAAI,CAAC;IACd,CAAC;IAED,+DAA+D;IAC/D,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC/C,OAAO,IAAI,CAAC;IACd,CAAC;IAED,4CAA4C;IAC5C,IAAI,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC;QAC7B,OAAO,IAAI,CAAC;IACd,CAAC;IAED,mCAAmC;IACnC,OAAO,qBAAqB,IAAI,CAAC,OAAO,MAAM,IAAI,CAAC,MAAM,yDAAyD,CAAC;AACrH,CAAC;AAED;;GAEG;AACH,SAAS,WAAW,CAAC,OAAe;IAClC,IAAI,CAAC;QACH,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YACjC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,YAAY,EAAE,OAAO,CAAC,CAAC;QACvD,MAAM,WAAW,GAAgB,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC;QAErD,qCAAqC;QACrC,IAAI,WAAW,CAAC,OAAO,KAAK,OAAO,EAAE,CAAC;YACpC,OAAO,KAAK,CAAC;QACf,CAAC;QAED,kCAAkC;QAClC,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,EAAE,CAAC;QACvB,IAAI,GAAG,GAAG,WAAW,CAAC,SAAS,GAAG,gBAAgB,EAAE,CAAC;YACnD,OAAO,KAAK,CAAC;QACf,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,KAAK,CAAC;IACf,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,aAAa,CAAC,OAAe;IAC3C,IAAI,CAAC;QACH,EAAE,CAAC,SAAS,CAAC,SAAS,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC;QAE7C,MAAM,WAAW,GAAgB;YAC/B,SAAS,EAAE,IAAI,CAAC,GAAG,EAAE;YACrB,OAAO;SACR,CAAC;QAEF,EAAE,CAAC,aAAa,CACd,YAAY,EACZ,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,IAAI,EAAE,CAAC,CAAC,EACpC,OAAO,CACR,CAAC;IACJ,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB;IAC9B,IAAI,CAAC;QACH,IAAI,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,EAAE,CAAC;YAC9B,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,CAAC;QACD,IAAI,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,EAAE,CAAC;YAChC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC;QAC9B,CAAC;IACH,CAAC;IAAC,MAAM,CAAC;QACP,gBAAgB;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"update-checker.js","sourceRoot":"","sources":["../src/update-checker.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAMnC;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,QAAe,CAAC"}
1
+ {"version":3,"file":"version.d.ts","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AASH;;GAEG;AACH,wBAAgB,UAAU,IAAI,MAAM,CAgBnC;AAED;;GAEG;AACH,eAAO,MAAM,OAAO,QAAe,CAAC"}
package/dist/version.js CHANGED
@@ -10,11 +10,22 @@ const __dirname = path.dirname(__filename);
10
10
  * Get the CLI version from package.json
11
11
  */
12
12
  export function getVersion() {
13
- // In development (running from src/), go up one level
14
- // In production (running from dist/), go up one level
15
- const packageJsonPath = path.join(__dirname, "..", "package.json");
16
- const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, "utf8"));
17
- return packageJson.version;
13
+ // In compiled binaries (SEA/Bun), import.meta.url resolves to a virtual path.
14
+ // Fall back to reading package.json relative to the executable.
15
+ const candidates = [
16
+ path.join(__dirname, "..", "package.json"),
17
+ path.join(path.dirname(process.execPath), "..", "package.json"),
18
+ path.join(path.dirname(process.execPath), "package.json"),
19
+ ];
20
+ for (const p of candidates) {
21
+ try {
22
+ return JSON.parse(fs.readFileSync(p, "utf8")).version;
23
+ }
24
+ catch {
25
+ continue;
26
+ }
27
+ }
28
+ return "0.0.0-unknown";
18
29
  }
19
30
  /**
20
31
  * The current CLI version
@@ -1 +1 @@
1
- {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,sDAAsD;IACtD,sDAAsD;IACtD,MAAM,eAAe,GAAG,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC,CAAC;IACnE,MAAM,WAAW,GAAG,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,eAAe,EAAE,MAAM,CAAC,CAAC,CAAC;IACzE,OAAO,WAAW,CAAC,OAAO,CAAC;AAC7B,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC"}
1
+ {"version":3,"file":"version.js","sourceRoot":"","sources":["../src/version.ts"],"names":[],"mappings":"AAAA;;GAEG;AAEH,OAAO,KAAK,EAAE,MAAM,IAAI,CAAC;AACzB,OAAO,KAAK,IAAI,MAAM,MAAM,CAAC;AAC7B,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAC;AAEpC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAClD,MAAM,SAAS,GAAG,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;AAE3C;;GAEG;AACH,MAAM,UAAU,UAAU;IACxB,8EAA8E;IAC9E,gEAAgE;IAChE,MAAM,UAAU,GAAG;QACjB,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,EAAE,cAAc,CAAC;QAC1C,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,IAAI,EAAE,cAAc,CAAC;QAC/D,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,QAAQ,CAAC,EAAE,cAAc,CAAC;KAC1D,CAAC;IACF,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,CAAC;QAC3B,IAAI,CAAC;YACH,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,OAAO,CAAC;QACxD,CAAC;QAAC,MAAM,CAAC;YACP,SAAS;QACX,CAAC;IACH,CAAC;IACD,OAAO,eAAe,CAAC;AACzB,CAAC;AAED;;GAEG;AACH,MAAM,CAAC,MAAM,OAAO,GAAG,UAAU,EAAE,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAkB3C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAuClF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAiCD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CAu0BpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA+BnE"}
1
+ {"version":3,"file":"watcher.d.ts","sourceRoot":"","sources":["../src/watcher.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAKH,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAC;AAmB3C,OAAO,KAAK,EAAE,eAAe,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AA2ElF;;;;GAIG;AACH,wBAAgB,mBAAmB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,CAQ7D;AAiCD,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,EAAE,EAAE,QAAQ,CAAC,QAAQ,CAAC;IACtB;;OAEG;IACH,OAAO,EAAE,MAAM,CAAC;IAChB;;OAEG;IACH,KAAK,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI,CAAC;IAClC;;OAEG;IACH,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,IAAI,CAAC;IACjC;;;OAGG;IACH,aAAa,CAAC,EAAE,OAAO,CAAC;IACxB;;;OAGG;IACH,mBAAmB,CAAC,EAAE,OAAO,CAAC;IAE9B;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEhE;;;OAGG;IACH,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,eAAe,KAAK,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACjE;AAED,MAAM,WAAW,cAAc;IAC7B;;OAEG;IACH,IAAI,EAAE,MAAM,OAAO,CAAC,IAAI,CAAC,CAAC;IAC1B;;OAEG;IACH,QAAQ,EAAE,MAAM,YAAY,CAAC;CAC9B;AAED,MAAM,WAAW,YAAY;IAC3B,YAAY,EAAE,MAAM,CAAC;IACrB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,OAAO,EAAE,cAAc,GAAG,cAAc,CA8/BpE;AAED;;GAEG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,IAAI,CA+BnE"}