hacklab 0.6.1 → 0.6.4

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 (79) hide show
  1. package/README.md +12 -3
  2. package/dist/commands/brag.js +4 -4
  3. package/dist/commands/brag.js.map +1 -1
  4. package/dist/commands/chat.d.ts.map +1 -1
  5. package/dist/commands/chat.js +16 -12
  6. package/dist/commands/chat.js.map +1 -1
  7. package/dist/commands/drop.d.ts +9 -0
  8. package/dist/commands/drop.d.ts.map +1 -1
  9. package/dist/commands/drop.js +33 -4
  10. package/dist/commands/drop.js.map +1 -1
  11. package/dist/commands/join.d.ts +3 -1
  12. package/dist/commands/join.d.ts.map +1 -1
  13. package/dist/commands/join.js +47 -3
  14. package/dist/commands/join.js.map +1 -1
  15. package/dist/commands/login.d.ts +18 -1
  16. package/dist/commands/login.d.ts.map +1 -1
  17. package/dist/commands/login.js +156 -19
  18. package/dist/commands/login.js.map +1 -1
  19. package/dist/commands/logout.d.ts +2 -0
  20. package/dist/commands/logout.d.ts.map +1 -0
  21. package/dist/commands/logout.js +15 -0
  22. package/dist/commands/logout.js.map +1 -0
  23. package/dist/commands/org.js +5 -5
  24. package/dist/commands/org.js.map +1 -1
  25. package/dist/commands/sync.d.ts.map +1 -1
  26. package/dist/commands/sync.js +9 -1
  27. package/dist/commands/sync.js.map +1 -1
  28. package/dist/commands/whoami.d.ts.map +1 -1
  29. package/dist/commands/whoami.js +10 -2
  30. package/dist/commands/whoami.js.map +1 -1
  31. package/dist/index.js +36 -104
  32. package/dist/index.js.map +1 -1
  33. package/dist/registry.d.ts +15 -0
  34. package/dist/registry.d.ts.map +1 -0
  35. package/dist/registry.js +77 -0
  36. package/dist/registry.js.map +1 -0
  37. package/dist/resolve-command.d.ts +0 -1
  38. package/dist/resolve-command.d.ts.map +1 -1
  39. package/dist/resolve-command.js +2 -17
  40. package/dist/resolve-command.js.map +1 -1
  41. package/dist/session.d.ts +26 -5
  42. package/dist/session.d.ts.map +1 -1
  43. package/dist/session.js +55 -8
  44. package/dist/session.js.map +1 -1
  45. package/dist/share.d.ts +2 -2
  46. package/dist/share.js +2 -2
  47. package/dist/sync.d.ts +18 -34
  48. package/dist/sync.d.ts.map +1 -1
  49. package/dist/sync.js +47 -686
  50. package/dist/sync.js.map +1 -1
  51. package/dist/ui.d.ts +2 -0
  52. package/dist/ui.d.ts.map +1 -1
  53. package/dist/ui.js +4 -0
  54. package/dist/ui.js.map +1 -1
  55. package/dist/utils/openBrowser.d.ts +12 -0
  56. package/dist/utils/openBrowser.d.ts.map +1 -1
  57. package/dist/utils/openBrowser.js +30 -12
  58. package/dist/utils/openBrowser.js.map +1 -1
  59. package/dist/utils/updateCheck.d.ts +10 -0
  60. package/dist/utils/updateCheck.d.ts.map +1 -0
  61. package/dist/utils/updateCheck.js +106 -0
  62. package/dist/utils/updateCheck.js.map +1 -0
  63. package/package.json +3 -2
  64. package/dist/commands/company.d.ts +0 -2
  65. package/dist/commands/company.d.ts.map +0 -1
  66. package/dist/commands/company.js +0 -214
  67. package/dist/commands/company.js.map +0 -1
  68. package/dist/commands/exam.d.ts +0 -5
  69. package/dist/commands/exam.d.ts.map +0 -1
  70. package/dist/commands/exam.js +0 -224
  71. package/dist/commands/exam.js.map +0 -1
  72. package/dist/commands/scan-profile.d.ts +0 -33
  73. package/dist/commands/scan-profile.d.ts.map +0 -1
  74. package/dist/commands/scan-profile.js +0 -279
  75. package/dist/commands/scan-profile.js.map +0 -1
  76. package/dist/dd.d.ts +0 -3
  77. package/dist/dd.d.ts.map +0 -1
  78. package/dist/dd.js +0 -28
  79. package/dist/dd.js.map +0 -1
