flaio-cli 1.1.1 → 1.1.3-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (39) hide show
  1. package/dist/agents/agent-detector.d.ts.map +1 -1
  2. package/dist/agents/agent-detector.js +9 -0
  3. package/dist/agents/agent-detector.js.map +1 -1
  4. package/dist/analytics/crash-recovery.d.ts +7 -0
  5. package/dist/analytics/crash-recovery.d.ts.map +1 -0
  6. package/dist/analytics/crash-recovery.js +79 -0
  7. package/dist/analytics/crash-recovery.js.map +1 -0
  8. package/dist/analytics/index.d.ts +1 -0
  9. package/dist/analytics/index.d.ts.map +1 -1
  10. package/dist/analytics/index.js +7 -2
  11. package/dist/analytics/index.js.map +1 -1
  12. package/dist/analytics/resource-monitor.d.ts.map +1 -1
  13. package/dist/analytics/resource-monitor.js +18 -0
  14. package/dist/analytics/resource-monitor.js.map +1 -1
  15. package/dist/analytics/sentry.d.ts +2 -0
  16. package/dist/analytics/sentry.d.ts.map +1 -1
  17. package/dist/analytics/sentry.js +35 -13
  18. package/dist/analytics/sentry.js.map +1 -1
  19. package/dist/cli.js +7 -1
  20. package/dist/cli.js.map +1 -1
  21. package/dist/config/config.d.ts +25 -313
  22. package/dist/config/config.d.ts.map +1 -1
  23. package/dist/config/config.js +15 -17
  24. package/dist/config/config.js.map +1 -1
  25. package/dist/relay/relay-client.d.ts +3 -0
  26. package/dist/relay/relay-client.d.ts.map +1 -1
  27. package/dist/relay/relay-client.js +61 -11
  28. package/dist/relay/relay-client.js.map +1 -1
  29. package/dist/relay/relay-message-schemas.d.ts +29 -325
  30. package/dist/relay/relay-message-schemas.d.ts.map +1 -1
  31. package/dist/relay/ticket-tracker.d.ts.map +1 -1
  32. package/dist/relay/ticket-tracker.js +10 -2
  33. package/dist/relay/ticket-tracker.js.map +1 -1
  34. package/dist/relay/worktree-manager.d.ts.map +1 -1
  35. package/dist/relay/worktree-manager.js +110 -79
  36. package/dist/relay/worktree-manager.js.map +1 -1
  37. package/dist/store/connector-store.js +4 -1
  38. package/dist/store/connector-store.js.map +1 -1
  39. package/package.json +16 -16
