hacklab 0.6.0 → 0.6.2

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 (74) hide show
  1. package/dist/commands/brag.js +4 -4
  2. package/dist/commands/brag.js.map +1 -1
  3. package/dist/commands/chat.d.ts.map +1 -1
  4. package/dist/commands/chat.js +16 -12
  5. package/dist/commands/chat.js.map +1 -1
  6. package/dist/commands/drop.d.ts +9 -0
  7. package/dist/commands/drop.d.ts.map +1 -1
  8. package/dist/commands/drop.js +33 -4
  9. package/dist/commands/drop.js.map +1 -1
  10. package/dist/commands/join.d.ts +3 -1
  11. package/dist/commands/join.d.ts.map +1 -1
  12. package/dist/commands/join.js +31 -3
  13. package/dist/commands/join.js.map +1 -1
  14. package/dist/commands/login.d.ts +18 -1
  15. package/dist/commands/login.d.ts.map +1 -1
  16. package/dist/commands/login.js +156 -19
  17. package/dist/commands/login.js.map +1 -1
  18. package/dist/commands/logout.d.ts +2 -0
  19. package/dist/commands/logout.d.ts.map +1 -0
  20. package/dist/commands/logout.js +15 -0
  21. package/dist/commands/logout.js.map +1 -0
  22. package/dist/commands/org.js +5 -5
  23. package/dist/commands/org.js.map +1 -1
  24. package/dist/commands/sync.d.ts.map +1 -1
  25. package/dist/commands/sync.js +9 -1
  26. package/dist/commands/sync.js.map +1 -1
  27. package/dist/commands/whoami.d.ts.map +1 -1
  28. package/dist/commands/whoami.js +10 -2
  29. package/dist/commands/whoami.js.map +1 -1
  30. package/dist/index.js +27 -88
  31. package/dist/index.js.map +1 -1
  32. package/dist/registry.d.ts +15 -0
  33. package/dist/registry.d.ts.map +1 -0
  34. package/dist/registry.js +77 -0
  35. package/dist/registry.js.map +1 -0
  36. package/dist/resolve-command.d.ts +0 -1
  37. package/dist/resolve-command.d.ts.map +1 -1
  38. package/dist/resolve-command.js +2 -17
  39. package/dist/resolve-command.js.map +1 -1
  40. package/dist/session.d.ts +26 -5
  41. package/dist/session.d.ts.map +1 -1
  42. package/dist/session.js +55 -8
  43. package/dist/session.js.map +1 -1
  44. package/dist/share.d.ts +2 -2
  45. package/dist/share.js +2 -2
  46. package/dist/sync.d.ts +18 -34
  47. package/dist/sync.d.ts.map +1 -1
  48. package/dist/sync.js +47 -686
  49. package/dist/sync.js.map +1 -1
  50. package/dist/ui.d.ts +2 -0
  51. package/dist/ui.d.ts.map +1 -1
  52. package/dist/ui.js +4 -0
  53. package/dist/ui.js.map +1 -1
  54. package/dist/utils/openBrowser.d.ts +12 -0
  55. package/dist/utils/openBrowser.d.ts.map +1 -1
  56. package/dist/utils/openBrowser.js +30 -12
  57. package/dist/utils/openBrowser.js.map +1 -1
  58. package/package.json +3 -2
  59. package/dist/commands/company.d.ts +0 -2
  60. package/dist/commands/company.d.ts.map +0 -1
  61. package/dist/commands/company.js +0 -214
  62. package/dist/commands/company.js.map +0 -1
  63. package/dist/commands/exam.d.ts +0 -5
  64. package/dist/commands/exam.d.ts.map +0 -1
  65. package/dist/commands/exam.js +0 -224
  66. package/dist/commands/exam.js.map +0 -1
  67. package/dist/commands/scan-profile.d.ts +0 -33
  68. package/dist/commands/scan-profile.d.ts.map +0 -1
  69. package/dist/commands/scan-profile.js +0 -279
  70. package/dist/commands/scan-profile.js.map +0 -1
  71. package/dist/dd.d.ts +0 -3
  72. package/dist/dd.d.ts.map +0 -1
  73. package/dist/dd.js +0 -28
  74. package/dist/dd.js.map +0 -1
