hacklab 0.12.7 → 0.13.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +38 -39
- package/dist/cli.js +5 -4
- package/dist/cli.js.map +1 -1
- package/dist/commands/drops.d.ts +7 -0
- package/dist/commands/drops.d.ts.map +1 -0
- package/dist/commands/drops.js +63 -0
- package/dist/commands/drops.js.map +1 -0
- package/dist/commands/essay.d.ts +18 -2
- package/dist/commands/essay.d.ts.map +1 -1
- package/dist/commands/essay.js +496 -279
- package/dist/commands/essay.js.map +1 -1
- package/dist/commands/hacker.d.ts.map +1 -1
- package/dist/commands/hacker.js +13 -15
- package/dist/commands/hacker.js.map +1 -1
- package/dist/commands/profile.d.ts.map +1 -1
- package/dist/commands/profile.js +40 -10
- package/dist/commands/profile.js.map +1 -1
- package/dist/commands/project.d.ts +0 -22
- package/dist/commands/project.d.ts.map +1 -1
- package/dist/commands/project.js +308 -738
- package/dist/commands/project.js.map +1 -1
- package/dist/commands/scan.d.ts +9 -4
- package/dist/commands/scan.d.ts.map +1 -1
- package/dist/commands/scan.js +131 -69
- package/dist/commands/scan.js.map +1 -1
- package/dist/commands/sync.js +1 -1
- package/dist/commands/sync.js.map +1 -1
- package/dist/daily-sync.d.ts +2 -0
- package/dist/daily-sync.d.ts.map +1 -1
- package/dist/daily-sync.js +21 -0
- package/dist/daily-sync.js.map +1 -1
- package/dist/dossier.d.ts +73 -0
- package/dist/dossier.d.ts.map +1 -0
- package/dist/dossier.js +141 -0
- package/dist/dossier.js.map +1 -0
- package/dist/registry.d.ts.map +1 -1
- package/dist/registry.js +14 -6
- package/dist/registry.js.map +1 -1
- package/dist/scanners/index.d.ts +2 -0
- package/dist/scanners/index.d.ts.map +1 -1
- package/dist/scanners/index.js +8 -0
- package/dist/scanners/index.js.map +1 -1
- package/dist/scanners/util.d.ts +2 -0
- package/dist/scanners/util.d.ts.map +1 -1
- package/dist/scanners/util.js +23 -0
- package/dist/scanners/util.js.map +1 -1
- package/dist/share-card.d.ts +0 -1
- package/dist/share-card.d.ts.map +1 -1
- package/dist/share-card.js +2 -28
- package/dist/share-card.js.map +1 -1
- package/dist/share.d.ts +4 -2
- package/dist/share.d.ts.map +1 -1
- package/dist/share.js +30 -27
- package/dist/share.js.map +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -6,29 +6,31 @@ a card.
|
|
|
6
6
|
|
|
7
7
|
## Install
|
|
8
8
|
|
|
9
|
-
Install, sign in, then
|
|
9
|
+
Install, sign in, then scan this machine:
|
|
10
10
|
|
|
11
11
|
```bash
|
|
12
12
|
curl -fsSL https://hacklab.so/install | sh
|
|
13
13
|
hacklab login
|
|
14
|
-
hacklab
|
|
14
|
+
hacklab scan
|
|
15
15
|
```
|
|
16
16
|
|
|
17
17
|
The script checks for Node 20+ and installs the CLI globally — that's all it
|
|
18
18
|
does. After it, `hacklab` is a real command on your PATH; `login` creates or
|
|
19
|
-
restores your account and `
|
|
20
|
-
|
|
19
|
+
restores your account and `scan` uploads this machine's usage, shares the card,
|
|
20
|
+
and turns on the background daemon. If you already have Node 20 or newer
|
|
21
|
+
(including a version manager), you can skip the script:
|
|
21
22
|
|
|
22
23
|
```bash
|
|
23
24
|
npm i -g hacklab@latest
|
|
24
25
|
hacklab login
|
|
25
|
-
hacklab
|
|
26
|
+
hacklab scan
|
|
26
27
|
```
|
|
27
28
|
|
|
28
29
|
### Windows
|
|
29
30
|
|
|
30
31
|
On native Windows (PowerShell), use the `.ps1` installer instead — it checks
|
|
31
|
-
for Node 20+ and installs the CLI globally, then points you at `hacklab login
|
|
32
|
+
for Node 20+ and installs the CLI globally, then points you at `hacklab login`
|
|
33
|
+
and `hacklab scan`:
|
|
32
34
|
|
|
33
35
|
```powershell
|
|
34
36
|
irm https://hacklab.so/install.ps1 | iex
|
|
@@ -54,18 +56,23 @@ most once a day); update with `npm i -g hacklab@latest`.
|
|
|
54
56
|
## Scan
|
|
55
57
|
|
|
56
58
|
```
|
|
57
|
-
scan
|
|
59
|
+
login → scan this machine → upload → card → share on X → daemon on
|
|
58
60
|
```
|
|
59
61
|
|
|
60
|
-
`hacklab scan` reads
|
|
61
|
-
OpenClaw, Hermes, OpenCode, and Grok Build
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
62
|
+
`hacklab scan` requires `hacklab login`. It reads local AI token usage from
|
|
63
|
+
Claude Code, Codex, Cursor, OpenClaw, Hermes, OpenCode, and Grok Build, uploads
|
|
64
|
+
it to your profile, and draws the card from the live account (real rank, belt,
|
|
65
|
+
streak — not a local postcard). Then it asks whether to share that card on X.
|
|
66
|
+
A successful scan summons the daemon so the card stays current; `hacklab scan
|
|
67
|
+
--no-daemon` skips the schedule, and `hacklab daemon off` tears it down.
|
|
68
|
+
Skip the whole command if this computer isn't yours — it would upload that
|
|
69
|
+
machine's usage to your profile. Cursor users with no API key are offered one
|
|
70
|
+
(local Cursor data is only an estimate).
|
|
65
71
|
|
|
66
72
|
## Commands
|
|
67
73
|
|
|
68
|
-
- `hacklab scan` — scan
|
|
74
|
+
- `hacklab scan` — scan this machine, upload to your profile, share the card.
|
|
75
|
+
Requires login. Summons the daemon afterwards (`--no-daemon` to skip).
|
|
69
76
|
- `hacklab sync` — re-scan local AI usage and sync it to your profile.
|
|
70
77
|
- `hacklab daemon` — summon the daemon: two OS-native background jobs (launchd on
|
|
71
78
|
macOS, systemd user timers on Linux, Task Scheduler tasks on Windows) so your
|
|
@@ -91,32 +98,24 @@ terminal and asks whether to share it on X.
|
|
|
91
98
|
- `hacklab config <key> <value>` — set config (`cursor-api-key`, `cursor-email`,
|
|
92
99
|
`prompt-stats`).
|
|
93
100
|
Bare `hacklab config` prints the effective values and where each came from.
|
|
94
|
-
- `hacklab project` —
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
content: |
|
|
113
|
-
## Why I built it
|
|
114
|
-
Long-form markdown for the project page.
|
|
115
|
-
tags: [ai, typescript]
|
|
116
|
-
screenshots:
|
|
117
|
-
- url: https://my-project.dev/thumbnail.webp
|
|
118
|
-
caption: Main screen
|
|
119
|
-
```
|
|
101
|
+
- `hacklab project` — agent help for publishing a project to your profile.
|
|
102
|
+
`project add --title "…" [--repo <git url>] [--url <live url>] [--desc "…"]`
|
|
103
|
+
posts it (`--json` for agents); one of `--repo`/`--url` is required. `--repo`
|
|
104
|
+
takes any git host; a github.com `--url` with no `--repo` is treated as the
|
|
105
|
+
repo. A github repo is probed for visibility so a private one stays hidden on
|
|
106
|
+
the web; `--private`/`--public` override that. Re-run with the same title to
|
|
107
|
+
update. `project list` shows yours, `project view <slug>` prints one full
|
|
108
|
+
page, and `project edit <slug> [--title/--desc/--repo/--url/--private/--public]`
|
|
109
|
+
changes fields — editing a GitHub-synced project ends that sync, so it needs
|
|
110
|
+
`--yes`. `project delete <slug>` removes one; it confirms first, and `--yes`
|
|
111
|
+
is required when there's no terminal to ask (scripts, agents, `--json`).
|
|
112
|
+
- `hacklab essay` — agent help for posting an essay. `essay post --title "…"
|
|
113
|
+
--content <md>` publishes it (`--file <path.md>`, or a bare `<path.md>`, for
|
|
114
|
+
a file on disk; `--json` for agents). `essay update <id>` replaces the body at
|
|
115
|
+
the same URL. `essay list` shows yours — `essay list <handle>` a hacker's,
|
|
116
|
+
`essay list org <slug>` an org's, `--page N` for more. `essay view <id>` reads
|
|
117
|
+
one essay. `essay delete <id>` removes one of yours; like `project delete` it
|
|
118
|
+
confirms first and needs `--yes` when nothing can ask.
|
|
120
119
|
- `hacklab org` — hub for company management. If you already own a company, pick
|
|
121
120
|
a field, type the new value, and it saves as you go. If you don't own one yet,
|
|
122
121
|
it offers to claim or create. Subcommands: `hacklab org claim` (take ownership
|
package/dist/cli.js
CHANGED
|
@@ -90,16 +90,17 @@ const HELP_GROUPS = [
|
|
|
90
90
|
title: 'game',
|
|
91
91
|
rows: [
|
|
92
92
|
{ label: 'rules', summary: 'understand how the ranking works' },
|
|
93
|
-
{ label: 'scan', summary: 'scan
|
|
93
|
+
{ label: 'scan', summary: 'scan this machine and share the card' },
|
|
94
94
|
{ label: 'sync', summary: 'upload local AI usage to your profile' },
|
|
95
95
|
],
|
|
96
96
|
},
|
|
97
97
|
{
|
|
98
98
|
title: 'posting',
|
|
99
99
|
rows: [
|
|
100
|
-
{ label: 'drop <message>', summary: 'post
|
|
101
|
-
{ label: '
|
|
102
|
-
{ label: '
|
|
100
|
+
{ label: 'drop <message>', summary: 'post a drop' },
|
|
101
|
+
{ label: 'drops', summary: 'your drops' },
|
|
102
|
+
{ label: 'project', summary: 'add, list, and edit your projects' },
|
|
103
|
+
{ label: 'essay', summary: 'post, list, and update your essays' },
|
|
103
104
|
],
|
|
104
105
|
},
|
|
105
106
|
{
|
package/dist/cli.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"cli.js","sourceRoot":"","sources":["../src/cli.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* `hacklab drops` — the feed. Prints every drop on the caller's profile, then
|
|
3
|
+
* the tab URL. `--json` is the list. Looking up someone else is not this
|
|
4
|
+
* command (`hacklab hacker <user>` already includes recent drops).
|
|
5
|
+
*/
|
|
6
|
+
export declare function drops(args: string[]): Promise<void>;
|
|
7
|
+
//# sourceMappingURL=drops.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drops.d.ts","sourceRoot":"","sources":["../../src/commands/drops.ts"],"names":[],"mappings":"AAOA;;;;GAIG;AACH,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAiEzD"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { emitJsonError, requireSession } from '../api-client.js';
|
|
2
|
+
import { agentProfilePath } from '../dossier.js';
|
|
3
|
+
import { resolveAppUrl } from '../session.js';
|
|
4
|
+
import { dim, error, link, stripControl } from '../ui.js';
|
|
5
|
+
/**
|
|
6
|
+
* `hacklab drops` — the feed. Prints every drop on the caller's profile, then
|
|
7
|
+
* the tab URL. `--json` is the list. Looking up someone else is not this
|
|
8
|
+
* command (`hacklab hacker <user>` already includes recent drops).
|
|
9
|
+
*/
|
|
10
|
+
export async function drops(args) {
|
|
11
|
+
const json = args.includes('--json');
|
|
12
|
+
const session = await requireSession(json);
|
|
13
|
+
const handle = session.handle;
|
|
14
|
+
if (!handle) {
|
|
15
|
+
const message = 'claim a username first with `hacklab login`';
|
|
16
|
+
if (json)
|
|
17
|
+
emitJsonError('no_handle', message);
|
|
18
|
+
error('no drops yet — you have not claimed a username');
|
|
19
|
+
process.exit(1);
|
|
20
|
+
}
|
|
21
|
+
const feedUrl = `${resolveAppUrl(session).replace(/\/$/, '')}/${handle}?tab=drops`;
|
|
22
|
+
let res;
|
|
23
|
+
try {
|
|
24
|
+
res = await fetch(`${resolveAppUrl(session)}${agentProfilePath(handle)}`, {
|
|
25
|
+
headers: { Authorization: `Bearer ${session.token}` },
|
|
26
|
+
});
|
|
27
|
+
}
|
|
28
|
+
catch (err) {
|
|
29
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
30
|
+
if (json)
|
|
31
|
+
emitJsonError('network', `couldn't reach hacklab: ${message}`);
|
|
32
|
+
error(`couldn't reach hacklab: ${message}`);
|
|
33
|
+
process.exit(1);
|
|
34
|
+
}
|
|
35
|
+
if (!res.ok) {
|
|
36
|
+
const data = await res.json().catch(() => null);
|
|
37
|
+
if (json)
|
|
38
|
+
emitJsonError('request_failed', data?.error ?? `failed (${res.status})`);
|
|
39
|
+
error(data?.error ?? `failed (${res.status})`);
|
|
40
|
+
process.exit(1);
|
|
41
|
+
}
|
|
42
|
+
const body = (await res.json().catch(() => null));
|
|
43
|
+
const items = [];
|
|
44
|
+
for (const raw of body?.hacker?.recent?.drops ?? []) {
|
|
45
|
+
if (typeof raw?.text === 'string' && typeof raw.createdAt === 'string') {
|
|
46
|
+
items.push({ text: raw.text, createdAt: raw.createdAt });
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
if (json) {
|
|
50
|
+
console.log(JSON.stringify({ schemaVersion: 1, drops: items, url: feedUrl }, null, 2));
|
|
51
|
+
return;
|
|
52
|
+
}
|
|
53
|
+
if (items.length === 0) {
|
|
54
|
+
console.log('nothing yet');
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
for (const item of items) {
|
|
58
|
+
console.log(`${dim(item.createdAt.slice(0, 10))} ${stripControl(item.text)}`);
|
|
59
|
+
}
|
|
60
|
+
console.log('');
|
|
61
|
+
console.log(link(feedUrl));
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=drops.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"drops.js","sourceRoot":"","sources":["../../src/commands/drops.ts"],"names":[],"mappings":"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"}
|
package/dist/commands/essay.d.ts
CHANGED
|
@@ -1,6 +1,20 @@
|
|
|
1
1
|
import { type Session } from '../session.js';
|
|
2
|
-
export
|
|
3
|
-
|
|
2
|
+
export type EssayViewTarget = {
|
|
3
|
+
kind: 'one';
|
|
4
|
+
id: string;
|
|
5
|
+
} | {
|
|
6
|
+
kind: 'not-an-id';
|
|
7
|
+
token: string;
|
|
8
|
+
} | {
|
|
9
|
+
kind: 'missing';
|
|
10
|
+
};
|
|
11
|
+
/**
|
|
12
|
+
* `view` takes an essay id only. Anything that can't be an id prefix is a
|
|
13
|
+
* usage error pointing at `essay list <handle>` — a handle and a short hex id
|
|
14
|
+
* are indistinguishable, so guessing between them silently reads the wrong
|
|
15
|
+
* thing.
|
|
16
|
+
*/
|
|
17
|
+
export declare function parseViewTarget(token: string | undefined): EssayViewTarget;
|
|
4
18
|
/**
|
|
5
19
|
* The `essay list` target grammar, decided by argument count so a user
|
|
6
20
|
* literally named "org" still works as the bare one-arg form:
|
|
@@ -20,5 +34,7 @@ export declare function parseListTarget(positionals: string[]): {
|
|
|
20
34
|
} | {
|
|
21
35
|
kind: 'invalid';
|
|
22
36
|
};
|
|
37
|
+
export declare function readError(res: Response, session?: Session | null): Promise<string>;
|
|
38
|
+
export declare function formatEssayDate(iso: string): string;
|
|
23
39
|
export declare function essay(args: string[]): Promise<void>;
|
|
24
40
|
//# sourceMappingURL=essay.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"essay.d.ts","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"essay.d.ts","sourceRoot":"","sources":["../../src/commands/essay.ts"],"names":[],"mappings":"AAOA,OAAO,EAGL,KAAK,OAAO,EAEb,MAAM,eAAe,CAAA;AAgDtB,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,EAAE,EAAE,MAAM,CAAA;CAAE,GAC3B;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GACpC;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CAAA;AAEvB;;;;;GAKG;AACH,wBAAgB,eAAe,CAAC,KAAK,EAAE,MAAM,GAAG,SAAS,GAAG,eAAe,CAQ1E;AAED;;;;;;;GAOG;AACH,wBAAgB,eAAe,CAC7B,WAAW,EAAE,MAAM,EAAE,GAEnB;IAAE,IAAI,EAAE,MAAM,CAAA;CAAE,GAChB;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,GAChC;IAAE,IAAI,EAAE,KAAK,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE,GAC7B;IAAE,IAAI,EAAE,SAAS,CAAA;CAAE,CActB;AA2ED,wBAAsB,SAAS,CAC7B,GAAG,EAAE,QAAQ,EACb,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GACvB,OAAO,CAAC,MAAM,CAAC,CAIjB;AAiBD,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAInD;AA+fD,wBAAsB,KAAK,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CA+BzD"}
|