@@ -1,13 +1,134 @@
1
1
  import { createServer } from 'node:http';
2
2
  import * as clack from '@clack/prompts';
3
3
  import { getAppUrl, saveSession } from '../session.js';
4
- import { dim, info, success } from '../ui.js';
4
+ import { bold, dim, info, linkBlue, success, white } from '../ui.js';
5
5
  import { openBrowser } from '../utils/openBrowser.js';
6
- export async function login() {
6
+ /**
7
+ * Authenticate and save a session. Two paths to the same result:
8
+ * - device-code flow (the default): GitHub's device flow — authorize on
9
+ * github.com/login/device (signed into GitHub, not Hacklab), and the backend
10
+ * maps your GitHub identity to the linked Hacklab account. No local server,
11
+ * no port forwarding, no localhost/app URL. Works the same everywhere.
12
+ * - localhost-callback flow (only with `--browser`): opens the browser and
13
+ * catches the OAuth redirect on a local server.
14
+ *
15
+ * `allowSignup` (set by `join`) lets the device flow *create* an account when
16
+ * the GitHub identity has none yet; `login` leaves it off, so an unknown GitHub
17
+ * is told to run `join`. The callback flow always creates-or-logs-in via real
18
+ * OAuth, so it's signup-capable regardless.
19
+ */
20
+ export async function login(opts = {}) {
7
21
  clack.intro('hacklab login');
8
22
  const appUrl = getAppUrl();
9
- // Start a tiny local server to receive the callback
10
- const { token, email, handle, expiresAt } = await new Promise((resolve, reject) => {
23
+ let creds = null;
24
+ if (!opts.browser) {
25
+ // Device flow is the default. null = this backend has no device routes yet
26
+ // (e.g. not deployed) — the only case we fall back to the browser flow,
27
+ // since there's no device flow to use there.
28
+ creds = await loginViaDevice(appUrl, opts.allowSignup ?? false);
29
+ if (!creds) {
30
+ info(dim('device login unavailable on this server — using browser sign-in.'));
31
+ }
32
+ }
33
+ if (!creds) {
34
+ creds = await loginViaCallback(appUrl);
35
+ }
36
+ await saveSession({
37
+ token: creds.token,
38
+ email: creds.email,
39
+ handle: creds.handle,
40
+ appUrl,
41
+ savedAt: new Date().toISOString(),
42
+ expiresAt: creds.expiresAt,
43
+ });
44
+ const label = creds.handle ? `${creds.email} (${creds.handle})` : creds.email;
45
+ success(`logged in as ${label}`);
46
+ clack.outro(dim('hack the planet.'));
47
+ }
48
+ /**
49
+ * Device-code flow. Returns the credentials on approval, or null if the backend
50
+ * doesn't support it (so the caller can fall back). Throws on an explicit
51
+ * denial, expiry, or timeout.
52
+ */
53
+ async function loginViaDevice(appUrl, allowSignup) {
54
+ let startRes;
55
+ try {
56
+ startRes = await fetch(`${appUrl}/api/cli/device/start`, {
57
+ method: 'POST',
58
+ signal: AbortSignal.timeout(15_000),
59
+ });
60
+ }
61
+ catch {
62
+ // Connection refused / DNS / timeout — the server isn't reachable. Name the
63
+ // URL so the cause (e.g. local dev app not running) is obvious.
64
+ throw new Error(`could not reach ${appUrl} — is the server running?`);
65
+ }
66
+ // Older backend without the device routes — let login fall back to callback.
67
+ if (startRes.status === 404)
68
+ return null;
69
+ if (!startRes.ok) {
70
+ throw new Error(`could not start device login (${startRes.status})`);
71
+ }
72
+ const start = (await startRes.json());
73
+ // GitHub's device flow: the user authorizes on github.com, signed into GitHub
74
+ // (not Hacklab). We map the resulting GitHub identity to their linked account.
75
+ // `format` overrides clack's default dim styling: body text white, URL blue.
76
+ clack.note(`open GitHub and authorize Hacklab:\n ${start.verificationUri}\n\nthen enter this code:\n ${bold(start.userCode)}`, 'sign in with github', {
77
+ format: (line) => line.includes(start.verificationUri) ? linkBlue(line) : white(line),
78
+ });
79
+ info(dim('opening your browser to GitHub (or open the link above yourself).'));
80
+ void openBrowser(start.verificationUriComplete ?? start.verificationUri);
81
+ const intervalMs = Math.max(1000, (Number(start.interval) || 5) * 1000);
82
+ const deadline = Date.now() + (Number(start.expiresIn) || 900) * 1000;
83
+ const spin = clack.spinner();
84
+ spin.start('waiting for you to authorize on GitHub');
85
+ while (Date.now() < deadline) {
86
+ let data = null;
87
+ try {
88
+ const res = await fetch(`${appUrl}/api/cli/device/poll`, {
89
+ method: 'POST',
90
+ headers: { 'Content-Type': 'application/json' },
91
+ body: JSON.stringify({ deviceCode: start.deviceCode, allowSignup }),
92
+ signal: AbortSignal.timeout(10_000),
93
+ });
94
+ // Back off naturally on a rate-limit; otherwise read the status.
95
+ if (res.status !== 429)
96
+ data = await res.json().catch(() => null);
97
+ }
98
+ catch {
99
+ // Transient network error — keep polling until the deadline.
100
+ }
101
+ const status = data?.status;
102
+ if (status === 'approved' && data?.token && data.email) {
103
+ spin.stop('approved');
104
+ return {
105
+ token: data.token,
106
+ email: data.email,
107
+ handle: data.handle,
108
+ expiresAt: data.expiresAt,
109
+ };
110
+ }
111
+ if (status === 'denied') {
112
+ spin.stop('denied');
113
+ throw new Error('authorization was denied on GitHub.');
114
+ }
115
+ if (status === 'expired') {
116
+ spin.stop('code expired');
117
+ throw new Error('the code expired — run `hacklab login` again.');
118
+ }
119
+ if (status === 'no_account') {
120
+ spin.stop('no linked account');
121
+ const who = typeof data?.login === 'string' ? ` (@${data.login})` : '';
122
+ throw new Error(`no hacklab account is linked to that GitHub${who}. run \`hacklab join\` to register.`);
123
+ }
124
+ await sleep(intervalMs);
125
+ }
126
+ spin.stop('timed out');
127
+ throw new Error('login timed out — run `hacklab login` again.');
128
+ }
129
+ /** Localhost-callback flow: open the browser, catch the OAuth redirect locally. */
130
+ async function loginViaCallback(appUrl) {
131
+ return await new Promise((resolve, reject) => {
11
132
  let timeout;
12
133
  const server = createServer((req, res) => {
13
134
  const url = new URL(req.url ?? '/', `http://localhost`);
@@ -30,7 +151,14 @@ export async function login() {
30
151
  expiresAt,
31
152
  });
32
153
  });
33
- server.listen(0, '127.0.0.1', () => {
154
+ // Bind 0 = a random free port. On a headless host you can't open the
155
+ // browser locally, so the user opens the URL elsewhere and the OAuth
156
+ // redirect must reach this callback server — which means forwarding the
157
+ // port (e.g. `ssh -L`). Pin it with HACKLAB_CALLBACK_PORT so the forward is
158
+ // deterministic across runs. (Headless usually uses the device flow above,
159
+ // so this hint is a fallback for a misdetected display.)
160
+ const callbackPort = Number(process.env.HACKLAB_CALLBACK_PORT) || 0;
161
+ server.listen(callbackPort, '127.0.0.1', () => {
34
162
  const addr = server.address();
35
163
  if (!addr || typeof addr === 'string') {
36
164
  stopServer();
@@ -39,10 +167,15 @@ export async function login() {
39
167
  }
40
168
  const callbackUrl = `http://127.0.0.1:${addr.port}`;
41
169
  const loginUrl = `${appUrl}/cli/auth?callback=${encodeURIComponent(callbackUrl)}`;
42
- info(`opening browser...`);
43
- info(`if it doesn't open, visit:`);
170
+ info('to sign in, open this URL in a browser:');
44
171
  info(` ${loginUrl}`);
45
- openBrowser(loginUrl);
172
+ if (isLikelyHeadless()) {
173
+ info(dim('headless? drop --browser to use the device code, or forward the port:'));
174
+ info(dim(` ssh -L ${addr.port}:localhost:${addr.port} <this-host>`));
175
+ info(dim(' (pin it with HACKLAB_CALLBACK_PORT to reuse one forward)'));
176
+ }
177
+ // Best-effort auto-open — crash-safe, and a harmless no-op on headless.
178
+ void openBrowser(loginUrl);
46
179
  });
47
180
  // Timeout after 2 minutes
48
181
  timeout = setTimeout(() => {
@@ -55,17 +188,9 @@ export async function login() {
55
188
  server.close();
56
189
  }
57
190
  });
58
- await saveSession({
59
- token,
60
- email,
61
- handle,
62
- appUrl,
63
- savedAt: new Date().toISOString(),
64
- expiresAt,
65
- });
66
- const label = handle ? `${email} (${handle})` : email;
67
- success(`logged in as ${label}`);
68
- clack.outro(dim('hack the planet.'));
191
+ }
192
+ function sleep(ms) {
193
+ return new Promise((resolve) => setTimeout(resolve, ms));
69
194
  }
70
195
  function normalizeDateParam(value) {
71
196
  if (!value)
@@ -73,4 +198,16 @@ function normalizeDateParam(value) {
73
198
  const date = new Date(value);
74
199
  return Number.isNaN(date.getTime()) ? undefined : date.toISOString();
75
200
  }
201
+ /**
202
+ * Heuristic for "this host probably can't pop a browser": a Linux/Unix box with
203
+ * no display server. macOS and Windows always have a usable GUI opener. Only
204
+ * used inside the `--browser` flow to decide whether to print the port-forward
205
+ * hint — it no longer gates device-vs-browser (device is always the default).
206
+ */
207
+ function isLikelyHeadless() {
208
+ if (process.platform === 'darwin' || process.platform === 'win32') {
209
+ return false;
210
+ }
211
+ return !process.env.DISPLAY && !process.env.WAYLAND_DISPLAY;
212
+ }
76
213
  //# sourceMappingURL=login.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"login.js","sourceRoot":"","sources":["../../src/commands/login.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export declare function logout(): Promise<void>;
2
+ //# sourceMappingURL=logout.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.d.ts","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,kBAa3B"}
@@ -0,0 +1,15 @@
1
+ import { clearSession, loadSession } from '../session.js';
2
+ import { dim, info, success } from '../ui.js';
3
+ export async function logout() {
4
+ // Read who we're logged in as first (for the confirmation), then clear.
5
+ const session = await loadSession();
6
+ const removed = await clearSession();
7
+ if (!removed) {
8
+ info('not logged in');
9
+ return;
10
+ }
11
+ const who = session?.handle ?? session?.email;
12
+ success(who ? `logged out (${who})` : 'logged out');
13
+ info(dim('run `hacklab login` to sign back in'));
14
+ }
15
+ //# sourceMappingURL=logout.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"logout.js","sourceRoot":"","sources":["../../src/commands/logout.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AACzD,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAE7C,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,wEAAwE;IACxE,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAA;IACnC,MAAM,OAAO,GAAG,MAAM,YAAY,EAAE,CAAA;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,IAAI,CAAC,eAAe,CAAC,CAAA;QACrB,OAAM;IACR,CAAC;IAED,MAAM,GAAG,GAAG,OAAO,EAAE,MAAM,IAAI,OAAO,EAAE,KAAK,CAAA;IAC7C,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,GAAG,GAAG,CAAC,CAAC,CAAC,YAAY,CAAC,CAAA;IACnD,IAAI,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC,CAAA;AAClD,CAAC"}
@@ -1,5 +1,5 @@
1
1
  import * as clack from '@clack/prompts';
2
- import { loadSession } from '../session.js';
2
+ import { 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' },
@@ -33,7 +33,7 @@ function displayValue(spec, value) {
33
33
  return s.length > 48 ? `${s.slice(0, 47)}…` : s;
34
34
  }
35
35
  async function fetchOrgs(session) {
36
- const res = await fetch(`${session.appUrl}/api/cli/org`, {
36
+ const res = await fetch(`${resolveAppUrl(session)}/api/cli/org`, {
37
37
  headers: { Authorization: `Bearer ${session.token}` },
38
38
  });
39
39
  const data = await res.json().catch(() => null);
@@ -43,7 +43,7 @@ async function fetchOrgs(session) {
43
43
  return (data?.organizations ?? []);
44
44
  }
45
45
  async function patchOrg(session, orgId, fields) {
46
- const res = await fetch(`${session.appUrl}/api/cli/org`, {
46
+ const res = await fetch(`${resolveAppUrl(session)}/api/cli/org`, {
47
47
  method: 'PATCH',
48
48
  headers: {
49
49
  'Content-Type': 'application/json',
@@ -138,7 +138,7 @@ export async function org() {
138
138
  process.exit(1);
139
139
  }
140
140
  if (orgs.length === 0) {
141
- clack.cancel(`you don't manage an organization yet — claim one at ${session.appUrl} first.`);
141
+ clack.cancel(`you don't manage an organization yet — claim one at ${resolveAppUrl(session)} first.`);
142
142
  process.exit(1);
143
143
  }
144
144
  let target = orgs[0];
@@ -207,7 +207,7 @@ export async function org() {
207
207
  }
208
208
  if (savedCount > 0) {
209
209
  success(`saved ${savedCount} change${savedCount === 1 ? '' : 's'} to ${bold(target.name)}`);
210
- info(`${session.appUrl}/o/${target.slug}`);
210
+ info(`${resolveAppUrl(session)}/o/${target.slug}`);
211
211
  }
212
212
  clack.outro(dim('done.'));
213
213
  }
@@ -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":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAMA,wBAAsB,IAAI,kBAiEzB"}
1
+ {"version":3,"file":"sync.d.ts","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"AAWA,wBAAsB,IAAI,kBAyEzB"}
@@ -1,6 +1,6 @@
1
1
  import * as clack from '@clack/prompts';
2
2
  import { loadSessionState } from '../session.js';
3
- import { checkSession, formatTokens, runSync } from '../sync.js';
3
+ import { checkSession, formatTokens, runSync, syncGithubRepos, } from '../sync.js';
4
4
  import { bold, dim, error, info, success } from '../ui.js';
5
5
  export async function sync() {
6
6
  const sessionState = await loadSessionState();
@@ -50,6 +50,14 @@ export async function sync() {
50
50
  if (Number(r.tokensDelta) > 0) {
51
51
  info(` +${formatTokens(Number(r.tokensDelta))} since last sync`);
52
52
  }
53
+ // Mirror pinned GitHub repos into projects (best-effort; never fails sync).
54
+ const repos = await syncGithubRepos(session);
55
+ if (repos && (repos.synced > 0 || repos.removed > 0)) {
56
+ const parts = [`${repos.synced} project${repos.synced === 1 ? '' : 's'}`];
57
+ if (repos.removed > 0)
58
+ parts.push(`removed ${repos.removed}`);
59
+ info(` github: ${parts.join(', ')}`);
60
+ }
53
61
  clack.outro(dim('synced.'));
54
62
  }
55
63
  //# sourceMappingURL=sync.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"sync.js","sourceRoot":"","sources":["../../src/commands/sync.ts"],"names":[],"mappings":"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"}
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,kBAe3B"}
1
+ {"version":3,"file":"whoami.d.ts","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAGA,wBAAsB,MAAM,kBAwB3B"}
@@ -1,4 +1,4 @@
1
- import { loadSession } from '../session.js';
1
+ import { loadSession, resolveAppUrl } from '../session.js';
2
2
  import { dim, error, info, success } from '../ui.js';
3
3
  export async function whoami() {
4
4
  const session = await loadSession();
@@ -7,11 +7,19 @@ export async function whoami() {
7
7
  info(`run ${dim('hacklab login')} to authenticate`);
8
8
  process.exit(1);
9
9
  }
10
+ // The backend commands will actually hit, honoring --env / HACKLAB_APP_URL.
11
+ const server = resolveAppUrl(session);
12
+ const loginServer = session.appUrl.replace(/\/$/, '');
10
13
  success(session.handle ?? session.email);
11
14
  info(`email: ${session.email}`);
12
15
  if (session.handle) {
13
16
  info(`handle: ${session.handle}`);
14
17
  }
15
- info(`server: ${session.appUrl}`);
18
+ info(`server: ${server}`);
19
+ // An --env override can point requests somewhere this session's token isn't
20
+ // valid (tokens are per-backend) — flag where you actually logged in.
21
+ if (server !== loginServer) {
22
+ info(dim(`(logged in against ${loginServer} — token may not work here)`));
23
+ }
16
24
  }
17
25
  //# sourceMappingURL=whoami.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAA;AAC3C,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEpD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAA;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,eAAe,CAAC,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAC/B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;AACnC,CAAC"}
1
+ {"version":3,"file":"whoami.js","sourceRoot":"","sources":["../../src/commands/whoami.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,WAAW,EAAE,aAAa,EAAE,MAAM,eAAe,CAAA;AAC1D,OAAO,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAEpD,MAAM,CAAC,KAAK,UAAU,MAAM;IAC1B,MAAM,OAAO,GAAG,MAAM,WAAW,EAAE,CAAA;IAEnC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,eAAe,CAAC,CAAA;QACtB,IAAI,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,kBAAkB,CAAC,CAAA;QACnD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,4EAA4E;IAC5E,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,CAAA;IACrC,MAAM,WAAW,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;IAErD,OAAO,CAAC,OAAO,CAAC,MAAM,IAAI,OAAO,CAAC,KAAK,CAAC,CAAA;IACxC,IAAI,CAAC,UAAU,OAAO,CAAC,KAAK,EAAE,CAAC,CAAA;IAC/B,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;QACnB,IAAI,CAAC,WAAW,OAAO,CAAC,MAAM,EAAE,CAAC,CAAA;IACnC,CAAC;IACD,IAAI,CAAC,WAAW,MAAM,EAAE,CAAC,CAAA;IACzB,4EAA4E;IAC5E,sEAAsE;IACtE,IAAI,MAAM,KAAK,WAAW,EAAE,CAAC;QAC3B,IAAI,CAAC,GAAG,CAAC,sBAAsB,WAAW,6BAA6B,CAAC,CAAC,CAAA;IAC3E,CAAC;AACH,CAAC"}
package/dist/index.js CHANGED
@@ -1,18 +1,16 @@
1
1
  #!/usr/bin/env node
2
- import { brag, parseBragArgs } from './commands/brag.js';
3
- import { chat } from './commands/chat.js';
4
- import { configCommand } from './commands/config.js';
5
- import { drop } from './commands/drop.js';
6
- import { exam } from './commands/exam.js';
7
- import { join } from './commands/join.js';
8
- import { login } from './commands/login.js';
9
- import { org } from './commands/org.js';
10
- import { scanProfile } from './commands/scan-profile.js';
11
- import { sync } from './commands/sync.js';
12
- import { whoami } from './commands/whoami.js';
2
+ import { createRequire } from 'node:module';
3
+ import { COMMANDS, findCommand } from './registry.js';
13
4
  import { resolveCommand } from './resolve-command.js';
14
- import { HACKLAB_ENVIRONMENTS, isHacklabEnv, loadSession } from './session.js';
5
+ import { HACKLAB_ENVIRONMENTS, resolveHacklabEnv } from './session.js';
15
6
  import { banner, bold, dim } from './ui.js';
7
+ import { notifyIfOutdated } from './utils/updateCheck.js';
8
+ // Single source of the published version: read it from package.json (one level
9
+ // up from this module in both `dist/` and `src/`) instead of hardcoding a string
10
+ // that silently drifts from the real package version. `createRequire` resolves
11
+ // JSON the same way under tsx (dev) and the compiled bin.
12
+ const require = createRequire(import.meta.url);
13
+ const { version: VERSION } = require('../package.json');
16
14
  /**
17
15
  * Pull a global `--env <production|staging|development>` (or `--env=<…>`) flag
18
16
  * out of the args and point the CLI at that backend by setting HACKLAB_APP_URL
@@ -35,11 +33,12 @@ function applyEnvFlag(argv) {
35
33
  rest.push(arg);
36
34
  continue;
37
35
  }
38
- if (!value || !isHacklabEnv(value)) {
39
- console.error(`--env must be one of: ${Object.keys(HACKLAB_ENVIRONMENTS).join(', ')}`);
36
+ const env = value ? resolveHacklabEnv(value) : null;
37
+ if (!env) {
38
+ console.error(`--env must be one of: ${Object.keys(HACKLAB_ENVIRONMENTS).join(', ')} (abbreviations like dev/prod/stag work)`);
40
39
  process.exit(1);
41
40
  }
42
- process.env.HACKLAB_APP_URL = HACKLAB_ENVIRONMENTS[value];
41
+ process.env.HACKLAB_APP_URL = HACKLAB_ENVIRONMENTS[env];
43
42
  }
44
43
  return rest;
45
44
  }
@@ -48,17 +47,16 @@ function printHelp() {
48
47
  banner();
49
48
  console.log('');
50
49
  console.log(bold('usage:'));
51
- console.log(` hacklab ${dim('join')} join hacklab from your terminal`);
52
- console.log(` hacklab ${dim('sync')} sync AI token usage to your profile`);
53
- console.log(` hacklab ${dim('whoami')} check who you're logged in as`);
54
- console.log(` hacklab ${dim('drop')} ${dim('"message"')} post a drop to your feed`);
55
- console.log(` hacklab ${dim('login')} re-authenticate with github`);
56
- console.log(` hacklab ${dim('exam')} run your belt exam (pyro + hacker)`);
57
- console.log(` hacklab ${dim('scan')} build your full profile (skills, repos, blog)`);
58
- console.log(` hacklab ${dim('config')} ${dim('<key> <val>')} set config (cursor-api-key, cursor-email)`);
59
- console.log(` hacklab ${dim('brag')} ${dim('[path]')} sync .hacklab/project.yaml`);
60
- console.log(` hacklab ${dim('org')} edit your organization`);
61
- console.log(` hacklab ${dim('chat')} ${dim('<sub>')} channel + DMs (tail/post/dm/...); --json for agents`);
50
+ // Align the descriptions: pad to the widest `name + args` so the summaries
51
+ // line up no matter how the registry grows.
52
+ const rows = COMMANDS.map((c) => ({
53
+ label: c.args ? `${c.name} ${c.args}` : c.name,
54
+ summary: c.summary,
55
+ }));
56
+ const width = Math.max(...rows.map((r) => r.label.length));
57
+ for (const { label, summary } of rows) {
58
+ console.log(` hacklab ${dim(label)}${' '.repeat(width - label.length)} ${summary}`);
59
+ }
62
60
  console.log('');
63
61
  console.log(` ${dim('--env')} ${dim('<production|staging|development>')} pick the backend (default: production)`);
64
62
  console.log('');
@@ -72,32 +70,26 @@ function enforceNodeVersion() {
72
70
  const major = Number(process.versions.node.split('.')[0]);
73
71
  if (Number.isFinite(major) && major < 20) {
74
72
  console.error(`hacklab requires Node 20 or newer (you have ${process.versions.node}).`);
75
- console.error('Using a version manager (nvm/fnm/volta)? Run `npx hacklab@latest` in your shell.');
73
+ console.error('Using a version manager (nvm/fnm/volta)? Activate Node 20+ in your shell, then: npm install -g hacklab@latest');
76
74
  process.exit(1);
77
75
  }
78
76
  }
79
77
  async function main() {
80
78
  enforceNodeVersion();
81
- if (cmd === '--help' || cmd === '-h') {
79
+ // Bare `hacklab` (no command) prints help, same as `--help`/`-h`. Runs before
80
+ // the update nudge so it reads as plain help, matching the `--help` path.
81
+ if (!cmd || cmd === '--help' || cmd === '-h') {
82
82
  printHelp();
83
83
  process.exit(0);
84
84
  }
85
85
  if (cmd === '--version' || cmd === '-v') {
86
- console.log('0.5.0');
86
+ console.log(VERSION);
87
87
  process.exit(0);
88
88
  }
89
- // Bare invocation (e.g. `npx hacklab@latest`): join for newcomers, sync for
90
- // a returning, already-authenticated user.
91
- if (!cmd) {
92
- const session = await loadSession();
93
- if (session) {
94
- await sync();
95
- }
96
- else {
97
- await join();
98
- }
99
- return;
100
- }
89
+ // One-line nudge if a newer hacklab is published (interactive only, cached
90
+ // daily, timeout-guarded). Must run before any command output so it reads as
91
+ // a header, not buried in results.
92
+ await notifyIfOutdated(VERSION);
101
93
  // Resolve a possibly-abbreviated command to its full name (e.g. `sy` -> sync,
102
94
  // `or` -> org). Exact matches always win; an ambiguous prefix is
103
95
  // rejected with the candidates so the user can disambiguate.
@@ -106,73 +98,13 @@ async function main() {
106
98
  console.error(`ambiguous command "${cmd}": ${resolution.matches.join(' or ')}?`);
107
99
  process.exit(1);
108
100
  }
109
- const command = resolution.kind === 'match' ? resolution.name : cmd;
110
- if (command === 'join') {
111
- await join();
112
- }
113
- else if (command === 'login') {
114
- await login();
115
- }
116
- else if (command === 'whoami') {
117
- await whoami();
118
- }
119
- else if (command === 'sync') {
120
- await sync();
121
- }
122
- else if (command === 'drop') {
123
- const content = parseDropArgs(args);
124
- await drop(content.text, content.url);
125
- }
126
- else if (command === 'exam') {
127
- const pyro = args.includes('--pyro');
128
- const hacker = args.includes('--hacker');
129
- await exam({ pyro, hacker });
130
- }
131
- else if (command === 'scan') {
132
- await scanProfile();
133
- }
134
- else if (command === 'config') {
135
- await configCommand(args);
136
- }
137
- else if (command === 'brag') {
138
- const options = parseBragArgs(args);
139
- await brag(options.manifestPath);
140
- }
141
- else if (command === 'org') {
142
- await org();
143
- }
144
- else if (command === 'chat') {
145
- await chat(args);
146
- }
147
- else {
101
+ const command = resolution.kind === 'match' ? findCommand(resolution.name) : undefined;
102
+ if (!command) {
148
103
  console.error(`unknown command: ${cmd}`);
149
104
  console.error('run hacklab --help for usage');
150
105
  process.exit(1);
151
106
  }
152
- }
153
- function parseDropArgs(args) {
154
- let url;
155
- const words = [];
156
- for (let i = 0; i < args.length; i++) {
157
- const arg = args[i];
158
- if ((arg === '-u' || arg === '--url') && args[i + 1]) {
159
- url = args[i + 1];
160
- i++;
161
- }
162
- else if (arg.startsWith('-')) {
163
- console.error(`unknown flag: ${arg}`);
164
- process.exit(1);
165
- }
166
- else {
167
- words.push(arg);
168
- }
169
- }
170
- const text = words.join(' ');
171
- if (!text) {
172
- console.error('usage: hacklab drop your message here');
173
- process.exit(1);
174
- }
175
- return { text, url };
107
+ await command.run(args);
176
108
  }
177
109
  main().catch((err) => {
178
110
  console.error(err instanceof Error ? err.message : String(err));