@@ -1,224 +0,0 @@
1
- import * as clack from '@clack/prompts';
2
- import { loadSessionState } from '../session.js';
3
- import { checkSession, fetchApi, formatBytes, formatTokens, LOGIN_EXPIRED_MESSAGE, runSync, } from '../sync.js';
4
- import { bold, dim, error, info, success } from '../ui.js';
5
- import { openBrowser } from '../utils/openBrowser.js';
6
- async function runHackerExam(session) {
7
- const res = await fetchApi(session, '/api/exam/hacker', {
8
- method: 'POST',
9
- headers: { Authorization: `Bearer ${session.token}` },
10
- });
11
- if (res.status === 401) {
12
- throw new Error(LOGIN_EXPIRED_MESSAGE);
13
- }
14
- if (!res.ok) {
15
- const data = await res.json().catch(() => null);
16
- throw new Error(data?.error ??
17
- `hacker exam failed (${res.status})`);
18
- }
19
- return res.json();
20
- }
21
- export async function exam(flags) {
22
- const sessionState = await loadSessionState();
23
- const session = sessionState.session;
24
- if (!session) {
25
- error(sessionState.status === 'expired' ? 'login expired' : 'not logged in');
26
- info(`run ${dim('hacklab login')} first`);
27
- process.exit(1);
28
- }
29
- const runPyro = flags.pyro || (!flags.pyro && !flags.hacker);
30
- const runHacker = flags.hacker || (!flags.pyro && !flags.hacker);
31
- const sessionCheck = await checkSession(session);
32
- if (sessionCheck.status === 'unauthorized') {
33
- error('login expired');
34
- info(`run ${dim('hacklab login')} again`);
35
- process.exit(1);
36
- }
37
- if (sessionCheck.status === 'failed') {
38
- error(sessionCheck.message);
39
- process.exit(1);
40
- }
41
- console.log('');
42
- console.log(bold(' hacklab exam'));
43
- if (runPyro && runHacker) {
44
- console.log(dim(' scanning tokens + github in parallel...'));
45
- }
46
- else if (runPyro) {
47
- console.log(dim(' scanning local AI tool usage...'));
48
- }
49
- else {
50
- console.log(dim(' syncing github contributions...'));
51
- }
52
- console.log('');
53
- let pyroData = null;
54
- let hackerData = null;
55
- let pyroError = null;
56
- let hackerError = null;
57
- const tasks = [];
58
- if (runPyro) {
59
- tasks.push(runSync(session)
60
- .then((d) => {
61
- pyroData = d;
62
- })
63
- .catch((e) => {
64
- pyroError = e instanceof Error ? e.message : 'pyro exam failed';
65
- }));
66
- }
67
- if (runHacker) {
68
- tasks.push(runHackerExam(session)
69
- .then((d) => {
70
- hackerData = d;
71
- })
72
- .catch((e) => {
73
- hackerError = e instanceof Error ? e.message : 'hacker exam failed';
74
- }));
75
- }
76
- await Promise.all(tasks);
77
- // --- Pyro results ---
78
- if (runPyro) {
79
- console.log(bold(' PYRO EXAM'));
80
- if (pyroError) {
81
- error(`pyro: ${pyroError}`);
82
- }
83
- else if (pyroData) {
84
- const { claudeTotal, codexTotal, cursorTotal, openclawTotal, hermesTotal, opencodeTotal, messagesTotal, cursorStats, result, cursorScanStatus, } = pyroData;
85
- if (claudeTotal > 0)
86
- info(` Claude Code ${formatTokens(claudeTotal)} tokens`);
87
- if (codexTotal > 0)
88
- info(` Codex ${formatTokens(codexTotal)} tokens`);
89
- if (cursorTotal > 0)
90
- info(` Cursor ${formatTokens(cursorTotal)} tokens`);
91
- if (openclawTotal > 0)
92
- info(` OpenClaw ${formatTokens(openclawTotal)} tokens`);
93
- if (hermesTotal > 0)
94
- info(` Hermes ${formatTokens(hermesTotal)} tokens`);
95
- if (opencodeTotal > 0)
96
- info(` OpenCode ${formatTokens(opencodeTotal)} tokens`);
97
- if (messagesTotal > 0)
98
- info(` Messages ${formatTokens(messagesTotal)} sent`);
99
- if (cursorScanStatus.source === 'api') {
100
- info(` ${dim(`via cursor api · ${cursorScanStatus.events} events`)}`);
101
- }
102
- else if (cursorScanStatus.source === 'api-partial') {
103
- info(` ${dim(`cursor api partial (${cursorScanStatus.reason}) · ${cursorScanStatus.events} events`)}`);
104
- }
105
- else if (cursorScanStatus.source === 'api-failed') {
106
- info(` ${dim(`cursor api failed: ${cursorScanStatus.reason}`)}`);
107
- }
108
- else if (cursorStats) {
109
- info(` ${dim(`local estimate · ${cursorStats.totalCommits} commits · ${cursorStats.avgAiPercent}% AI`)}`);
110
- }
111
- console.log('');
112
- const r = result;
113
- success(` ${bold(String(r.title))} lv.${r.level} — ${formatTokens(Number(r.tokensTotal))} total`);
114
- if (Number(r.tokensDelta) > 0)
115
- info(` +${formatTokens(Number(r.tokensDelta))} since last exam`);
116
- if (r.rankAfter)
117
- info(` pyro rank: #${r.rankAfter}`);
118
- if (r.passedUsers?.length) {
119
- info(` passed: ${r.passedUsers.map((u) => `@${u}`).join(', ')}`);
120
- }
121
- if (Number(r.streak) > 0)
122
- info(` streak: ${r.streak}d (best ${r.longestStreak}d)`);
123
- }
124
- console.log('');
125
- }
126
- // --- Hacker results ---
127
- if (runHacker) {
128
- console.log(bold(' HACKER EXAM'));
129
- if (hackerError) {
130
- error(`hacker: ${hackerError}`);
131
- }
132
- else if (hackerData) {
133
- const h = hackerData;
134
- success(` ${bold(String(h.title))} lv.${h.level} — ${formatBytes(Number(h.hackerXp))} shipped`);
135
- if (h.rank)
136
- info(` rank: #${h.rank}`);
137
- const topLangs = h.topLanguages;
138
- if (topLangs?.length) {
139
- info(` top languages:`);
140
- for (const lang of topLangs) {
141
- info(` ${lang.name.padEnd(16)} lv.${lang.level} ${dim(formatBytes(lang.bytes))}`);
142
- }
143
- }
144
- }
145
- console.log('');
146
- }
147
- // --- Share card (pyro only) ---
148
- if (pyroData && !pyroError) {
149
- const { claudeTotal, codexTotal, cursorTotal, allEntries, result, models } = pyroData;
150
- const r = result;
151
- const handle = session.handle ?? 'you';
152
- const profileBaseUrl = session.appUrl.replace(/\/$/, '');
153
- info(`profile: ${bold(`${profileBaseUrl}/${handle}`)}`);
154
- let cardPath = null;
155
- try {
156
- const { generateShareCard, copyToClipboard, displayInTerminal } = await import('../share-card.js');
157
- const dailyAgg = new Map();
158
- for (const entry of allEntries) {
159
- dailyAgg.set(entry.date, (dailyAgg.get(entry.date) ?? 0) + entry.tokens);
160
- }
161
- const dailyActivity = Array.from(dailyAgg.entries())
162
- .map(([date, tokens]) => ({ date, tokens }))
163
- .sort((a, b) => a.date.localeCompare(b.date));
164
- const estimatedCost = (claudeTotal / 1_000_000) * 0.6 +
165
- (codexTotal / 1_000_000) * 0.25 +
166
- (cursorTotal / 1_000_000) * 0.4;
167
- cardPath = await generateShareCard({
168
- handle,
169
- level: r.level,
170
- title: r.title,
171
- beltColor: r.beltColor,
172
- tokensTotal: Number(r.tokensTotal),
173
- rank: r.rankAfter ?? 0,
174
- streak: r.streak ?? 0,
175
- longestStreak: r.longestStreak ?? 0,
176
- progressPercent: r.progressPercent ?? 0,
177
- estimatedCost,
178
- toolBreakdown: {
179
- claudeCode: claudeTotal,
180
- codex: codexTotal,
181
- cursor: cursorTotal,
182
- },
183
- models,
184
- dailyActivity,
185
- });
186
- const { readFile: rf } = await import('node:fs/promises');
187
- const imgBuf = Buffer.from(await rf(cardPath));
188
- const displayed = displayInTerminal(imgBuf);
189
- if (!displayed)
190
- info(dim('(terminal does not support inline images)'));
191
- console.log('');
192
- const copied = await copyToClipboard(cardPath);
193
- if (copied)
194
- success('image copied to clipboard!');
195
- }
196
- catch {
197
- // share card is optional
198
- }
199
- console.log('');
200
- if (cardPath) {
201
- const saveCard = await clack.confirm({
202
- message: 'Save image to ~/hacklab-card.png?',
203
- });
204
- if (saveCard && !clack.isCancel(saveCard)) {
205
- const { copyFile, mkdir } = await import('node:fs/promises');
206
- const { homedir } = await import('node:os');
207
- const { join } = await import('node:path');
208
- await mkdir(join(homedir(), '.hacklab'), { recursive: true });
209
- const dest = join(homedir(), 'hacklab-card.png');
210
- await copyFile(cardPath, dest);
211
- success(`saved to ${dest}`);
212
- }
213
- }
214
- const shareOnX = await clack.confirm({
215
- message: `Share on X? Don't forget to attach your image!`,
216
- });
217
- if (shareOnX && !clack.isCancel(shareOnX)) {
218
- const tweetText = encodeURIComponent(`I'm a lv.${r.level} ${r.title} (${r.beltColor} belt) on @hacklab_so with ${formatTokens(Number(r.tokensTotal))} tokens burned.\n\nWhat's your power level?\nhacklab.so/${handle}`);
219
- await openBrowser(`https://x.com/intent/tweet?text=${tweetText}`);
220
- }
221
- }
222
- clack.outro('hack the planet.');
223
- }
224
- //# sourceMappingURL=exam.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"exam.js","sourceRoot":"","sources":["../../src/commands/exam.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,KAAK,MAAM,gBAAgB,CAAA;AAEvC,OAAO,EAAE,gBAAgB,EAAE,MAAM,eAAe,CAAA;AAChD,OAAO,EACL,YAAY,EACZ,QAAQ,EACR,WAAW,EACX,YAAY,EACZ,qBAAqB,EACrB,OAAO,GAER,MAAM,YAAY,CAAA;AACnB,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,MAAM,UAAU,CAAA;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,yBAAyB,CAAA;AAErD,KAAK,UAAU,aAAa,CAC1B,OAAuC;IAEvC,MAAM,GAAG,GAAG,MAAM,QAAQ,CAAC,OAAO,EAAE,kBAAkB,EAAE;QACtD,MAAM,EAAE,MAAM;QACd,OAAO,EAAE,EAAE,aAAa,EAAE,UAAU,OAAO,CAAC,KAAK,EAAE,EAAE;KACtD,CAAC,CAAA;IAEF,IAAI,GAAG,CAAC,MAAM,KAAK,GAAG,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAA;IACxC,CAAC;IAED,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC;QACZ,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,EAAE,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,IAAI,CAAC,CAAA;QAC/C,MAAM,IAAI,KAAK,CACZ,IAAkC,EAAE,KAAK;YACxC,uBAAuB,GAAG,CAAC,MAAM,GAAG,CACvC,CAAA;IACH,CAAC;IAED,OAAO,GAAG,CAAC,IAAI,EAAE,CAAA;AACnB,CAAC;AAED,MAAM,CAAC,KAAK,UAAU,IAAI,CAAC,KAAyC;IAClE,MAAM,YAAY,GAAG,MAAM,gBAAgB,EAAE,CAAA;IAC7C,MAAM,OAAO,GAAG,YAAY,CAAC,OAAO,CAAA;IAEpC,IAAI,CAAC,OAAO,EAAE,CAAC;QACb,KAAK,CAAC,YAAY,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,eAAe,CAAC,CAAA;QAC5E,IAAI,CAAC,OAAO,GAAG,CAAC,eAAe,CAAC,QAAQ,CAAC,CAAA;QACzC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAC5D,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,IAAI,CAAC,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAA;IAEhE,MAAM,YAAY,GAAG,MAAM,YAAY,CAAC,OAAO,CAAC,CAAA;IAChD,IAAI,YAAY,CAAC,MAAM,KAAK,cAAc,EAAE,CAAC;QAC3C,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;IACD,IAAI,YAAY,CAAC,MAAM,KAAK,QAAQ,EAAE,CAAC;QACrC,KAAK,CAAC,YAAY,CAAC,OAAO,CAAC,CAAA;QAC3B,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACjB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACf,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,gBAAgB,CAAC,CAAC,CAAA;IACnC,IAAI,OAAO,IAAI,SAAS,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAA;IAC/D,CAAC;SAAM,IAAI,OAAO,EAAE,CAAC;QACnB,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;IACvD,CAAC;SAAM,CAAC;QACN,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,mCAAmC,CAAC,CAAC,CAAA;IACvD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IAEf,IAAI,QAAQ,GAAsB,IAAI,CAAA;IACtC,IAAI,UAAU,GAAmC,IAAI,CAAA;IACrD,IAAI,SAAS,GAAkB,IAAI,CAAA;IACnC,IAAI,WAAW,GAAkB,IAAI,CAAA;IAErC,MAAM,KAAK,GAAoB,EAAE,CAAA;IAEjC,IAAI,OAAO,EAAE,CAAC;QACZ,KAAK,CAAC,IAAI,CACR,OAAO,CAAC,OAAO,CAAC;aACb,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,QAAQ,GAAG,CAAC,CAAA;QACd,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACpB,SAAS,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,kBAAkB,CAAA;QACjE,CAAC,CAAC,CACL,CAAA;IACH,CAAC;IAED,IAAI,SAAS,EAAE,CAAC;QACd,KAAK,CAAC,IAAI,CACR,aAAa,CAAC,OAAO,CAAC;aACnB,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE;YACV,UAAU,GAAG,CAAC,CAAA;QAChB,CAAC,CAAC;aACD,KAAK,CAAC,CAAC,CAAU,EAAE,EAAE;YACpB,WAAW,GAAG,CAAC,YAAY,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,oBAAoB,CAAA;QACrE,CAAC,CAAC,CACL,CAAA;IACH,CAAC;IAED,MAAM,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAA;IAExB,uBAAuB;IACvB,IAAI,OAAO,EAAE,CAAC;QACZ,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAA;QAChC,IAAI,SAAS,EAAE,CAAC;YACd,KAAK,CAAC,SAAS,SAAS,EAAE,CAAC,CAAA;QAC7B,CAAC;aAAM,IAAI,QAAQ,EAAE,CAAC;YACpB,MAAM,EACJ,WAAW,EACX,UAAU,EACV,WAAW,EACX,aAAa,EACb,WAAW,EACX,aAAa,EACb,aAAa,EACb,WAAW,EACX,MAAM,EACN,gBAAgB,GACjB,GAAG,QAAsB,CAAA;YAE1B,IAAI,WAAW,GAAG,CAAC;gBACjB,IAAI,CAAC,kBAAkB,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;YAC5D,IAAI,UAAU,GAAG,CAAC;gBAChB,IAAI,CAAC,kBAAkB,YAAY,CAAC,UAAU,CAAC,SAAS,CAAC,CAAA;YAC3D,IAAI,WAAW,GAAG,CAAC;gBACjB,IAAI,CAAC,kBAAkB,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;YAC5D,IAAI,aAAa,GAAG,CAAC;gBACnB,IAAI,CAAC,kBAAkB,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YAC9D,IAAI,WAAW,GAAG,CAAC;gBACjB,IAAI,CAAC,kBAAkB,YAAY,CAAC,WAAW,CAAC,SAAS,CAAC,CAAA;YAC5D,IAAI,aAAa,GAAG,CAAC;gBACnB,IAAI,CAAC,kBAAkB,YAAY,CAAC,aAAa,CAAC,SAAS,CAAC,CAAA;YAC9D,IAAI,aAAa,GAAG,CAAC;gBACnB,IAAI,CAAC,kBAAkB,YAAY,CAAC,aAAa,CAAC,OAAO,CAAC,CAAA;YAE5D,IAAI,gBAAgB,CAAC,MAAM,KAAK,KAAK,EAAE,CAAC;gBACtC,IAAI,CACF,kBAAkB,GAAG,CAAC,oBAAoB,gBAAgB,CAAC,MAAM,SAAS,CAAC,EAAE,CAC9E,CAAA;YACH,CAAC;iBAAM,IAAI,gBAAgB,CAAC,MAAM,KAAK,aAAa,EAAE,CAAC;gBACrD,IAAI,CACF,kBAAkB,GAAG,CAAC,uBAAuB,gBAAgB,CAAC,MAAM,OAAO,gBAAgB,CAAC,MAAM,SAAS,CAAC,EAAE,CAC/G,CAAA;YACH,CAAC;iBAAM,IAAI,gBAAgB,CAAC,MAAM,KAAK,YAAY,EAAE,CAAC;gBACpD,IAAI,CACF,kBAAkB,GAAG,CAAC,sBAAsB,gBAAgB,CAAC,MAAM,EAAE,CAAC,EAAE,CACzE,CAAA;YACH,CAAC;iBAAM,IAAI,WAAW,EAAE,CAAC;gBACvB,IAAI,CACF,kBAAkB,GAAG,CAAC,oBAAoB,WAAW,CAAC,YAAY,cAAc,WAAW,CAAC,YAAY,MAAM,CAAC,EAAE,CAClH,CAAA;YACH,CAAC;YAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,CAAC,GAAG,MAAM,CAAA;YAChB,OAAO,CACL,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,QAAQ,CAC1F,CAAA;YACD,IAAI,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC;gBAC3B,IAAI,CAAC,MAAM,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,kBAAkB,CAAC,CAAA;YACnE,IAAI,CAAC,CAAC,SAAS;gBAAE,IAAI,CAAC,iBAAiB,CAAC,CAAC,SAAS,EAAE,CAAC,CAAA;YACrD,IAAK,CAAC,CAAC,WAAoC,EAAE,MAAM,EAAE,CAAC;gBACpD,IAAI,CACF,aAAc,CAAC,CAAC,WAAwB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAC1E,CAAA;YACH,CAAC;YACD,IAAI,MAAM,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC;gBACtB,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,WAAW,CAAC,CAAC,aAAa,IAAI,CAAC,CAAA;QAC7D,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,yBAAyB;IACzB,IAAI,SAAS,EAAE,CAAC;QACd,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,CAAA;QAClC,IAAI,WAAW,EAAE,CAAC;YAChB,KAAK,CAAC,WAAW,WAAW,EAAE,CAAC,CAAA;QACjC,CAAC;aAAM,IAAI,UAAU,EAAE,CAAC;YACtB,MAAM,CAAC,GAAG,UAAqC,CAAA;YAC/C,OAAO,CACL,KAAK,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,CAAC,KAAK,MAAM,WAAW,CAAC,MAAM,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,UAAU,CACxF,CAAA;YACD,IAAI,CAAC,CAAC,IAAI;gBAAE,IAAI,CAAC,YAAY,CAAC,CAAC,IAAI,EAAE,CAAC,CAAA;YAEtC,MAAM,QAAQ,GAAG,CAAC,CAAC,YAEN,CAAA;YACb,IAAI,QAAQ,EAAE,MAAM,EAAE,CAAC;gBACrB,IAAI,CAAC,kBAAkB,CAAC,CAAA;gBACxB,KAAK,MAAM,IAAI,IAAI,QAAQ,EAAE,CAAC;oBAC5B,IAAI,CACF,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE,CAAC,OAAO,IAAI,CAAC,KAAK,KAAK,GAAG,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAChF,CAAA;gBACH,CAAC;YACH,CAAC;QACH,CAAC;QACD,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;IACjB,CAAC;IAED,iCAAiC;IACjC,IAAI,QAAQ,IAAI,CAAC,SAAS,EAAE,CAAC;QAC3B,MAAM,EAAE,WAAW,EAAE,UAAU,EAAE,WAAW,EAAE,UAAU,EAAE,MAAM,EAAE,MAAM,EAAE,GACxE,QAAsB,CAAA;QACxB,MAAM,CAAC,GAAG,MAAM,CAAA;QAChB,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,KAAK,CAAA;QACtC,MAAM,cAAc,GAAG,OAAO,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAA;QAExD,IAAI,CAAC,YAAY,IAAI,CAAC,GAAG,cAAc,IAAI,MAAM,EAAE,CAAC,EAAE,CAAC,CAAA;QAEvD,IAAI,QAAQ,GAAkB,IAAI,CAAA;QAClC,IAAI,CAAC;YACH,MAAM,EAAE,iBAAiB,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAC7D,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;YAElC,MAAM,QAAQ,GAAG,IAAI,GAAG,EAAkB,CAAA;YAC1C,KAAK,MAAM,KAAK,IAAI,UAAU,EAAE,CAAC;gBAC/B,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAA;YAC1E,CAAC;YACD,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,OAAO,EAAE,CAAC;iBACjD,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC;iBAC3C,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAA;YAE/C,MAAM,aAAa,GACjB,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,GAAG;gBAC/B,CAAC,UAAU,GAAG,SAAS,CAAC,GAAG,IAAI;gBAC/B,CAAC,WAAW,GAAG,SAAS,CAAC,GAAG,GAAG,CAAA;YAEjC,QAAQ,GAAG,MAAM,iBAAiB,CAAC;gBACjC,MAAM;gBACN,KAAK,EAAE,CAAC,CAAC,KAAe;gBACxB,KAAK,EAAE,CAAC,CAAC,KAAe;gBACxB,SAAS,EAAE,CAAC,CAAC,SAAmB;gBAChC,WAAW,EAAE,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC;gBAClC,IAAI,EAAG,CAAC,CAAC,SAAoB,IAAI,CAAC;gBAClC,MAAM,EAAG,CAAC,CAAC,MAAiB,IAAI,CAAC;gBACjC,aAAa,EAAG,CAAC,CAAC,aAAwB,IAAI,CAAC;gBAC/C,eAAe,EAAG,CAAC,CAAC,eAA0B,IAAI,CAAC;gBACnD,aAAa;gBACb,aAAa,EAAE;oBACb,UAAU,EAAE,WAAW;oBACvB,KAAK,EAAE,UAAU;oBACjB,MAAM,EAAE,WAAW;iBACpB;gBACD,MAAM;gBACN,aAAa;aACd,CAAC,CAAA;YAEF,MAAM,EAAE,QAAQ,EAAE,EAAE,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;YACzD,MAAM,MAAM,GAAG,MAAM,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC,QAAQ,CAAC,CAAC,CAAA;YAC9C,MAAM,SAAS,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAA;YAC3C,IAAI,CAAC,SAAS;gBAAE,IAAI,CAAC,GAAG,CAAC,2CAA2C,CAAC,CAAC,CAAA;YAEtE,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;YACf,MAAM,MAAM,GAAG,MAAM,eAAe,CAAC,QAAQ,CAAC,CAAA;YAC9C,IAAI,MAAM;gBAAE,OAAO,CAAC,4BAA4B,CAAC,CAAA;QACnD,CAAC;QAAC,MAAM,CAAC;YACP,yBAAyB;QAC3B,CAAC;QAED,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAA;QAEf,IAAI,QAAQ,EAAE,CAAC;YACb,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;gBACnC,OAAO,EAAE,mCAAmC;aAC7C,CAAC,CAAA;YACF,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;gBAC1C,MAAM,EAAE,QAAQ,EAAE,KAAK,EAAE,GAAG,MAAM,MAAM,CAAC,kBAAkB,CAAC,CAAA;gBAC5D,MAAM,EAAE,OAAO,EAAE,GAAG,MAAM,MAAM,CAAC,SAAS,CAAC,CAAA;gBAC3C,MAAM,EAAE,IAAI,EAAE,GAAG,MAAM,MAAM,CAAC,WAAW,CAAC,CAAA;gBAC1C,MAAM,KAAK,CAAC,IAAI,CAAC,OAAO,EAAE,EAAE,UAAU,CAAC,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;gBAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,EAAE,EAAE,kBAAkB,CAAC,CAAA;gBAChD,MAAM,QAAQ,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAA;gBAC9B,OAAO,CAAC,YAAY,IAAI,EAAE,CAAC,CAAA;YAC7B,CAAC;QACH,CAAC;QAED,MAAM,QAAQ,GAAG,MAAM,KAAK,CAAC,OAAO,CAAC;YACnC,OAAO,EAAE,gDAAgD;SAC1D,CAAC,CAAA;QACF,IAAI,QAAQ,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,QAAQ,CAAC,EAAE,CAAC;YAC1C,MAAM,SAAS,GAAG,kBAAkB,CAClC,YAAY,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,SAAS,8BAA8B,YAAY,CAAC,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,2DAA2D,MAAM,EAAE,CACnL,CAAA;YACD,MAAM,WAAW,CAAC,mCAAmC,SAAS,EAAE,CAAC,CAAA;QACnE,CAAC;IACH,CAAC;IAED,KAAK,CAAC,KAAK,CAAC,kBAAkB,CAAC,CAAA;AACjC,CAAC"}
@@ -1,33 +0,0 @@
1
- type SkillDetection = {
2
- skillClass: string;
3
- skill: string;
4
- level: number;
5
- };
6
- type GitHubData = {
7
- bio: string | null;
8
- avatarUrl: string | null;
9
- blogUrl: string | null;
10
- repos: Array<{
11
- name: string;
12
- description: string | null;
13
- url: string;
14
- language: string | null;
15
- stars: number;
16
- updatedAt: string;
17
- }>;
18
- };
19
- /**
20
- * Scan local git repos for languages and frameworks.
21
- * Looks in common workspace directories.
22
- */
23
- export declare function scanSkillTree(): Promise<SkillDetection[]>;
24
- /**
25
- * Fetch GitHub profile data using gh CLI (already authenticated).
26
- */
27
- export declare function scanGitHub(): Promise<GitHubData | null>;
28
- /**
29
- * Run the full profile scan and submit to hacklab.
30
- */
31
- export declare function scanProfile(): Promise<void>;
32
- export {};
33
- //# sourceMappingURL=scan-profile.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-profile.d.ts","sourceRoot":"","sources":["../../src/commands/scan-profile.ts"],"names":[],"mappings":"AAQA,KAAK,cAAc,GAAG;IACpB,UAAU,EAAE,MAAM,CAAA;IAClB,KAAK,EAAE,MAAM,CAAA;IACb,KAAK,EAAE,MAAM,CAAA;CACd,CAAA;AAED,KAAK,UAAU,GAAG;IAChB,GAAG,EAAE,MAAM,GAAG,IAAI,CAAA;IAClB,SAAS,EAAE,MAAM,GAAG,IAAI,CAAA;IACxB,OAAO,EAAE,MAAM,GAAG,IAAI,CAAA;IACtB,KAAK,EAAE,KAAK,CAAC;QACX,IAAI,EAAE,MAAM,CAAA;QACZ,WAAW,EAAE,MAAM,GAAG,IAAI,CAAA;QAC1B,GAAG,EAAE,MAAM,CAAA;QACX,QAAQ,EAAE,MAAM,GAAG,IAAI,CAAA;QACvB,KAAK,EAAE,MAAM,CAAA;QACb,SAAS,EAAE,MAAM,CAAA;KAClB,CAAC,CAAA;CACH,CAAA;AA2DD;;;GAGG;AACH,wBAAsB,aAAa,IAAI,OAAO,CAAC,cAAc,EAAE,CAAC,CA2F/D;AAED;;GAEG;AACH,wBAAsB,UAAU,IAAI,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CA2B7D;AAED;;GAEG;AACH,wBAAsB,WAAW,kBA+GhC"}
@@ -1,279 +0,0 @@
1
- import { execSync } from 'node:child_process';
2
- import { readdir, stat } from 'node:fs/promises';
3
- import { homedir } from 'node:os';
4
- import { join } from 'node:path';
5
- import { loadSession } from '../session.js';
6
- import { bold, dim, error, info, success } from '../ui.js';
7
- // Map file extensions and config files to skill class + skill name
8
- const LANGUAGE_SKILL_MAP = {
9
- ts: { skillClass: 'builder', skill: 'TypeScript' },
10
- tsx: { skillClass: 'builder', skill: 'React' },
11
- js: { skillClass: 'builder', skill: 'JavaScript' },
12
- jsx: { skillClass: 'builder', skill: 'React' },
13
- py: { skillClass: 'hacker', skill: 'Python' },
14
- go: { skillClass: 'builder', skill: 'Go' },
15
- rs: { skillClass: 'builder', skill: 'Rust' },
16
- swift: { skillClass: 'builder', skill: 'Swift' },
17
- kt: { skillClass: 'builder', skill: 'Kotlin' },
18
- java: { skillClass: 'builder', skill: 'Java' },
19
- rb: { skillClass: 'builder', skill: 'Ruby' },
20
- php: { skillClass: 'builder', skill: 'PHP' },
21
- cs: { skillClass: 'builder', skill: 'C#' },
22
- cpp: { skillClass: 'builder', skill: 'C++' },
23
- c: { skillClass: 'builder', skill: 'C' },
24
- sol: { skillClass: 'hacker', skill: 'Solidity' },
25
- sql: { skillClass: 'operator', skill: 'SQL' },
26
- prisma: { skillClass: 'operator', skill: 'Prisma' },
27
- proto: { skillClass: 'builder', skill: 'Protobuf' },
28
- };
29
- const CONFIG_FILE_SKILL_MAP = {
30
- 'next.config.js': { skillClass: 'builder', skill: 'Next.js' },
31
- 'next.config.ts': { skillClass: 'builder', skill: 'Next.js' },
32
- 'next.config.mjs': { skillClass: 'builder', skill: 'Next.js' },
33
- 'nuxt.config.ts': { skillClass: 'builder', skill: 'Nuxt' },
34
- 'svelte.config.js': { skillClass: 'builder', skill: 'Svelte' },
35
- 'astro.config.mjs': { skillClass: 'builder', skill: 'Astro' },
36
- 'tailwind.config.js': { skillClass: 'designer', skill: 'Tailwind CSS' },
37
- 'tailwind.config.ts': { skillClass: 'designer', skill: 'Tailwind CSS' },
38
- 'postcss.config.js': { skillClass: 'designer', skill: 'CSS' },
39
- Dockerfile: { skillClass: 'operator', skill: 'Docker' },
40
- 'docker-compose.yml': { skillClass: 'operator', skill: 'Docker' },
41
- 'docker-compose.yaml': { skillClass: 'operator', skill: 'Docker' },
42
- '.github': { skillClass: 'operator', skill: 'GitHub Actions' },
43
- 'fly.toml': { skillClass: 'operator', skill: 'Fly.io' },
44
- 'vercel.json': { skillClass: 'operator', skill: 'Vercel' },
45
- 'terraform.tf': { skillClass: 'operator', skill: 'Terraform' },
46
- 'go.mod': { skillClass: 'builder', skill: 'Go' },
47
- 'Cargo.toml': { skillClass: 'builder', skill: 'Rust' },
48
- 'pyproject.toml': { skillClass: 'hacker', skill: 'Python' },
49
- 'requirements.txt': { skillClass: 'hacker', skill: 'Python' },
50
- Gemfile: { skillClass: 'builder', skill: 'Ruby' },
51
- 'CLAUDE.md': { skillClass: 'hacker', skill: 'Claude Code' },
52
- '.cursor': { skillClass: 'hacker', skill: 'Cursor' },
53
- 'AGENTS.md': { skillClass: 'hacker', skill: 'Codex' },
54
- 'DESIGN.md': { skillClass: 'designer', skill: 'Design Systems' },
55
- };
56
- /**
57
- * Scan local git repos for languages and frameworks.
58
- * Looks in common workspace directories.
59
- */
60
- export async function scanSkillTree() {
61
- const home = homedir();
62
- const searchDirs = [
63
- join(home, 'gh'),
64
- join(home, 'projects'),
65
- join(home, 'code'),
66
- join(home, 'dev'),
67
- join(home, 'src'),
68
- join(home, 'repos'),
69
- join(home, 'workspace'),
70
- join(home, 'Developer'),
71
- join(home, 'Documents', 'GitHub'),
72
- ];
73
- const skillCounts = new Map();
74
- for (const searchDir of searchDirs) {
75
- try {
76
- await stat(searchDir);
77
- }
78
- catch {
79
- continue;
80
- }
81
- try {
82
- const entries = await readdir(searchDir, {
83
- withFileTypes: true,
84
- });
85
- for (const entry of entries) {
86
- if (!entry.isDirectory())
87
- continue;
88
- const repoDir = join(searchDir, entry.name);
89
- // Check if it's a git repo
90
- try {
91
- await stat(join(repoDir, '.git'));
92
- }
93
- catch {
94
- continue;
95
- }
96
- // Scan for config files
97
- try {
98
- const files = await readdir(repoDir);
99
- for (const file of files) {
100
- const mapping = CONFIG_FILE_SKILL_MAP[file];
101
- if (mapping) {
102
- const key = `${mapping.skillClass}:${mapping.skill}`;
103
- skillCounts.set(key, (skillCounts.get(key) ?? 0) + 1);
104
- }
105
- }
106
- }
107
- catch {
108
- // skip
109
- }
110
- // Quick scan for file extensions (top level + src/)
111
- const dirsToScan = [repoDir, join(repoDir, 'src')];
112
- for (const dir of dirsToScan) {
113
- try {
114
- const files = await readdir(dir);
115
- for (const file of files) {
116
- const ext = file.split('.').pop();
117
- if (ext && LANGUAGE_SKILL_MAP[ext]) {
118
- const mapping = LANGUAGE_SKILL_MAP[ext];
119
- const key = `${mapping.skillClass}:${mapping.skill}`;
120
- skillCounts.set(key, (skillCounts.get(key) ?? 0) + 1);
121
- }
122
- }
123
- }
124
- catch {
125
- // skip
126
- }
127
- }
128
- }
129
- }
130
- catch {
131
- // can't read dir
132
- }
133
- }
134
- // Convert counts to skill levels (more repos = higher level)
135
- const skills = [];
136
- for (const [key, count] of skillCounts) {
137
- const [skillClass, skill] = key.split(':');
138
- // Level: 1 repo = 1, 3+ repos = 2, 6+ repos = 3, 10+ = 4, 20+ = 5
139
- let level = 1;
140
- if (count >= 20)
141
- level = 5;
142
- else if (count >= 10)
143
- level = 4;
144
- else if (count >= 6)
145
- level = 3;
146
- else if (count >= 3)
147
- level = 2;
148
- skills.push({ skillClass: skillClass, skill: skill, level });
149
- }
150
- return skills.sort((a, b) => b.level - a.level);
151
- }
152
- /**
153
- * Fetch GitHub profile data using gh CLI (already authenticated).
154
- */
155
- export async function scanGitHub() {
156
- try {
157
- // Get user profile
158
- const profileRaw = execSync("gh api user --jq '{ login: .login, bio: .bio, avatar_url: .avatar_url, blog: .blog }'", { encoding: 'utf8', timeout: 10000 }).trim();
159
- const profile = JSON.parse(profileRaw);
160
- // Get top repos (by stars, recently updated)
161
- const reposRaw = execSync('gh api "user/repos?sort=updated&per_page=20&type=owner" --jq \'[.[] | select(.fork == false) | { name: .name, description: .description, url: .html_url, language: .language, stars: .stargazers_count, updatedAt: .updated_at }]\'', { encoding: 'utf8', timeout: 15000 }).trim();
162
- const repos = JSON.parse(reposRaw);
163
- return {
164
- bio: profile.bio || null,
165
- avatarUrl: profile.avatar_url || null,
166
- blogUrl: profile.blog || null,
167
- repos,
168
- };
169
- }
170
- catch {
171
- return null;
172
- }
173
- }
174
- /**
175
- * Run the full profile scan and submit to hacklab.
176
- */
177
- export async function scanProfile() {
178
- const session = await loadSession();
179
- if (!session) {
180
- error('not logged in');
181
- info(`run ${dim('hacklab login')} first`);
182
- process.exit(1);
183
- }
184
- const handle = session.handle ?? 'you';
185
- const appUrl = session.appUrl.replace(/\/$/, '');
186
- console.log('');
187
- console.log(bold(' Building your profile...'));
188
- console.log(dim(' Scanning repos, GitHub, and blog. Takes a moment.'));
189
- console.log('');
190
- // 1. Skill tree
191
- info('scanning local repos for skills...');
192
- const skills = await scanSkillTree();
193
- if (skills.length > 0) {
194
- info(` found ${bold(String(skills.length))} skills across ${new Set(skills.map((s) => s.skillClass)).size} classes`);
195
- for (const s of skills.slice(0, 8)) {
196
- info(` ${dim(s.skillClass)} / ${s.skill} (lv.${s.level})`);
197
- }
198
- if (skills.length > 8) {
199
- info(` ${dim(`...and ${skills.length - 8} more`)}`);
200
- }
201
- }
202
- else {
203
- info(` ${dim('no repos found in common directories')}`);
204
- }
205
- console.log('');
206
- // 2. GitHub
207
- info('fetching GitHub profile...');
208
- const github = await scanGitHub();
209
- if (github) {
210
- info(` bio: ${github.bio ?? dim('(none)')}`);
211
- info(` blog: ${github.blogUrl ?? dim('(none)')}`);
212
- info(` repos: ${github.repos.length} (non-fork, recent)`);
213
- const topRepos = github.repos.sort((a, b) => b.stars - a.stars).slice(0, 5);
214
- for (const r of topRepos) {
215
- info(` ${r.name} ${r.language ? dim(`(${r.language})`) : ''} ${r.stars > 0 ? `${r.stars}*` : ''}`);
216
- }
217
- }
218
- else {
219
- info(` ${dim('gh CLI not found or not authenticated. run gh auth login')}`);
220
- }
221
- console.log('');
222
- // 3. Submit skills
223
- if (skills.length > 0) {
224
- info('submitting skills...');
225
- const res = await fetch(`${appUrl}/api/skills`, {
226
- method: 'POST',
227
- headers: {
228
- 'Content-Type': 'application/json',
229
- Authorization: `Bearer ${session.token}`,
230
- },
231
- body: JSON.stringify({ skills }),
232
- });
233
- if (res.ok) {
234
- success(`${skills.length} skills synced`);
235
- }
236
- else {
237
- info(` ${dim('skills API not available yet (will sync later)')}`);
238
- }
239
- }
240
- // 4. Submit GitHub repos as projects
241
- if (github && github.repos.length > 0) {
242
- info('syncing top repos as projects...');
243
- let synced = 0;
244
- for (const repo of github.repos.slice(0, 10)) {
245
- const res = await fetch(`${appUrl}/api/projects`, {
246
- method: 'POST',
247
- headers: {
248
- 'Content-Type': 'application/json',
249
- Authorization: `Bearer ${session.token}`,
250
- },
251
- body: JSON.stringify({
252
- slug: repo.name,
253
- title: repo.name,
254
- description: repo.description,
255
- repoUrl: repo.url,
256
- tags: repo.language ? [repo.language] : [],
257
- }),
258
- });
259
- if (res.ok)
260
- synced++;
261
- }
262
- if (synced > 0) {
263
- success(`${synced} repos synced as projects`);
264
- }
265
- else {
266
- info(` ${dim('projects API not available yet (will sync later)')}`);
267
- }
268
- }
269
- // 5. Set blog URL if found
270
- if (github?.blogUrl) {
271
- info(`blog detected: ${bold(github.blogUrl)}`);
272
- info(` ${dim('RSS sync will start automatically after profile is set up')}`);
273
- }
274
- console.log('');
275
- success('profile scan complete');
276
- info(`view: ${bold(`${appUrl}/${handle}`)}`);
277
- console.log('');
278
- }
279
- //# sourceMappingURL=scan-profile.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"scan-profile.js","sourceRoot":"","sources":["../../src/commands/scan-profile.ts"],"names":[],"mappings":"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"}
package/dist/dd.d.ts DELETED
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env node
2
- export {};
3
- //# sourceMappingURL=dd.d.ts.map
package/dist/dd.d.ts.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dd.d.ts","sourceRoot":"","sources":["../src/dd.ts"],"names":[],"mappings":""}
package/dist/dd.js DELETED
@@ -1,28 +0,0 @@
1
- #!/usr/bin/env node
2
- import { drop } from './commands/drop.js';
3
- import { error } from './ui.js';
4
- const args = process.argv.slice(2);
5
- if (args.length === 0) {
6
- error('nothing to drop');
7
- console.error('usage: dd your message here');
8
- process.exit(1);
9
- }
10
- // Check for -u/--url flag
11
- let url;
12
- const filtered = [];
13
- for (let i = 0; i < args.length; i++) {
14
- const arg = args[i];
15
- if ((arg === '-u' || arg === '--url') && args[i + 1]) {
16
- url = args[i + 1];
17
- i++;
18
- }
19
- else {
20
- filtered.push(arg);
21
- }
22
- }
23
- const content = filtered.join(' ');
24
- drop(content, url).catch((err) => {
25
- console.error(err instanceof Error ? err.message : String(err));
26
- process.exit(1);
27
- });
28
- //# sourceMappingURL=dd.js.map
package/dist/dd.js.map DELETED
@@ -1 +0,0 @@
1
- {"version":3,"file":"dd.js","sourceRoot":"","sources":["../src/dd.ts"],"names":[],"mappings":";AAEA,OAAO,EAAE,IAAI,EAAE,MAAM,oBAAoB,CAAA;AACzC,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAA;AAE/B,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAA;AAElC,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;IACtB,KAAK,CAAC,iBAAiB,CAAC,CAAA;IACxB,OAAO,CAAC,KAAK,CAAC,6BAA6B,CAAC,CAAA;IAC5C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC;AAED,0BAA0B;AAC1B,IAAI,GAAuB,CAAA;AAC3B,MAAM,QAAQ,GAAa,EAAE,CAAA;AAE7B,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;IACrC,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAE,CAAA;IACpB,IAAI,CAAC,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,OAAO,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;QACrD,GAAG,GAAG,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAA;QACjB,CAAC,EAAE,CAAA;IACL,CAAC;SAAM,CAAC;QACN,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;IACpB,CAAC;AACH,CAAC;AAED,MAAM,OAAO,GAAG,QAAQ,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AAElC,IAAI,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,CAAC,GAAY,EAAE,EAAE;IACxC,OAAO,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAA;IAC/D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACjB,CAAC,CAAC,CAAA"}