@@ -6,114 +6,45 @@ declare const SlackConfigSchema: z.ZodObject<{
6
6
  channelId: z.ZodOptional<z.ZodString>;
7
7
  pollInterval: z.ZodDefault<z.ZodNumber>;
8
8
  timeout: z.ZodDefault<z.ZodNumber>;
9
- }, "strip", z.ZodTypeAny, {
10
- enabled: boolean;
11
- pollInterval: number;
12
- timeout: number;
13
- botToken?: string | undefined;
14
- appToken?: string | undefined;
15
- channelId?: string | undefined;
16
- }, {
17
- enabled?: boolean | undefined;
18
- botToken?: string | undefined;
19
- appToken?: string | undefined;
20
- channelId?: string | undefined;
21
- pollInterval?: number | undefined;
22
- timeout?: number | undefined;
23
- }>;
9
+ }, z.core.$strip>;
24
10
  declare const DiscordConfigSchema: z.ZodObject<{
25
11
  enabled: z.ZodDefault<z.ZodBoolean>;
26
12
  botToken: z.ZodOptional<z.ZodString>;
27
13
  channelId: z.ZodOptional<z.ZodString>;
28
14
  timeout: z.ZodDefault<z.ZodNumber>;
29
- }, "strip", z.ZodTypeAny, {
30
- enabled: boolean;
31
- timeout: number;
32
- botToken?: string | undefined;
33
- channelId?: string | undefined;
34
- }, {
35
- enabled?: boolean | undefined;
36
- botToken?: string | undefined;
37
- channelId?: string | undefined;
38
- timeout?: number | undefined;
39
- }>;
15
+ }, z.core.$strip>;
40
16
  declare const TelegramConfigSchema: z.ZodObject<{
41
17
  enabled: z.ZodDefault<z.ZodBoolean>;
42
18
  botToken: z.ZodOptional<z.ZodString>;
43
- chatId: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
19
+ chatId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
44
20
  timeout: z.ZodDefault<z.ZodNumber>;
45
- }, "strip", z.ZodTypeAny, {
46
- enabled: boolean;
47
- timeout: number;
48
- botToken?: string | undefined;
49
- chatId?: string | number | undefined;
50
- }, {
51
- enabled?: boolean | undefined;
52
- botToken?: string | undefined;
53
- timeout?: number | undefined;
54
- chatId?: string | number | undefined;
55
- }>;
21
+ }, z.core.$strip>;
56
22
  declare const RelayConfigSchema: z.ZodObject<{
57
23
  enabled: z.ZodDefault<z.ZodBoolean>;
58
24
  authToken: z.ZodOptional<z.ZodString>;
59
25
  refreshToken: z.ZodOptional<z.ZodString>;
60
26
  autoConnect: z.ZodDefault<z.ZodBoolean>;
61
- defaultShareMode: z.ZodDefault<z.ZodEnum<["read-only", "read-write"]>>;
27
+ defaultShareMode: z.ZodDefault<z.ZodEnum<{
28
+ "read-write": "read-write";
29
+ "read-only": "read-only";
30
+ }>>;
62
31
  maxReplayBufferKB: z.ZodDefault<z.ZodNumber>;
63
32
  e2eEncryption: z.ZodDefault<z.ZodBoolean>;
64
33
  relayUrl: z.ZodDefault<z.ZodString>;
65
34
  authUrl: z.ZodDefault<z.ZodString>;
66
- }, "strip", z.ZodTypeAny, {
67
- enabled: boolean;
68
- autoConnect: boolean;
69
- defaultShareMode: "read-write" | "read-only";
70
- maxReplayBufferKB: number;
71
- e2eEncryption: boolean;
72
- relayUrl: string;
73
- authUrl: string;
74
- authToken?: string | undefined;
75
- refreshToken?: string | undefined;
76
- }, {
77
- enabled?: boolean | undefined;
78
- authToken?: string | undefined;
79
- refreshToken?: string | undefined;
80
- autoConnect?: boolean | undefined;
81
- defaultShareMode?: "read-write" | "read-only" | undefined;
82
- maxReplayBufferKB?: number | undefined;
83
- e2eEncryption?: boolean | undefined;
84
- relayUrl?: string | undefined;
85
- authUrl?: string | undefined;
86
- }>;
35
+ }, z.core.$strip>;
87
36
  declare const WorktreeConfigSchema: z.ZodObject<{
88
37
  planning: z.ZodDefault<z.ZodBoolean>;
89
38
  interactivePlanning: z.ZodDefault<z.ZodBoolean>;
90
39
  implementation: z.ZodDefault<z.ZodBoolean>;
91
- }, "strip", z.ZodTypeAny, {
92
- planning: boolean;
93
- interactivePlanning: boolean;
94
- implementation: boolean;
95
- }, {
96
- planning?: boolean | undefined;
97
- interactivePlanning?: boolean | undefined;
98
- implementation?: boolean | undefined;
99
- }>;
40
+ }, z.core.$strip>;
100
41
  declare const AppConfigSchema: z.ZodObject<{
101
42
  ui: z.ZodDefault<z.ZodObject<{
102
43
  sidebarWidth: z.ZodDefault<z.ZodNumber>;
103
44
  narrowBreakpoint: z.ZodDefault<z.ZodNumber>;
104
45
  targetFps: z.ZodDefault<z.ZodNumber>;
105
46
  showCost: z.ZodDefault<z.ZodBoolean>;
106
- }, "strip", z.ZodTypeAny, {
107
- sidebarWidth: number;
108
- narrowBreakpoint: number;
109
- targetFps: number;
110
- showCost: boolean;
111
- }, {
112
- sidebarWidth?: number | undefined;
113
- narrowBreakpoint?: number | undefined;
114
- targetFps?: number | undefined;
115
- showCost?: boolean | undefined;
116
- }>>;
47
+ }, z.core.$strip>>;
117
48
  connectors: z.ZodDefault<z.ZodObject<{
118
49
  slack: z.ZodDefault<z.ZodObject<{
119
50
  enabled: z.ZodDefault<z.ZodBoolean>;
@@ -122,267 +53,48 @@ declare const AppConfigSchema: z.ZodObject<{
122
53
  channelId: z.ZodOptional<z.ZodString>;
123
54
  pollInterval: z.ZodDefault<z.ZodNumber>;
124
55
  timeout: z.ZodDefault<z.ZodNumber>;
125
- }, "strip", z.ZodTypeAny, {
126
- enabled: boolean;
127
- pollInterval: number;
128
- timeout: number;
129
- botToken?: string | undefined;
130
- appToken?: string | undefined;
131
- channelId?: string | undefined;
132
- }, {
133
- enabled?: boolean | undefined;
134
- botToken?: string | undefined;
135
- appToken?: string | undefined;
136
- channelId?: string | undefined;
137
- pollInterval?: number | undefined;
138
- timeout?: number | undefined;
139
- }>>;
56
+ }, z.core.$strip>>;
140
57
  discord: z.ZodDefault<z.ZodObject<{
141
58
  enabled: z.ZodDefault<z.ZodBoolean>;
142
59
  botToken: z.ZodOptional<z.ZodString>;
143
60
  channelId: z.ZodOptional<z.ZodString>;
144
61
  timeout: z.ZodDefault<z.ZodNumber>;
145
- }, "strip", z.ZodTypeAny, {
146
- enabled: boolean;
147
- timeout: number;
148
- botToken?: string | undefined;
149
- channelId?: string | undefined;
150
- }, {
151
- enabled?: boolean | undefined;
152
- botToken?: string | undefined;
153
- channelId?: string | undefined;
154
- timeout?: number | undefined;
155
- }>>;
62
+ }, z.core.$strip>>;
156
63
  telegram: z.ZodDefault<z.ZodObject<{
157
64
  enabled: z.ZodDefault<z.ZodBoolean>;
158
65
  botToken: z.ZodOptional<z.ZodString>;
159
- chatId: z.ZodOptional<z.ZodUnion<[z.ZodString, z.ZodNumber]>>;
66
+ chatId: z.ZodOptional<z.ZodUnion<readonly [z.ZodString, z.ZodNumber]>>;
160
67
  timeout: z.ZodDefault<z.ZodNumber>;
161
- }, "strip", z.ZodTypeAny, {
162
- enabled: boolean;
163
- timeout: number;
164
- botToken?: string | undefined;
165
- chatId?: string | number | undefined;
166
- }, {
167
- enabled?: boolean | undefined;
168
- botToken?: string | undefined;
169
- timeout?: number | undefined;
170
- chatId?: string | number | undefined;
171
- }>>;
172
- }, "strip", z.ZodTypeAny, {
173
- slack: {
174
- enabled: boolean;
175
- pollInterval: number;
176
- timeout: number;
177
- botToken?: string | undefined;
178
- appToken?: string | undefined;
179
- channelId?: string | undefined;
180
- };
181
- discord: {
182
- enabled: boolean;
183
- timeout: number;
184
- botToken?: string | undefined;
185
- channelId?: string | undefined;
186
- };
187
- telegram: {
188
- enabled: boolean;
189
- timeout: number;
190
- botToken?: string | undefined;
191
- chatId?: string | number | undefined;
192
- };
193
- }, {
194
- slack?: {
195
- enabled?: boolean | undefined;
196
- botToken?: string | undefined;
197
- appToken?: string | undefined;
198
- channelId?: string | undefined;
199
- pollInterval?: number | undefined;
200
- timeout?: number | undefined;
201
- } | undefined;
202
- discord?: {
203
- enabled?: boolean | undefined;
204
- botToken?: string | undefined;
205
- channelId?: string | undefined;
206
- timeout?: number | undefined;
207
- } | undefined;
208
- telegram?: {
209
- enabled?: boolean | undefined;
210
- botToken?: string | undefined;
211
- timeout?: number | undefined;
212
- chatId?: string | number | undefined;
213
- } | undefined;
214
- }>>;
68
+ }, z.core.$strip>>;
69
+ }, z.core.$strip>>;
215
70
  agents: z.ZodDefault<z.ZodObject<{
216
71
  statusCheckInterval: z.ZodDefault<z.ZodNumber>;
217
72
  detectorInterval: z.ZodDefault<z.ZodNumber>;
218
- }, "strip", z.ZodTypeAny, {
219
- statusCheckInterval: number;
220
- detectorInterval: number;
221
- }, {
222
- statusCheckInterval?: number | undefined;
223
- detectorInterval?: number | undefined;
224
- }>>;
73
+ }, z.core.$strip>>;
225
74
  relay: z.ZodDefault<z.ZodObject<{
226
75
  enabled: z.ZodDefault<z.ZodBoolean>;
227
76
  authToken: z.ZodOptional<z.ZodString>;
228
77
  refreshToken: z.ZodOptional<z.ZodString>;
229
78
  autoConnect: z.ZodDefault<z.ZodBoolean>;
230
- defaultShareMode: z.ZodDefault<z.ZodEnum<["read-only", "read-write"]>>;
79
+ defaultShareMode: z.ZodDefault<z.ZodEnum<{
80
+ "read-write": "read-write";
81
+ "read-only": "read-only";
82
+ }>>;
231
83
  maxReplayBufferKB: z.ZodDefault<z.ZodNumber>;
232
84
  e2eEncryption: z.ZodDefault<z.ZodBoolean>;
233
85
  relayUrl: z.ZodDefault<z.ZodString>;
234
86
  authUrl: z.ZodDefault<z.ZodString>;
235
- }, "strip", z.ZodTypeAny, {
236
- enabled: boolean;
237
- autoConnect: boolean;
238
- defaultShareMode: "read-write" | "read-only";
239
- maxReplayBufferKB: number;
240
- e2eEncryption: boolean;
241
- relayUrl: string;
242
- authUrl: string;
243
- authToken?: string | undefined;
244
- refreshToken?: string | undefined;
245
- }, {
246
- enabled?: boolean | undefined;
247
- authToken?: string | undefined;
248
- refreshToken?: string | undefined;
249
- autoConnect?: boolean | undefined;
250
- defaultShareMode?: "read-write" | "read-only" | undefined;
251
- maxReplayBufferKB?: number | undefined;
252
- e2eEncryption?: boolean | undefined;
253
- relayUrl?: string | undefined;
254
- authUrl?: string | undefined;
255
- }>>;
87
+ }, z.core.$strip>>;
256
88
  worktree: z.ZodDefault<z.ZodObject<{
257
89
  planning: z.ZodDefault<z.ZodBoolean>;
258
90
  interactivePlanning: z.ZodDefault<z.ZodBoolean>;
259
91
  implementation: z.ZodDefault<z.ZodBoolean>;
260
- }, "strip", z.ZodTypeAny, {
261
- planning: boolean;
262
- interactivePlanning: boolean;
263
- implementation: boolean;
264
- }, {
265
- planning?: boolean | undefined;
266
- interactivePlanning?: boolean | undefined;
267
- implementation?: boolean | undefined;
268
- }>>;
92
+ }, z.core.$strip>>;
269
93
  telemetry: z.ZodDefault<z.ZodObject<{
270
94
  enabled: z.ZodDefault<z.ZodBoolean>;
271
95
  crashReports: z.ZodDefault<z.ZodBoolean>;
272
- }, "strip", z.ZodTypeAny, {
273
- enabled: boolean;
274
- crashReports: boolean;
275
- }, {
276
- enabled?: boolean | undefined;
277
- crashReports?: boolean | undefined;
278
- }>>;
279
- }, "strip", z.ZodTypeAny, {
280
- agents: {
281
- statusCheckInterval: number;
282
- detectorInterval: number;
283
- };
284
- ui: {
285
- sidebarWidth: number;
286
- narrowBreakpoint: number;
287
- targetFps: number;
288
- showCost: boolean;
289
- };
290
- connectors: {
291
- slack: {
292
- enabled: boolean;
293
- pollInterval: number;
294
- timeout: number;
295
- botToken?: string | undefined;
296
- appToken?: string | undefined;
297
- channelId?: string | undefined;
298
- };
299
- discord: {
300
- enabled: boolean;
301
- timeout: number;
302
- botToken?: string | undefined;
303
- channelId?: string | undefined;
304
- };
305
- telegram: {
306
- enabled: boolean;
307
- timeout: number;
308
- botToken?: string | undefined;
309
- chatId?: string | number | undefined;
310
- };
311
- };
312
- relay: {
313
- enabled: boolean;
314
- autoConnect: boolean;
315
- defaultShareMode: "read-write" | "read-only";
316
- maxReplayBufferKB: number;
317
- e2eEncryption: boolean;
318
- relayUrl: string;
319
- authUrl: string;
320
- authToken?: string | undefined;
321
- refreshToken?: string | undefined;
322
- };
323
- worktree: {
324
- planning: boolean;
325
- interactivePlanning: boolean;
326
- implementation: boolean;
327
- };
328
- telemetry: {
329
- enabled: boolean;
330
- crashReports: boolean;
331
- };
332
- }, {
333
- agents?: {
334
- statusCheckInterval?: number | undefined;
335
- detectorInterval?: number | undefined;
336
- } | undefined;
337
- ui?: {
338
- sidebarWidth?: number | undefined;
339
- narrowBreakpoint?: number | undefined;
340
- targetFps?: number | undefined;
341
- showCost?: boolean | undefined;
342
- } | undefined;
343
- connectors?: {
344
- slack?: {
345
- enabled?: boolean | undefined;
346
- botToken?: string | undefined;
347
- appToken?: string | undefined;
348
- channelId?: string | undefined;
349
- pollInterval?: number | undefined;
350
- timeout?: number | undefined;
351
- } | undefined;
352
- discord?: {
353
- enabled?: boolean | undefined;
354
- botToken?: string | undefined;
355
- channelId?: string | undefined;
356
- timeout?: number | undefined;
357
- } | undefined;
358
- telegram?: {
359
- enabled?: boolean | undefined;
360
- botToken?: string | undefined;
361
- timeout?: number | undefined;
362
- chatId?: string | number | undefined;
363
- } | undefined;
364
- } | undefined;
365
- relay?: {
366
- enabled?: boolean | undefined;
367
- authToken?: string | undefined;
368
- refreshToken?: string | undefined;
369
- autoConnect?: boolean | undefined;
370
- defaultShareMode?: "read-write" | "read-only" | undefined;
371
- maxReplayBufferKB?: number | undefined;
372
- e2eEncryption?: boolean | undefined;
373
- relayUrl?: string | undefined;
374
- authUrl?: string | undefined;
375
- } | undefined;
376
- worktree?: {
377
- planning?: boolean | undefined;
378
- interactivePlanning?: boolean | undefined;
379
- implementation?: boolean | undefined;
380
- } | undefined;
381
- telemetry?: {
382
- enabled?: boolean | undefined;
383
- crashReports?: boolean | undefined;
384
- } | undefined;
385
- }>;
96
+ }, z.core.$strip>>;
97
+ }, z.core.$strip>;
386
98
  export type AppConfig = z.infer<typeof AppConfigSchema>;
