hacklab 0.6.2 → 0.6.6

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 (40) hide show
  1. package/README.md +26 -7
  2. package/dist/commands/join.d.ts.map +1 -1
  3. package/dist/commands/join.js +76 -21
  4. package/dist/commands/join.js.map +1 -1
  5. package/dist/commands/login.d.ts.map +1 -1
  6. package/dist/commands/login.js +4 -0
  7. package/dist/commands/login.js.map +1 -1
  8. package/dist/commands/logout.d.ts.map +1 -1
  9. package/dist/commands/logout.js +5 -0
  10. package/dist/commands/logout.js.map +1 -1
  11. package/dist/commands/org.d.ts +20 -1
  12. package/dist/commands/org.d.ts.map +1 -1
  13. package/dist/commands/org.js +369 -43
  14. package/dist/commands/org.js.map +1 -1
  15. package/dist/commands/sync.d.ts +7 -1
  16. package/dist/commands/sync.d.ts.map +1 -1
  17. package/dist/commands/sync.js +102 -6
  18. package/dist/commands/sync.js.map +1 -1
  19. package/dist/daily-sync.d.ts +40 -0
  20. package/dist/daily-sync.d.ts.map +1 -0
  21. package/dist/daily-sync.js +253 -0
  22. package/dist/daily-sync.js.map +1 -0
  23. package/dist/index.js +23 -17
  24. package/dist/index.js.map +1 -1
  25. package/dist/registry.d.ts.map +1 -1
  26. package/dist/registry.js +5 -3
  27. package/dist/registry.js.map +1 -1
  28. package/dist/session.d.ts +7 -0
  29. package/dist/session.d.ts.map +1 -1
  30. package/dist/session.js +14 -0
  31. package/dist/session.js.map +1 -1
  32. package/dist/sync.d.ts +23 -4
  33. package/dist/sync.d.ts.map +1 -1
  34. package/dist/sync.js +89 -30
  35. package/dist/sync.js.map +1 -1
  36. package/dist/utils/updateCheck.d.ts +10 -0
  37. package/dist/utils/updateCheck.d.ts.map +1 -0
  38. package/dist/utils/updateCheck.js +106 -0
  39. package/dist/utils/updateCheck.js.map +1 -0
  40. package/package.json +6 -1
@@ -1,5 +1,5 @@
1
1
  import * as clack from '@clack/prompts';
2
- import { loadSession, resolveAppUrl } from '../session.js';
2
+ import { envNameForUrl, loadSession, resolveAppUrl, } from '../session.js';
3
3
  import { bold, dim, error, info, success } from '../ui.js';
4
4
  const FIELDS = [
5
5
  { key: 'name', label: 'Name', type: 'text' },
@@ -20,8 +20,30 @@ const FIELDS = [
20
20
  { key: 'tags', label: 'Tags', type: 'list' },
21
21
  { key: 'locations', label: 'Locations', type: 'list' },
22
22
  ];
23
+ // Must match ORG_SLUG_PATTERN on the server (apps/web/lib/org-payload.ts).
24
+ const SLUG_PATTERN = /^[a-z0-9]([a-z0-9-]*[a-z0-9])?$/;
25
+ // Human hint for why a company is claimable.
26
+ export function claimReason(via) {
27
+ if (via === 'email')
28
+ return 'email domain';
29
+ if (via === 'both')
30
+ return 'member · email';
31
+ return 'member';
32
+ }
33
+ // Derive a default slug from a name the same way the server's create-org helper
34
+ // does — the user can still edit it before submitting.
35
+ export function slugify(name) {
36
+ const s = name
37
+ .trim()
38
+ .toLowerCase()
39
+ .replace(/[^a-z0-9]+/g, '-')
40
+ .replace(/^-+|-+$/g, '')
41
+ .slice(0, 64)
42
+ .replace(/-+$/, '');
43
+ return s || 'org';
44
+ }
23
45
  // Short, human label for the current value (shown as a select-menu hint).
24
- function displayValue(spec, value) {
46
+ export function displayValue(spec, value) {
25
47
  if (value == null || value === '')
26
48
  return '(empty)';
27
49
  if (spec.type === 'boolean')
@@ -32,15 +54,36 @@ function displayValue(spec, value) {
32
54
  const s = String(value);
33
55
  return s.length > 48 ? `${s.slice(0, 47)}…` : s;
34
56
  }
35
- async function fetchOrgs(session) {
57
+ // Turn a 401 from any org endpoint into something the user can act on. A bare
58
+ // "Unauthorized" is almost always a per-backend token mismatch: the saved
59
+ // session only authenticates against the backend you logged into, but this
60
+ // command targets a different one (via --env / HACKLAB_APP_URL), so its token
61
+ // isn't valid there. Point at the exact re-login command for the *target*
62
+ // backend instead of dead-ending.
63
+ export function unauthorizedHint(session) {
64
+ const target = resolveAppUrl(session);
65
+ const env = envNameForUrl(target);
66
+ const loginCmd = env && env !== 'production' ? `hacklab login --env ${env}` : 'hacklab login';
67
+ const sessionUrl = session.appUrl.replace(/\/$/, '');
68
+ if (sessionUrl !== target) {
69
+ return `unauthorized — your session is for ${sessionUrl}, but this targets ${target}. run \`${loginCmd}\` to sign in there.`;
70
+ }
71
+ return `unauthorized — your session may have expired. run \`${loginCmd}\` to sign in again.`;
72
+ }
73
+ async function fetchOrgState(session) {
36
74
  const res = await fetch(`${resolveAppUrl(session)}/api/cli/org`, {
37
75
  headers: { Authorization: `Bearer ${session.token}` },
38
76
  });
77
+ if (res.status === 401)
78
+ throw new Error(unauthorizedHint(session));
39
79
  const data = await res.json().catch(() => null);
40
80
  if (!res.ok) {
41
81
  throw new Error(data?.error ?? `failed to load organizations (${res.status})`);
42
82
  }
43
- return (data?.organizations ?? []);
83
+ return {
84
+ organizations: (data?.organizations ?? []),
85
+ claimable: (data?.claimable ?? []),
86
+ };
44
87
  }
45
88
  async function patchOrg(session, orgId, fields) {
46
89
  const res = await fetch(`${resolveAppUrl(session)}/api/cli/org`, {
@@ -51,12 +94,56 @@ async function patchOrg(session, orgId, fields) {
51
94
  },
52
95
  body: JSON.stringify({ orgId, fields }),
53
96
  });
97
+ if (res.status === 401)
98
+ throw new Error(unauthorizedHint(session));
54
99
  const data = await res.json().catch(() => null);
55
100
  if (!res.ok) {
56
101
  throw new Error(data?.error ?? `update failed (${res.status})`);
57
102
  }
58
103
  return data;
59
104
  }
105
+ async function postClaim(session, orgId) {
106
+ const res = await fetch(`${resolveAppUrl(session)}/api/cli/org/claim`, {
107
+ method: 'POST',
108
+ headers: {
109
+ 'Content-Type': 'application/json',
110
+ Authorization: `Bearer ${session.token}`,
111
+ },
112
+ body: JSON.stringify({ orgId }),
113
+ });
114
+ if (res.status === 401)
115
+ throw new Error(unauthorizedHint(session));
116
+ const data = await res.json().catch(() => null);
117
+ if (!res.ok) {
118
+ throw new Error(data?.error ?? `claim failed (${res.status})`);
119
+ }
120
+ return data;
121
+ }
122
+ // Returns ok:true with the new org, or ok:false with the existing org and
123
+ // whether the caller may claim it (a 409 the create flow reroutes, not throws).
124
+ async function postCreate(session, fields) {
125
+ const res = await fetch(`${resolveAppUrl(session)}/api/cli/org/create`, {
126
+ method: 'POST',
127
+ headers: {
128
+ 'Content-Type': 'application/json',
129
+ Authorization: `Bearer ${session.token}`,
130
+ },
131
+ body: JSON.stringify({ fields }),
132
+ });
133
+ if (res.status === 401)
134
+ throw new Error(unauthorizedHint(session));
135
+ const data = await res.json().catch(() => null);
136
+ if (res.ok)
137
+ return { ok: true, org: data };
138
+ if (res.status === 409 && data?.existing) {
139
+ return {
140
+ ok: false,
141
+ existing: data.existing,
142
+ claimable: Boolean(data.claimable),
143
+ };
144
+ }
145
+ throw new Error(data?.error ?? `create failed (${res.status})`);
146
+ }
60
147
  // Prompt for one field, prefilled with the current value. Returns the new
61
148
  // value to send, or a clack cancel symbol.
62
149
  async function promptField(spec, current) {
@@ -121,45 +208,13 @@ async function promptField(spec, current) {
121
208
  return current;
122
209
  return trimmed ? trimmed : null;
123
210
  }
124
- export async function org() {
125
- const session = await loadSession();
126
- if (!session) {
127
- error('not logged in');
128
- info(`run ${dim('hacklab login')} first`);
129
- process.exit(1);
130
- }
131
- clack.intro(bold('hacklab org'));
132
- let orgs;
133
- try {
134
- orgs = await fetchOrgs(session);
135
- }
136
- catch (err) {
137
- clack.cancel(err instanceof Error ? err.message : String(err));
138
- process.exit(1);
139
- }
140
- if (orgs.length === 0) {
141
- clack.cancel(`you don't manage an organization yet — claim one at ${resolveAppUrl(session)} first.`);
142
- process.exit(1);
143
- }
144
- let target = orgs[0];
145
- if (orgs.length > 1) {
146
- const picked = await clack.select({
147
- message: 'which organization?',
148
- options: orgs.map((o) => ({
149
- value: o.id,
150
- label: `${o.name} ${dim(`/o/${o.slug}`)}`,
151
- })),
152
- });
153
- if (clack.isCancel(picked)) {
154
- clack.outro(dim('cancelled.'));
155
- return;
156
- }
157
- target = orgs.find((o) => o.id === picked) ?? target;
158
- }
159
- // Autosave: editing a field writes it immediately (mirrors the web settings'
160
- // "saves instantly, no Save button"). Pick a field, set its value, it saves,
161
- // and the menu shows the saved value. Leave any time with "done" or Esc —
162
- // nothing is pending, so nothing is lost.
211
+ // Autosave editor over a claimed org. Editing a field writes it immediately
212
+ // (mirrors the web settings' "saves instantly, no Save button"): pick a field,
213
+ // set its value, it saves, and the menu shows the saved value. Leave any time
214
+ // with "done" or Esc — nothing is pending, so nothing is lost. Prints its own
215
+ // outro, so callers don't add another.
216
+ async function editLoop(session, initial) {
217
+ let target = initial;
163
218
  const DONE = '__done__';
164
219
  let savedCount = 0;
165
220
  while (true) {
@@ -211,4 +266,275 @@ export async function org() {
211
266
  }
212
267
  clack.outro(dim('done.'));
213
268
  }
269
+ // After a claim/create, offer to drop straight into the editor. Either branch
270
+ // finishes the command (editLoop or the outro here), so exactly one outro runs.
271
+ async function offerEdit(session, org) {
272
+ const go = await clack.confirm({
273
+ message: 'edit its details now?',
274
+ initialValue: false,
275
+ });
276
+ if (clack.isCancel(go) || !go) {
277
+ clack.outro(dim('done.'));
278
+ return;
279
+ }
280
+ await editLoop(session, org);
281
+ }
282
+ async function claimFlow(session, preloaded) {
283
+ let list = preloaded;
284
+ if (!list) {
285
+ try {
286
+ list = (await fetchOrgState(session)).claimable;
287
+ }
288
+ catch (err) {
289
+ clack.cancel(err instanceof Error ? err.message : String(err));
290
+ process.exit(1);
291
+ }
292
+ }
293
+ if (list.length === 0) {
294
+ clack.cancel("no companies to claim — you're not a member of any unclaimed company, and none match your email domain. create one with `hacklab org create`.");
295
+ return;
296
+ }
297
+ const picked = await clack.select({
298
+ message: 'claim which company?',
299
+ options: list.map((o) => ({
300
+ value: o.id,
301
+ label: `${o.name} ${dim(`/o/${o.slug}`)}`,
302
+ hint: claimReason(o.via),
303
+ })),
304
+ });
305
+ if (clack.isCancel(picked)) {
306
+ clack.outro(dim('cancelled.'));
307
+ return;
308
+ }
309
+ const chosen = list.find((o) => o.id === picked);
310
+ if (!chosen) {
311
+ clack.outro(dim('cancelled.'));
312
+ return;
313
+ }
314
+ const ok = await clack.confirm({
315
+ message: `claim ${bold(chosen.name)}? you'll be able to edit its public profile.`,
316
+ });
317
+ if (clack.isCancel(ok) || !ok) {
318
+ clack.outro(dim('cancelled.'));
319
+ return;
320
+ }
321
+ const spin = clack.spinner();
322
+ spin.start(`claiming ${chosen.name}`);
323
+ let claimed;
324
+ try {
325
+ claimed = await postClaim(session, chosen.id);
326
+ spin.stop(`claimed ${chosen.name}`);
327
+ }
328
+ catch (err) {
329
+ spin.stop('could not claim');
330
+ error(err instanceof Error ? err.message : String(err));
331
+ return;
332
+ }
333
+ success(`you now manage ${bold(claimed.name)}`);
334
+ info(`${resolveAppUrl(session)}/o/${claimed.slug}`);
335
+ await offerEdit(session, claimed);
336
+ }
337
+ async function createFlow(session) {
338
+ const name = await clack.text({
339
+ message: 'company name',
340
+ validate: (v) => ((v ?? '').trim() ? undefined : 'name is required'),
341
+ });
342
+ if (clack.isCancel(name)) {
343
+ clack.outro(dim('cancelled.'));
344
+ return;
345
+ }
346
+ const slug = await clack.text({
347
+ message: `slug ${dim('(url handle)')}`,
348
+ initialValue: slugify(name),
349
+ validate: (v) => {
350
+ const t = (v ?? '').trim();
351
+ if (!t)
352
+ return 'slug is required';
353
+ if (!SLUG_PATTERN.test(t)) {
354
+ return 'lowercase letters, numbers, and hyphens only';
355
+ }
356
+ return undefined;
357
+ },
358
+ });
359
+ if (clack.isCancel(slug)) {
360
+ clack.outro(dim('cancelled.'));
361
+ return;
362
+ }
363
+ const website = await clack.text({
364
+ message: `website ${dim('(blank to skip)')}`,
365
+ validate: (v) => {
366
+ const t = (v ?? '').trim();
367
+ if (!t)
368
+ return undefined;
369
+ try {
370
+ new URL(t);
371
+ return undefined;
372
+ }
373
+ catch {
374
+ return 'must be a valid URL (include https://)';
375
+ }
376
+ },
377
+ });
378
+ if (clack.isCancel(website)) {
379
+ clack.outro(dim('cancelled.'));
380
+ return;
381
+ }
382
+ const description = await clack.text({
383
+ message: `short description ${dim('(blank to skip)')}`,
384
+ });
385
+ if (clack.isCancel(description)) {
386
+ clack.outro(dim('cancelled.'));
387
+ return;
388
+ }
389
+ const fields = {
390
+ name: name.trim(),
391
+ slug: slug.trim(),
392
+ };
393
+ if (website.trim())
394
+ fields.website = website.trim();
395
+ if (description.trim())
396
+ fields.description = description.trim();
397
+ const spin = clack.spinner();
398
+ spin.start(`creating ${name.trim()}`);
399
+ let result;
400
+ try {
401
+ result = await postCreate(session, fields);
402
+ }
403
+ catch (err) {
404
+ spin.stop('could not create');
405
+ error(err instanceof Error ? err.message : String(err));
406
+ return;
407
+ }
408
+ if (result.ok) {
409
+ spin.stop(`created ${result.org.name}`);
410
+ success(`you now manage ${bold(result.org.name)}`);
411
+ info(`${resolveAppUrl(session)}/o/${result.org.slug}`);
412
+ await offerEdit(session, result.org);
413
+ return;
414
+ }
415
+ // Slug collision. If the existing org is unclaimed and the caller is a member,
416
+ // offer to claim it instead of forcing a rename.
417
+ spin.stop(`"${slug.trim()}" already exists`);
418
+ const { existing, claimable } = result;
419
+ if (claimable) {
420
+ const go = await clack.confirm({
421
+ message: `${bold(existing.name)} already exists and you can claim it — claim it instead?`,
422
+ });
423
+ if (clack.isCancel(go) || !go) {
424
+ clack.outro(dim('cancelled.'));
425
+ return;
426
+ }
427
+ const spin2 = clack.spinner();
428
+ spin2.start(`claiming ${existing.name}`);
429
+ let claimed;
430
+ try {
431
+ claimed = await postClaim(session, existing.id);
432
+ spin2.stop(`claimed ${existing.name}`);
433
+ }
434
+ catch (err) {
435
+ spin2.stop('could not claim');
436
+ error(err instanceof Error ? err.message : String(err));
437
+ return;
438
+ }
439
+ success(`you now manage ${bold(claimed.name)}`);
440
+ info(`${resolveAppUrl(session)}/o/${claimed.slug}`);
441
+ await offerEdit(session, claimed);
442
+ return;
443
+ }
444
+ // Can't claim it: either someone else owns it, or the caller has no claim
445
+ // (not a member and email domain doesn't match).
446
+ if (existing.claimed) {
447
+ error(`${existing.name} is already claimed by someone else — pick a different slug.`);
448
+ }
449
+ else {
450
+ error(`${existing.name} already exists but you can't claim it (not a member, and your email domain doesn't match). pick a different slug, or ask to be added as a member.`);
451
+ }
452
+ clack.outro(dim('done.'));
453
+ }
454
+ async function editFlow(session) {
455
+ let state;
456
+ try {
457
+ state = await fetchOrgState(session);
458
+ }
459
+ catch (err) {
460
+ clack.cancel(err instanceof Error ? err.message : String(err));
461
+ process.exit(1);
462
+ }
463
+ const { organizations, claimable } = state;
464
+ // Don't manage anything yet → offer claim (if any) / create instead of a
465
+ // dead end pointing at the website.
466
+ if (organizations.length === 0) {
467
+ const options = [];
468
+ if (claimable.length > 0) {
469
+ options.push({
470
+ value: 'claim',
471
+ label: `claim an existing company ${dim(`(${claimable.length})`)}`,
472
+ });
473
+ }
474
+ options.push({ value: 'create', label: 'create a new company' });
475
+ options.push({ value: 'cancel', label: 'cancel' });
476
+ const choice = await clack.select({
477
+ message: "you don't manage a company yet",
478
+ options,
479
+ });
480
+ if (clack.isCancel(choice) || choice === 'cancel') {
481
+ clack.outro(dim('cancelled.'));
482
+ return;
483
+ }
484
+ if (choice === 'claim') {
485
+ await claimFlow(session, claimable);
486
+ return;
487
+ }
488
+ await createFlow(session);
489
+ return;
490
+ }
491
+ let target = organizations[0];
492
+ if (organizations.length > 1) {
493
+ const picked = await clack.select({
494
+ message: 'which organization?',
495
+ options: organizations.map((o) => ({
496
+ value: o.id,
497
+ label: `${o.name} ${dim(`/o/${o.slug}`)}`,
498
+ })),
499
+ });
500
+ if (clack.isCancel(picked)) {
501
+ clack.outro(dim('cancelled.'));
502
+ return;
503
+ }
504
+ target = organizations.find((o) => o.id === picked) ?? target;
505
+ }
506
+ await editLoop(session, target);
507
+ }
508
+ export async function org(args = []) {
509
+ const session = await loadSession();
510
+ if (!session) {
511
+ error('not logged in');
512
+ info(`run ${dim('hacklab login')} first`);
513
+ process.exit(1);
514
+ }
515
+ const sub = (args[0] ?? '').toLowerCase();
516
+ if (sub === 'claim') {
517
+ clack.intro(bold('hacklab org claim'));
518
+ await claimFlow(session);
519
+ return;
520
+ }
521
+ if (sub === 'create') {
522
+ clack.intro(bold('hacklab org create'));
523
+ // Validate the session against the *target* backend before collecting the
524
+ // whole form, so a per-backend token mismatch (the common "I'm logged in but
525
+ // it says Unauthorized" case) fails fast with a fix hint instead of after
526
+ // you've filled everything in.
527
+ try {
528
+ await fetchOrgState(session);
529
+ }
530
+ catch (err) {
531
+ clack.cancel(err instanceof Error ? err.message : String(err));
532
+ process.exit(1);
533
+ }
534
+ await createFlow(session);
535
+ return;
536
+ }
537
+ clack.intro(bold('hacklab org'));
538
+ await editFlow(session);
539
+ }
214
540
  //# sourceMappingURL=org.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/commands/org.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"org.js","sourceRoot":"","sources":["../../src/commands/org.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AACvC,OAAO,EACL,aAAa,EACb,WAAW,EACX,aAAa,GAEd,MAAM,eAAe,CAAA;AACtB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAc1D,MAAM,MAAM,GAAgB;IAC1B,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE;IACzD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;IAClD,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,KAAK,EAAE;IACjD,EAAE,GAAG,EAAE,aAAa,EAAE,KAAK,EAAE,mBAAmB,EAAE,IAAI,EAAE,MAAM,EAAE;IAChE,EAAE,GAAG,EAAE,iBAAiB,EAAE,KAAK,EAAE,kBAAkB,EAAE,IAAI,EAAE,MAAM,EAAE;IACnE,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,MAAM,EAAE;IACnD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,MAAM,EAAE;IACjD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,KAAK,EAAE;IAC9C,EAAE,GAAG,EAAE,SAAS,EAAE,KAAK,EAAE,UAAU,EAAE,IAAI,EAAE,KAAK,EAAE;IAClD,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,QAAQ,EAAE;IACvD,EAAE,GAAG,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE;IAChD,EAAE,GAAG,EAAE,OAAO,EAAE,KAAK,EAAE,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE;IAC9C,EAAE,GAAG,EAAE,UAAU,EAAE,KAAK,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,EAAE;IACtD,EAAE,GAAG,EAAE,YAAY,EAAE,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,EAAE;IACxD,EAAE,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE;IAC5C,EAAE,GAAG,EAAE,WAAW,EAAE,KAAK,EAAE,WAAW,EAAE,IAAI,EAAE,MAAM,EAAE;CACvD,CAAA;AAED,2EAA2E;AAC3E,MAAM,YAAY,GAAG,iCAAiC,CAAA;AAkBtD,6CAA6C;AAC7C,MAAM,UAAU,WAAW,CAAC,GAAwB;IAClD,IAAI,GAAG,KAAK,OAAO;QAAE,OAAO,cAAc,CAAA;IAC1C,IAAI,GAAG,KAAK,MAAM;QAAE,OAAO,gBAAgB,CAAA;IAC3C,OAAO,QAAQ,CAAA;AACjB,CAAC;AAeD,gFAAgF;AAChF,uDAAuD;AACvD,MAAM,UAAU,OAAO,CAAC,IAAY;IAClC,MAAM,CAAC,GAAG,IAAI;SACX,IAAI,EAAE;SACN,WAAW,EAAE;SACb,OAAO,CAAC,aAAa,EAAE,GAAG,CAAC;SAC3B,OAAO,CAAC,UAAU,EAAE,EAAE,CAAC;SACvB,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC;SACZ,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACrB,OAAO,CAAC,IAAI,KAAK,CAAA;AACnB,CAAC;AAED,0EAA0E;AAC1E,MAAM,UAAU,YAAY,CAAC,IAAe,EAAE,KAAc;IAC1D,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK,KAAK,EAAE;QAAE,OAAO,SAAS,CAAA;IACnD,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS;QAAE,OAAO,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACxD,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IAC7E,CAAC;IACD,MAAM,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC,CAAA;IACvB,OAAO,CAAC,CAAC,MAAM,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAA;AACjD,CAAC;AAED,8EAA8E;AAC9E,0EAA0E;AAC1E,2EAA2E;AAC3E,8EAA8E;AAC9E,0EAA0E;AAC1E,kCAAkC;AAClC,MAAM,UAAU,gBAAgB,CAAC,OAAgB;IAC/C,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,MAAM,GAAG,GAAG,aAAa,CAAC,MAAM,CAAC,CAAA;IACjC,MAAM,QAAQ,GACZ,GAAG,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC,CAAC,uBAAuB,GAAG,EAAE,CAAC,CAAC,CAAC,eAAe,CAAA;IAC9E,MAAM,UAAU,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IACpD,IAAI,UAAU,KAAK,MAAM,EAAE,CAAC;QAC1B,OAAO,sCAAsC,UAAU,sBAAsB,MAAM,WAAW,QAAQ,sBAAsB,CAAA;IAC9H,CAAC;IACD,OAAO,uDAAuD,QAAQ,sBAAsB,CAAA;AAC9F,CAAC;AAED,KAAK,UAAU,aAAa,CAC1B,OAAgB;IAEhB,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,EAAE;QAC/D,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE;KACtD,CAAC,CAAA;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CACb,IAAI,EAAE,KAAK,IAAI,iCAAiC,GAAG,CAAC,MAAM,GAAG,CAC9D,CAAA;IACH,CAAC;IACD,OAAO;QACL,aAAa,EAAE,CAAC,IAAI,EAAE,aAAa,IAAI,EAAE,CAAU;QACnD,SAAS,EAAE,CAAC,IAAI,EAAE,SAAS,IAAI,EAAE,CAAmB;KACrD,CAAA;AACH,CAAC;AAED,KAAK,UAAU,QAAQ,CACrB,OAAgB,EAChB,KAAa,EACb,MAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,cAAc,EAAE;QAC/D,MAAM,EAAE,OAAO;QACf,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SACzC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC;KACxC,CAAC,CAAA;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;IACjE,CAAC;IACD,OAAO,IAAW,CAAA;AACpB,CAAC;AAED,KAAK,UAAU,SAAS,CAAC,OAAgB,EAAE,KAAa;IACtD,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,oBAAoB,EAAE;QACrE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SACzC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,KAAK,EAAE,CAAC;KAChC,CAAC,CAAA;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,iBAAiB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;IAChE,CAAC;IACD,OAAO,IAAW,CAAA;AACpB,CAAC;AAED,0EAA0E;AAC1E,gFAAgF;AAChF,KAAK,UAAU,UAAU,CACvB,OAAgB,EAChB,MAA+B;IAE/B,MAAM,GAAG,GAAG,MAAM,KAAK,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,qBAAqB,EAAE;QACtE,MAAM,EAAE,MAAM;QACd,OAAO,EAAE;YACP,cAAc,EAAE,kBAAkB;YAClC,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE;SACzC;QACD,IAAI,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,CAAC;KACjC,CAAC,CAAA;IACF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG;QAAE,MAAM,IAAI,KAAK,CAAC,gBAAgB,CAAC,OAAO,CAAC,CAAC,CAAA;IAClE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;IAC/C,IAAI,GAAG,CAAC,EAAE;QAAE,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE,IAAW,EAAE,CAAA;IACjD,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,IAAI,IAAI,EAAE,QAAQ,EAAE,CAAC;QACzC,OAAO;YACL,EAAE,EAAE,KAAK;YACT,QAAQ,EAAE,IAAI,CAAC,QAAuB;YACtC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,SAAS,CAAC;SACnC,CAAA;IACH,CAAC;IACD,MAAM,IAAI,KAAK,CAAC,IAAI,EAAE,KAAK,IAAI,kBAAkB,GAAG,CAAC,MAAM,GAAG,CAAC,CAAA;AACjE,CAAC;AAED,0EAA0E;AAC1E,2CAA2C;AAC3C,KAAK,UAAU,WAAW,CACxB,IAAe,EACf,OAAgB;IAEhB,IAAI,IAAI,CAAC,IAAI,KAAK,SAAS,EAAE,CAAC;QAC5B,OAAO,KAAK,CAAC,OAAO,CAAC;YACnB,OAAO,EAAE,IAAI,CAAC,KAAK;YACnB,YAAY,EAAE,OAAO,CAAC,OAAO,CAAC;SAC/B,CAAC,CAAA;IACJ,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM,EAAE,CAAC;QACzB,MAAM,OAAO,GAAG,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,EAAE,CAAA;QAChE,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,mCAAmC,CAAC,EAAE;YACpE,YAAY,EAAE,OAAO;SACtB,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QACvC,MAAM,KAAK,GAAG,KAAK;aAChB,KAAK,CAAC,GAAG,CAAC;aACV,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;aACpB,MAAM,CAAC,OAAO,CAAC,CAAA;QAClB,OAAO,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAA;IACpC,CAAC;IAED,IAAI,IAAI,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;QAC3B,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;YAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE;YACnD,YAAY,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;YACpD,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;gBACd,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC1B,OAAO,CAAC,CAAC,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,wBAAwB,CAAA;YACrE,CAAC;SACF,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;YAAE,OAAO,KAAK,CAAA;QACvC,OAAO,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,CAAA;IACnD,CAAC;IAED,MAAM,KAAK,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC7B,OAAO,EACL,IAAI,CAAC,IAAI,KAAK,KAAK;YACjB,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,IAAI,GAAG,CAAC,kBAAkB,CAAC,EAAE;YAC5C,CAAC,CAAC,IAAI,CAAC,KAAK;QAChB,YAAY,EAAE,OAAO,IAAI,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC;QACpD,QAAQ,EACN,IAAI,CAAC,IAAI,KAAK,KAAK;YACjB,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE;gBACJ,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;gBAC1B,IAAI,CAAC,CAAC;oBAAE,OAAO,SAAS,CAAA;gBACxB,IAAI,CAAC;oBACH,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;oBACV,OAAO,SAAS,CAAA;gBAClB,CAAC;gBAAC,MAAM,CAAC;oBACP,OAAO,wCAAwC,CAAA;gBACjD,CAAC;YACH,CAAC;YACH,CAAC,CAAC,SAAS;KAChB,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC;QAAE,OAAO,KAAK,CAAA;IACvC,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,EAAE,CAAA;IAC5B,qEAAqE;IACrE,IAAI,CAAC,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,CAAC,IAAI,CAAC,OAAO;QAAE,OAAO,OAAO,CAAA;IAC5E,OAAO,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAA;AACjC,CAAC;AAED,4EAA4E;AAC5E,+EAA+E;AAC/E,8EAA8E;AAC9E,8EAA8E;AAC9E,uCAAuC;AACvC,KAAK,UAAU,QAAQ,CAAC,OAAgB,EAAE,OAAY;IACpD,IAAI,MAAM,GAAG,OAAO,CAAA;IACpB,MAAM,IAAI,GAAG,UAAU,CAAA;IACvB,IAAI,UAAU,GAAG,CAAC,CAAA;IAClB,OAAO,IAAI,EAAE,CAAC;QACZ,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,WAAW,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,mBAAmB,CAAC,EAAE;YACnE,OAAO,EAAE;gBACP,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;oBACpB,KAAK,EAAE,CAAC,CAAC,GAAG;oBACZ,KAAK,EAAE,CAAC,CAAC,KAAK;oBACd,IAAI,EAAE,YAAY,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;iBACrC,CAAC,CAAC;gBACH,EAAE,KAAK,EAAE,IAAI,EAAE,KAAK,EAAE,QAAQ,EAAE;aACjC;SACF,CAAC,CAAA;QACF,2EAA2E;QAC3E,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,IAAI;YAAE,MAAK;QAEpD,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,GAAG,KAAK,MAAM,CAAC,CAAA;QACjD,IAAI,CAAC,IAAI;YAAE,SAAQ;QACnB,MAAM,IAAI,GAAG,MAAM,WAAW,CAAC,IAAI,EAAE,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAA;QACtD,0EAA0E;QAC1E,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;YAAE,SAAQ;QAElC,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,EAAE,CAAA;QACtC,MAAM,QAAQ,GAAG,MAAM,CAAC,IAAI,CAAA;QAC5B,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAC5B,IAAI,CAAC,KAAK,CAAC,UAAU,KAAK,EAAE,CAAC,CAAA;QAC7B,IAAI,CAAC;YACH,MAAM,OAAO,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,EAAE;gBACjD,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,IAAI;aACjB,CAAC,CAAA;YACF,MAAM,GAAG,EAAE,GAAG,MAAM,EAAE,GAAG,OAAO,EAAE,CAAA;YAClC,UAAU,EAAE,CAAA;YACZ,IAAI,CAAC,IAAI,CAAC,SAAS,KAAK,EAAE,CAAC,CAAA;YAC3B,IAAI,IAAI,CAAC,GAAG,KAAK,MAAM,IAAI,MAAM,CAAC,IAAI,KAAK,QAAQ,EAAE,CAAC;gBACpD,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,mBAAmB,QAAQ,yBAAyB,CAAC,CAAA;YACtE,CAAC;QACH,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,IAAI,CAAC,IAAI,CAAC,kBAAkB,KAAK,EAAE,CAAC,CAAA;YACpC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACvD,6DAA6D;QAC/D,CAAC;IACH,CAAC;IAED,IAAI,UAAU,GAAG,CAAC,EAAE,CAAC;QACnB,OAAO,CACL,SAAS,UAAU,UAAU,UAAU,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,CACnF,CAAA;QACD,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACpD,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED,8EAA8E;AAC9E,gFAAgF;AAChF,KAAK,UAAU,SAAS,CAAC,OAAgB,EAAE,GAAQ;IACjD,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,uBAAuB;QAChC,YAAY,EAAE,KAAK;KACpB,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;QACzB,OAAM;IACR,CAAC;IACD,MAAM,QAAQ,CAAC,OAAO,EAAE,GAAG,CAAC,CAAA;AAC9B,CAAC;AAED,KAAK,UAAU,SAAS,CACtB,OAAgB,EAChB,SAA0B;IAE1B,IAAI,IAAI,GAAG,SAAS,CAAA;IACpB,IAAI,CAAC,IAAI,EAAE,CAAC;QACV,IAAI,CAAC;YACH,IAAI,GAAG,CAAC,MAAM,aAAa,CAAC,OAAO,CAAC,CAAC,CAAC,SAAS,CAAA;QACjD,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;IACH,CAAC;IAED,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACtB,KAAK,CAAC,MAAM,CACV,+IAA+I,CAChJ,CAAA;QACD,OAAM;IACR,CAAC;IAED,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;QAChC,OAAO,EAAE,sBAAsB;QAC/B,OAAO,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;YACxB,KAAK,EAAE,CAAC,CAAC,EAAE;YACX,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;YACzC,IAAI,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,CAAC;SACzB,CAAC,CAAC;KACJ,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;QAC3B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IACD,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;IAChD,IAAI,CAAC,MAAM,EAAE,CAAC;QACZ,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;QAC7B,OAAO,EAAE,SAAS,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,8CAA8C;KAClF,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACrC,IAAI,OAAY,CAAA;IAChB,IAAI,CAAC;QACH,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,CAAC,CAAA;QAC7C,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,IAAI,EAAE,CAAC,CAAA;IACrC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;QAC5B,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IAED,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;IAC/C,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;IACnD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;AACnC,CAAC;AAED,KAAK,UAAU,UAAU,CAAC,OAAgB;IACxC,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC5B,OAAO,EAAE,cAAc;QACvB,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,kBAAkB,CAAC;KACrE,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,IAAI,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC5B,OAAO,EAAE,QAAQ,GAAG,CAAC,cAAc,CAAC,EAAE;QACtC,YAAY,EAAE,OAAO,CAAC,IAAI,CAAC;QAC3B,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC1B,IAAI,CAAC,CAAC;gBAAE,OAAO,kBAAkB,CAAA;YACjC,IAAI,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC;gBAC1B,OAAO,8CAA8C,CAAA;YACvD,CAAC;YACD,OAAO,SAAS,CAAA;QAClB,CAAC;KACF,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QACzB,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,OAAO,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QAC/B,OAAO,EAAE,WAAW,GAAG,CAAC,iBAAiB,CAAC,EAAE;QAC5C,QAAQ,EAAE,CAAC,CAAC,EAAE,EAAE;YACd,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;YAC1B,IAAI,CAAC,CAAC;gBAAE,OAAO,SAAS,CAAA;YACxB,IAAI,CAAC;gBACH,IAAI,GAAG,CAAC,CAAC,CAAC,CAAA;gBACV,OAAO,SAAS,CAAA;YAClB,CAAC;YAAC,MAAM,CAAC;gBACP,OAAO,wCAAwC,CAAA;YACjD,CAAC;QACH,CAAC;KACF,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE,CAAC;QAC5B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,KAAK,CAAC,IAAI,CAAC;QACnC,OAAO,EAAE,qBAAqB,GAAG,CAAC,iBAAiB,CAAC,EAAE;KACvD,CAAC,CAAA;IACF,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE,CAAC;QAChC,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;QAC9B,OAAM;IACR,CAAC;IAED,MAAM,MAAM,GAA4B;QACtC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;QACjB,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE;KAClB,CAAA;IACD,IAAI,OAAO,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,OAAO,GAAG,OAAO,CAAC,IAAI,EAAE,CAAA;IACnD,IAAI,WAAW,CAAC,IAAI,EAAE;QAAE,MAAM,CAAC,WAAW,GAAG,WAAW,CAAC,IAAI,EAAE,CAAA;IAE/D,MAAM,IAAI,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;IAC5B,IAAI,CAAC,KAAK,CAAC,YAAY,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,CAAA;IACrC,IAAI,MAAoB,CAAA;IACxB,IAAI,CAAC;QACH,MAAM,GAAG,MAAM,UAAU,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;IAC5C,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,IAAI,CAAC,kBAAkB,CAAC,CAAA;QAC7B,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QACvD,OAAM;IACR,CAAC;IAED,IAAI,MAAM,CAAC,EAAE,EAAE,CAAC;QACd,IAAI,CAAC,IAAI,CAAC,WAAW,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACvC,OAAO,CAAC,kBAAkB,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAClD,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAA;QACtD,MAAM,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,GAAG,CAAC,CAAA;QACpC,OAAM;IACR,CAAC;IAED,+EAA+E;IAC/E,iDAAiD;IACjD,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,EAAE,kBAAkB,CAAC,CAAA;IAC5C,MAAM,EAAE,QAAQ,EAAE,SAAS,EAAE,GAAG,MAAM,CAAA;IACtC,IAAI,SAAS,EAAE,CAAC;QACd,MAAM,EAAE,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YAC7B,OAAO,EAAE,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,0DAA0D;SAC1F,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YAC9B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QACD,MAAM,KAAK,GAAG,KAAK,CAAC,OAAO,EAAE,CAAA;QAC7B,KAAK,CAAC,KAAK,CAAC,YAAY,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QACxC,IAAI,OAAY,CAAA;QAChB,IAAI,CAAC;YACH,OAAO,GAAG,MAAM,SAAS,CAAC,OAAO,EAAE,QAAQ,CAAC,EAAE,CAAC,CAAA;YAC/C,KAAK,CAAC,IAAI,CAAC,WAAW,QAAQ,CAAC,IAAI,EAAE,CAAC,CAAA;QACxC,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,IAAI,CAAC,iBAAiB,CAAC,CAAA;YAC7B,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YACvD,OAAM;QACR,CAAC;QACD,OAAO,CAAC,kBAAkB,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QAC/C,IAAI,CAAC,GAAG,aAAa,CAAC,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;QACnD,MAAM,SAAS,CAAC,OAAO,EAAE,OAAO,CAAC,CAAA;QACjC,OAAM;IACR,CAAC;IAED,0EAA0E;IAC1E,iDAAiD;IACjD,IAAI,QAAQ,CAAC,OAAO,EAAE,CAAC;QACrB,KAAK,CACH,GAAG,QAAQ,CAAC,IAAI,8DAA8D,CAC/E,CAAA;IACH,CAAC;SAAM,CAAC;QACN,KAAK,CACH,GAAG,QAAQ,CAAC,IAAI,oJAAoJ,CACrK,CAAA;IACH,CAAC;IACD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAA;AAC3B,CAAC;AAED,KAAK,UAAU,QAAQ,CAAC,OAAgB;IACtC,IAAI,KAA0D,CAAA;IAC9D,IAAI,CAAC;QACH,KAAK,GAAG,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;IACtC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACb,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;QAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IACD,MAAM,EAAE,aAAa,EAAE,SAAS,EAAE,GAAG,KAAK,CAAA;IAE1C,yEAAyE;IACzE,oCAAoC;IACpC,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAC/B,MAAM,OAAO,GAAuC,EAAE,CAAA;QACtD,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,OAAO,CAAC,IAAI,CAAC;gBACX,KAAK,EAAE,OAAO;gBACd,KAAK,EAAE,6BAA6B,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,EAAE;aACnE,CAAC,CAAA;QACJ,CAAC;QACD,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,sBAAsB,EAAE,CAAC,CAAA;QAChE,OAAO,CAAC,IAAI,CAAC,EAAE,KAAK,EAAE,QAAQ,EAAE,KAAK,EAAE,QAAQ,EAAE,CAAC,CAAA;QAElD,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,gCAAgC;YACzC,OAAO;SACR,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,MAAM,KAAK,QAAQ,EAAE,CAAC;YAClD,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QACD,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;YACvB,MAAM,SAAS,CAAC,OAAO,EAAE,SAAS,CAAC,CAAA;YACnC,OAAM;QACR,CAAC;QACD,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QACzB,OAAM;IACR,CAAC;IAED,IAAI,MAAM,GAAG,aAAa,CAAC,CAAC,CAAE,CAAA;IAC9B,IAAI,aAAa,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;QAC7B,MAAM,MAAM,GAAG,MAAM,KAAK,CAAC,MAAM,CAAC;YAChC,OAAO,EAAE,qBAAqB;YAC9B,OAAO,EAAE,aAAa,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACjC,KAAK,EAAE,CAAC,CAAC,EAAE;gBACX,KAAK,EAAE,GAAG,CAAC,CAAC,IAAI,IAAI,GAAG,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,CAAC,EAAE;aAC1C,CAAC,CAAC;SACJ,CAAC,CAAA;QACF,IAAI,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC;YAC3B,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAA;YAC9B,OAAM;QACR,CAAC;QACD,MAAM,GAAG,aAAa,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,MAAM,CAAA;IAC/D,CAAC;IAED,MAAM,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC,CAAA;AACjC,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,GAAG,CAAC,OAAiB,EAAE;IAC3C,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAA;IACnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,eAAe,CAAC,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,GAAG,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;IAEzC,IAAI,GAAG,KAAK,OAAO,EAAE,CAAC;QACpB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC,CAAA;QACtC,MAAM,SAAS,CAAC,OAAO,CAAC,CAAA;QACxB,OAAM;IACR,CAAC;IACD,IAAI,GAAG,KAAK,QAAQ,EAAE,CAAC;QACrB,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,oBAAoB,CAAC,CAAC,CAAA;QACvC,0EAA0E;QAC1E,6EAA6E;QAC7E,0EAA0E;QAC1E,+BAA+B;QAC/B,IAAI,CAAC;YACH,MAAM,aAAa,CAAC,OAAO,CAAC,CAAA;QAC9B,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,KAAK,CAAC,MAAM,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;QACjB,CAAC;QACD,MAAM,UAAU,CAAC,OAAO,CAAC,CAAA;QACzB,OAAM;IACR,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;IAChC,MAAM,QAAQ,CAAC,OAAO,CAAC,CAAA;AACzB,CAAC"}
@@ -1,2 +1,8 @@
1
- export declare function sync(): Promise<void>;
1
+ /**
2
+ * `hacklab sync` — dispatch on flags:
3
+ * (none) interactive sync (scan, upload, show stats)
4
+ * --install-daily set up the OS-native daily background sync
5
+ * --quiet the unattended daily run (logs to a file, no output)
6
+ */
7
+ export declare function sync(args?: string[]): Promise<void>;
2
8
  //# sourceMappingURL=sync.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAWA,wBAAsB,IAAI,kBAyEzB"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAyBA;;;;;GAKG;AACH,wBAAsB,IAAI,CAAC,IAAI,GAAE,MAAM,EAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAI7D"}
@@ -1,16 +1,109 @@
1
1
  import * as clack from '@clack/prompts';
2
- import { loadSessionState } from '../session.js';
3
- import { checkSession, formatTokens, runSync, syncGithubRepos, } from '../sync.js';
2
+ import { appendSyncLog, clearSyncPaused, installDailySync, markSyncPaused, } from '../daily-sync.js';
3
+ import { scanAllTools } from '../scanners/index.js';
4
+ import { loadSession, loadSessionState } from '../session.js';
5
+ import { checkSession, ensureFreshSession, formatTokens, LOGIN_EXPIRED_MESSAGE, refreshSession, runSync, syncGithubRepos, uploadTokenScan, } from '../sync.js';
4
6
  import { bold, dim, error, info, success } from '../ui.js';
5
- export async function sync() {
6
- const sessionState = await loadSessionState();
7
- const session = sessionState.session;
7
+ const SESSION_EXPIRED_REASON = 'your hacklab session expired — run `hacklab login`';
8
+ /**
9
+ * `hacklab sync` — dispatch on flags:
10
+ * (none) interactive sync (scan, upload, show stats)
11
+ * --install-daily set up the OS-native daily background sync
12
+ * --quiet the unattended daily run (logs to a file, no output)
13
+ */
14
+ export async function sync(args = []) {
15
+ if (args.includes('--install-daily'))
16
+ return installDailyCommand();
17
+ if (args.includes('--quiet'))
18
+ return quietSync();
19
+ return interactiveSync();
20
+ }
21
+ /** Set up the daily background sync (used by `--install-daily` and the join
22
+ * ritual's prompt). Requires a session — the scheduled job runs as this user. */
23
+ async function installDailyCommand() {
24
+ const session = await loadSession();
8
25
  if (!session) {
26
+ error('not logged in');
27
+ info(`run ${dim('hacklab login')} first, then ${dim('hacklab sync --install-daily')}`);
28
+ process.exit(1);
29
+ }
30
+ const result = await installDailySync();
31
+ if (result.ok) {
32
+ success(`daily background sync set up (${result.mechanism})`);
33
+ info(dim(` ${result.detail}`));
34
+ info(dim(' turn it off anytime with `hacklab logout`'));
35
+ }
36
+ else {
37
+ info(result.instructions);
38
+ }
39
+ }
40
+ /**
41
+ * The unattended daily run (launchd/systemd invoke `hacklab sync --quiet`).
42
+ * Silent by design — everything goes to ~/.hacklab/sync.log. Proactively
43
+ * refreshes a near-expiry session; if the session has truly lapsed it drops a
44
+ * paused marker the next interactive run surfaces, then exits cleanly.
45
+ */
46
+ async function quietSync() {
47
+ const state = await loadSessionState();
48
+ if (!state.session) {
49
+ await appendSyncLog(`skip: ${state.status}`);
50
+ // 'expired' or 'invalid' (corrupt/unparseable file) both mean the user must
51
+ // log in again — surface it. 'missing' means logged out / never set up, so
52
+ // stay silent (nothing to pause).
53
+ if (state.status === 'expired' || state.status === 'invalid') {
54
+ await markSyncPaused(state.status === 'invalid'
55
+ ? 'your hacklab session file is unreadable — run `hacklab login`'
56
+ : SESSION_EXPIRED_REASON);
57
+ }
58
+ return;
59
+ }
60
+ const session = await ensureFreshSession(state.session);
61
+ const scan = await scanAllTools();
62
+ // Upload tokens AND mirror pinned repos together, so the after-refresh retry
63
+ // below does the exact same work as the happy path (no silently-skipped repo
64
+ // sync on a day the session had to be refreshed mid-run).
65
+ const push = async (s) => {
66
+ await uploadTokenScan(s, scan);
67
+ await syncGithubRepos(s);
68
+ };
69
+ try {
70
+ await push(session);
71
+ await clearSyncPaused();
72
+ await appendSyncLog('ok');
73
+ }
74
+ catch (e) {
75
+ const msg = e instanceof Error ? e.message : String(e);
76
+ if (msg !== LOGIN_EXPIRED_MESSAGE) {
77
+ await appendSyncLog(`error: ${msg}`);
78
+ return;
79
+ }
80
+ // Proactive refresh missed it — try once more, then pause.
81
+ const refreshed = await refreshSession(session);
82
+ if (refreshed) {
83
+ try {
84
+ await push(refreshed);
85
+ await clearSyncPaused();
86
+ await appendSyncLog('ok (after refresh)');
87
+ return;
88
+ }
89
+ catch {
90
+ // fall through to pause
91
+ }
92
+ }
93
+ await markSyncPaused(SESSION_EXPIRED_REASON);
94
+ await appendSyncLog('paused: session expired');
95
+ }
96
+ }
97
+ async function interactiveSync() {
98
+ const sessionState = await loadSessionState();
99
+ if (!sessionState.session) {
9
100
  error(sessionState.status === 'expired' ? 'login expired' : 'not logged in');
10
101
  info(`run ${dim('hacklab login')} first`);
11
102
  process.exit(1);
12
103
  }
13
- const sessionCheck = await checkSession(session);
104
+ // Fail fast with clear diagnostics (auth / wrong-backend / server-down) before
105
+ // scanning and uploading.
106
+ const sessionCheck = await checkSession(sessionState.session);
14
107
  if (sessionCheck.status === 'unauthorized') {
15
108
  error('login expired');
16
109
  info(`run ${dim('hacklab login')} again`);
@@ -20,6 +113,9 @@ export async function sync() {
20
113
  error(sessionCheck.message);
21
114
  process.exit(1);
22
115
  }
116
+ // Proactively slide a near-expiry session forward — same behavior as the daily
117
+ // job, so expiry management doesn't differ by entry point.
118
+ const session = await ensureFreshSession(sessionState.session);
23
119
  console.log('');
24
120
  console.log(bold(' hacklab sync'));
25
121
  console.log(dim(' scanning local AI tool usage...'));