387
99
  export type SlackConfig = z.infer<typeof SlackConfigSchema>;
388
100
  export type DiscordConfig = z.infer<typeof DiscordConfigSchema>;
@@ -1 +1 @@
1
- {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;EAOrB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;;;;;;;;;;;EAKvB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;;;;EAKxB,CAAC;AAEH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAYrB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;;;;;;;;;EAIxB,CAAC;AAcH,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;EAkBnB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAQlE,wBAAgB,UAAU,IAAI,SAAS,CAiBtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAOlD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
1
+ {"version":3,"file":"config.d.ts","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AAMxB,QAAA,MAAM,iBAAiB;;;;;;;iBAOrB,CAAC;AAEH,QAAA,MAAM,mBAAmB;;;;;iBAKvB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;;iBAKxB,CAAC;AAEH,QAAA,MAAM,iBAAiB;;;;;;;;;;;;;iBAYrB,CAAC;AAEH,QAAA,MAAM,oBAAoB;;;;iBAIxB,CAAC;AAyBH,QAAA,MAAM,eAAe;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;iBAOnB,CAAC;AAEH,MAAM,MAAM,SAAS,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,eAAe,CAAC,CAAC;AACxD,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,aAAa,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,mBAAmB,CAAC,CAAC;AAChE,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAClE,MAAM,MAAM,WAAW,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,iBAAiB,CAAC,CAAC;AAC5D,MAAM,MAAM,cAAc,GAAG,CAAC,CAAC,KAAK,CAAC,OAAO,oBAAoB,CAAC,CAAC;AAQlE,wBAAgB,UAAU,IAAI,SAAS,CAiBtC;AAED,wBAAgB,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG,IAAI,CAOlD;AAED,wBAAgB,aAAa,IAAI,MAAM,CAEtC"}
@@ -51,24 +51,22 @@ const TelemetryConfigSchema = z.object({
51
51
  enabled: z.boolean().default(true),
52
52
  crashReports: z.boolean().default(true),
53
53
  });
54
+ const ConnectorsSchema = z.object({
55
+ slack: SlackConfigSchema.default(() => SlackConfigSchema.parse({})),
56
+ discord: DiscordConfigSchema.default(() => DiscordConfigSchema.parse({})),
57
+ telegram: TelegramConfigSchema.default(() => TelegramConfigSchema.parse({})),
58
+ });
59
+ const AgentsSchema = z.object({
60
+ statusCheckInterval: z.number().default(DEFAULTS.agents.statusCheckInterval),
61
+ detectorInterval: z.number().default(DEFAULTS.agents.detectorInterval),
62
+ });
54
63
  const AppConfigSchema = z.object({
55
- ui: UiConfigSchema.default({}),
56
- connectors: z
57
- .object({
58
- slack: SlackConfigSchema.default({}),
59
- discord: DiscordConfigSchema.default({}),
60
- telegram: TelegramConfigSchema.default({}),
61
- })
62
- .default({}),
63
- agents: z
64
- .object({
65
- statusCheckInterval: z.number().default(DEFAULTS.agents.statusCheckInterval),
66
- detectorInterval: z.number().default(DEFAULTS.agents.detectorInterval),
67
- })
68
- .default({}),
69
- relay: RelayConfigSchema.default({}),
70
- worktree: WorktreeConfigSchema.default({}),
71
- telemetry: TelemetryConfigSchema.default({}),
64
+ ui: UiConfigSchema.default(() => UiConfigSchema.parse({})),
65
+ connectors: ConnectorsSchema.default(() => ConnectorsSchema.parse({})),
66
+ agents: AgentsSchema.default(() => AgentsSchema.parse({})),
67
+ relay: RelayConfigSchema.default(() => RelayConfigSchema.parse({})),
68
+ worktree: WorktreeConfigSchema.default(() => WorktreeConfigSchema.parse({})),
69
+ telemetry: TelemetryConfigSchema.default(() => TelemetryConfigSchema.parse({})),
72
70
  });
73
71
  const CONFIG_DIR = path.join(os.homedir(), ".config", "flaio");
74
72
  const CONFIG_FILE = path.join(CONFIG_DIR, "settings.json");
@@ -1 +1 @@
1
- {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"config.js","sourceRoot":"","sources":["../../src/config/config.ts"],"names":[],"mappings":"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"}
@@ -9,11 +9,14 @@ export declare class RelayClient extends EventEmitter {
9
9
  private shouldReconnect;
10
10
  private isHandlingAuthFailure;
11
11
  private tokenRefreshTimer;
12
+ private tokenRefreshRetries;
13
+ private static readonly MAX_TOKEN_REFRESH_RETRIES;
12
14
  private pingTimer;
13
15
  private pongTimer;
14
16
  private started;
15
17
  private lastPingTime;
16
18
  private connectSpan;
19
+ private errorSafetyTimer;
17
20
  private inputLimiter;
18
21
  private browseLimiter;
19
22
  private createSessionLimiter;
@@ -1 +1 @@
1
- {"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../../src/relay/relay-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8L3C,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAA6B;IAG/C,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,iBAAiB,CAA8C;IAGvE,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,SAAS,CAA8C;IAE/D,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAqB;IAGxC,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,oBAAoB,CAA2B;IAGvD,OAAO,CAAC,mBAAmB,CAAgG;;IAQ3H,OAAO,KAAK,UAAU,GAErB;IAMK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAUtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA8Cb,OAAO;IA8FrB,OAAO,CAAC,aAAa;YA8GP,iBAAiB;IAgB/B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;YAYZ,iBAAiB;YAejB,eAAe;YA6Cf,iBAAiB;YAoDjB,oBAAoB;YA6EpB,mBAAmB;YAqKnB,8BAA8B;YA4E9B,yBAAyB;IA0JvC,OAAO,CAAC,oBAAoB;YAsBd,qBAAqB;YA+CrB,oBAAoB;IAoClC,OAAO,CAAC,mBAAmB;YAWb,WAAW;YAwDX,mBAAmB;YAyBnB,aAAa;YA6Db,YAAY;IA2G1B,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,oBAAoB;YA2Bd,uBAAuB;IAkBrC,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,mBAAmB;IAWpB,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,IAAI;IAOtI,OAAO,CAAC,IAAI;CAiBb"}
1
+ {"version":3,"file":"relay-client.d.ts","sourceRoot":"","sources":["../../src/relay/relay-client.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,YAAY,EAAE,MAAM,aAAa,CAAC;AA8L3C,qBAAa,WAAY,SAAQ,YAAY;IAC3C,OAAO,CAAC,EAAE,CAAuC;IACjD,OAAO,CAAC,eAAe,CAAqC;IAC5D,OAAO,CAAC,YAAY,CAAe;IACnC,OAAO,CAAC,UAAU,CAA6B;IAG/C,OAAO,CAAC,cAAc,CAA8C;IACpE,OAAO,CAAC,gBAAgB,CAAK;IAC7B,OAAO,CAAC,eAAe,CAAS;IAChC,OAAO,CAAC,qBAAqB,CAAS;IACtC,OAAO,CAAC,iBAAiB,CAA8C;IACvE,OAAO,CAAC,mBAAmB,CAAK;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAC,yBAAyB,CAAM;IAGvD,OAAO,CAAC,SAAS,CAA+C;IAChE,OAAO,CAAC,SAAS,CAA8C;IAE/D,OAAO,CAAC,OAAO,CAAS;IAGxB,OAAO,CAAC,YAAY,CAAK;IACzB,OAAO,CAAC,WAAW,CAAqB;IACxC,OAAO,CAAC,gBAAgB,CAA8C;IAGtE,OAAO,CAAC,YAAY,CAA2B;IAC/C,OAAO,CAAC,aAAa,CAA2B;IAChD,OAAO,CAAC,oBAAoB,CAA2B;IAGvD,OAAO,CAAC,mBAAmB,CAAgG;;IAQ3H,OAAO,KAAK,UAAU,GAErB;IAMK,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAiBtB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YA0Db,OAAO;IAsHrB,OAAO,CAAC,aAAa;YA8GP,iBAAiB;IAgB/B,OAAO,CAAC,gBAAgB;IAoBxB,OAAO,CAAC,iBAAiB;IAMzB,OAAO,CAAC,UAAU;IAUlB,OAAO,CAAC,wBAAwB;IAsBhC,OAAO,CAAC,kBAAkB;IAyB1B,OAAO,CAAC,kBAAkB;YAYZ,iBAAiB;YAejB,eAAe;YA6Cf,iBAAiB;YAoDjB,oBAAoB;YA6EpB,mBAAmB;YAsKnB,8BAA8B;YA4E9B,yBAAyB;IA0JvC,OAAO,CAAC,oBAAoB;YAsBd,qBAAqB;YA+CrB,oBAAoB;IAoClC,OAAO,CAAC,mBAAmB;YAWb,WAAW;YAwDX,mBAAmB;YAyBnB,aAAa;YA+Db,YAAY;IA2G1B,OAAO,CAAC,cAAc;IAuBtB,OAAO,CAAC,mBAAmB;IAM3B,OAAO,CAAC,eAAe;IA4CvB,OAAO,CAAC,cAAc;IAMtB,OAAO,CAAC,cAAc;IAUtB,OAAO,CAAC,cAAc;IAetB,OAAO,CAAC,oBAAoB;YA2Bd,uBAAuB;IAyBrC,OAAO,CAAC,sBAAsB;IAW9B,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,mBAAmB;IAWpB,gBAAgB,CAAC,gBAAgB,EAAE,OAAO,CAAC;QAAE,QAAQ,EAAE,OAAO,CAAC;QAAC,mBAAmB,EAAE,OAAO,CAAC;QAAC,cAAc,EAAE,OAAO,CAAA;KAAE,CAAC,GAAG,IAAI;IAOtI,OAAO,CAAC,IAAI;CAiBb"}
@@ -5,7 +5,7 @@ import os from "node:os";
5
5
  import path from "node:path";
6
6
  import { PING_INTERVAL_MS, PONG_TIMEOUT_MS, DEFAULT_DRIVER_NAME, } from "./relay-protocol.js";
7
7
  import { ticketTracker } from "./ticket-tracker.js";
8
- import { createWorktree, autoSaveAllWorktrees } from "./worktree-manager.js";
8
+ import { createWorktree, autoSaveAllWorktrees, pruneStaleEntries } from "./worktree-manager.js";
9
9
  import { setRelayConnectionStatus, setSessionEncryptionStatus, updateViewerCount, clearViewerCounts, setSessionOrgSettings, getSessionOrgSettings, setWorktreeDefaults, } from "./relay-store.js";
10
10
  import { refreshAuthToken, getTokenExpiry } from "./relay-auth.js";
11
11
  import { appStore, getSessionInstance } from "../store/app-store.js";
@@ -125,6 +125,8 @@ export class RelayClient extends EventEmitter {
125
125
  shouldReconnect = false;
126
126
  isHandlingAuthFailure = false;
127
127
  tokenRefreshTimer = null;
128
+ tokenRefreshRetries = 0;
129
+ static MAX_TOKEN_REFRESH_RETRIES = 10;
128
130
  // Heartbeat state
129
131
  pingTimer = null;
130
132
  pongTimer = null;
@@ -132,6 +134,7 @@ export class RelayClient extends EventEmitter {
132
134
  // Analytics
133
135
  lastPingTime = 0;
134
136
  connectSpan = null;
137
+ errorSafetyTimer = null;
135
138
  // Rate limiters
136
139
  inputLimiter = new RateLimiter(30, 30); // 30 inputs/sec per key
137
140
  browseLimiter = new RateLimiter(10, 10); // 10 browse requests/sec
@@ -155,6 +158,10 @@ export class RelayClient extends EventEmitter {
155
158
  this.started = true;
156
159
  this.shouldReconnect = true;
157
160
  this.reconnectAttempt = 0;
161
+ // Clean up stale worktree manifest entries from previous sessions
162
+ const projectCwds = ticketTracker.getTrackedProjectCwds();
163
+ const cwd = projectCwds[0] ?? process.cwd();
164
+ await pruneStaleEntries(cwd).catch((err) => debugLog(`relay: worktree prune on startup failed: ${err}`));
158
165
  await this.watchSessions();
159
166
  await this.connect();
160
167
  }
@@ -175,6 +182,16 @@ export class RelayClient extends EventEmitter {
175
182
  this.clearReconnectTimer();
176
183
  this.clearHeartbeat();
177
184
  this.clearTokenRefreshTimer();
185
+ // Clean up orphaned connect span
186
+ if (this.connectSpan) {
187
+ this.connectSpan.end();
188
+ this.connectSpan = null;
189
+ }
190
+ // Clean up error safety timer
191
+ if (this.errorSafetyTimer) {
192
+ clearTimeout(this.errorSafetyTimer);
193
+ this.errorSafetyTimer = null;
194
+ }
178
195
  // Untrack all sessions
179
196
  for (const tracked of this.trackedSessions.values()) {
180
197
  this.untrackSession(tracked);
@@ -247,6 +264,11 @@ export class RelayClient extends EventEmitter {
247
264
  this.ws = null;
248
265
  this.clearHeartbeat();
249
266
  clearViewerCounts();
267
+ // Cancel the error handler safety-net timer — close already fired
268
+ if (this.errorSafetyTimer) {
269
+ clearTimeout(this.errorSafetyTimer);
270
+ this.errorSafetyTimer = null;
271
+ }
250
272
  // Clear viewer keys on disconnect — viewers must re-handshake
251
273
  for (const tracked of this.trackedSessions.values()) {
252
274
  tracked.viewerKeys.clear();
@@ -264,11 +286,29 @@ export class RelayClient extends EventEmitter {
264
286
  this.connectSpan = null;
265
287
  }
266
288
  setRelayConnectionStatus("error", err.message);
289
+ // Note: "error" is always followed by "close" in the ws library,
290
+ // so reconnect is handled in the "close" handler. If for some reason
291
+ // "close" doesn't fire, schedule reconnect as a safety net.
292
+ this.errorSafetyTimer = setTimeout(() => {
293
+ this.errorSafetyTimer = null;
294
+ if (this.ws && this.shouldReconnect && this.ws.readyState > 1) {
295
+ debugLog("relay: error handler safety net — forcing reconnect");
296
+ this.ws = null;
297
+ this.clearHeartbeat();
298
+ this.scheduleReconnect();
299
+ }
300
+ }, 5000);
267
301
  });
268
302
  }
269
303
  catch (err) {
270
304
  const message = err instanceof Error ? err.message : String(err);
271
305
  debugLog(`relay: failed to connect: ${message}`);
306
+ // End orphaned connect span
307
+ if (this.connectSpan) {
308
+ this.connectSpan.setStatus({ code: 2, message });
309
+ this.connectSpan.end();
310
+ this.connectSpan = null;
311
+ }
272
312
  setRelayConnectionStatus("error", message);
273
313
  if (this.shouldReconnect) {
274
314
  this.scheduleReconnect();
@@ -705,13 +745,12 @@ export class RelayClient extends EventEmitter {
705
745
  // calls kill() → xterm.dispose() before we can read it.
706
746
  // Cap at 2MB to prevent unbounded memory growth in long planning sessions.
707
747
  const RAW_OUTPUT_MAX = 2 * 1024 * 1024;
708
- let rawOutput = "";
748
+ const rawChunks = [];
749
+ let rawSize = 0;
709
750
  const rawUnsub = session.onRawData((data) => {
710
- if (rawOutput.length < RAW_OUTPUT_MAX) {
711
- rawOutput += data;
712
- if (rawOutput.length > RAW_OUTPUT_MAX) {
713
- rawOutput = rawOutput.slice(-RAW_OUTPUT_MAX);
714
- }
751
+ if (rawSize < RAW_OUTPUT_MAX) {
752
+ rawChunks.push(data);
753
+ rawSize += data.length;
715
754
  }
716
755
  });
717
756
  session.start({
@@ -728,7 +767,8 @@ export class RelayClient extends EventEmitter {
728
767
  const PLANNING_TIMEOUT_MS = 10 * 60 * 1000;
729
768
  const safetyTimer = setTimeout(() => {
730
769
  rawUnsub();
731
- rawOutput = "";
770
+ rawChunks.length = 0;
771
+ rawSize = 0;
732
772
  if (getSessionInstance(session.id)) {
733
773
  debugLog(`relay: planning session ${session.id} timed out after 10min, force closing`);
734
774
  appStore.getState().closeSession(session.id);
@@ -739,8 +779,9 @@ export class RelayClient extends EventEmitter {
739
779
  clearTimeout(safetyTimer);
740
780
  rawUnsub();
741
781
  // Strip ANSI escape sequences from raw PTY output
742
- const plainText = stripAnsi(rawOutput).trim();
743
- rawOutput = ""; // Release for GC — can be up to 2MB
782
+ const plainText = stripAnsi(rawChunks.join("")).trim();
783
+ rawChunks.length = 0; // Release for GC
784
+ rawSize = 0;
744
785
  ticketTracker.updateStatus(msg.ticketId, "plan_ready");
745
786
  this.send({
746
787
  type: "cli_plan_ready",
@@ -1156,6 +1197,8 @@ export class RelayClient extends EventEmitter {
1156
1197
  if (tracked?.keyPair) {
1157
1198
  this.registerSession(id);
1158
1199
  }
1200
+ }).catch((err) => {
1201
+ debugLog(`relay: trackSession failed for ${id}: ${err instanceof Error ? err.message : String(err)}`);
1159
1202
  });
1160
1203
  }
1161
1204
  }
@@ -1401,12 +1444,19 @@ export class RelayClient extends EventEmitter {
1401
1444
  if (newToken) {
1402
1445
  debugLog("relay: token refreshed proactively, reconnecting with new token");
1403
1446
  this.reconnectAttempt = 0;
1447
+ this.tokenRefreshRetries = 0;
1404
1448
  if (this.ws) {
1405
1449
  this.ws.close(1000, "Token refreshed");
1406
1450
  }
1407
1451
  }
1408
1452
  else {
1409
- debugLog("relay: proactive token refresh failed, will retry in 1 minute");
1453
+ this.tokenRefreshRetries++;
1454
+ if (this.tokenRefreshRetries >= RelayClient.MAX_TOKEN_REFRESH_RETRIES) {
1455
+ debugLog(`relay: token refresh failed after ${this.tokenRefreshRetries} attempts, giving up`);
1456
+ this.tokenRefreshRetries = 0;
1457
+ return;
1458
+ }
1459
+ debugLog(`relay: proactive token refresh failed (attempt ${this.tokenRefreshRetries}/${RelayClient.MAX_TOKEN_REFRESH_RETRIES}), will retry in 1 minute`);
1410
1460
  this.tokenRefreshTimer = setTimeout(() => {
1411
1461
  this.tokenRefreshTimer = null;
1412
1462
  this.performProactiveRefresh();