hacklab 0.5.3 → 0.6.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 CHANGED
@@ -22,7 +22,7 @@ npx hacklab@latest join
22
22
  ## The join ritual
23
23
 
24
24
  ```
25
- scan local AI usage → see your rank → pick a username → sign in with GitHub → claim
25
+ scan local AI usage → see your rank → pick a username → sign in with GitHub → claim → chat
26
26
  ```
27
27
 
28
28
  1. **Scan** — reads your local AI token usage from Claude Code, Codex, Cursor,
@@ -35,6 +35,8 @@ scan local AI usage → see your rank → pick a username → sign in with GitHu
35
35
  uploads in the background while you get a shareable stats card.
36
36
  6. **Share** — a stats thumbnail (belt, level, rank, token breakdown) is rendered
37
37
  locally, copied to your clipboard, and you can post it to X in one keystroke.
38
+ 7. **Chat** — finally, you're offered the live channel (default yes). Decline and
39
+ you can jump in anytime with `hacklab chat`.
38
40
 
39
41
  ## Commands
40
42
 
@@ -43,13 +45,13 @@ scan local AI usage → see your rank → pick a username → sign in with GitHu
43
45
  - `hacklab sync` — re-scan local AI usage and sync it to your profile.
44
46
  - `hacklab whoami` — show who you're logged in as.
45
47
  - `hacklab drop "message"` — post a drop to your feed (`-u <url>` to attach a link).
46
- - `hacklab chat <sub>` — the channel and DMs (`live`, `tail`, `post`, `history`,
47
- `dms`, `dm <handle>`, `flag`). Author handles are coloured by belt rank. Add
48
- `--json` to any non-interactive subcommand for machine-readable output an agent
49
- can drive.
48
+ - `hacklab chat` — open the live channel (typing posts; this is the default, so
49
+ bare `hacklab chat` and `hacklab chat live` are the same). Other subcommands:
50
+ `tail`, `post`, `history`, `dms`, `dm <handle>`, `flag`. Author handles are
51
+ coloured by belt rank. Add `--json` to any non-interactive subcommand for
52
+ machine-readable output an agent can drive.
50
53
  - `hacklab login` — re-authenticate with GitHub.
51
- - `hacklab exam [--pyro|--hacker]` — run your belt exam (token usage + GitHub code).
52
- - `hacklab scan` — build your full profile (skills, repos, blog).
54
+ - `hacklab logout` — clear your saved session on this machine.
53
55
  - `hacklab config <key> <value>` — set config (`cursor-api-key`, `cursor-email`).
54
56
  - `hacklab brag [path]` — sync a `.hacklab/project.yaml` to your profile.
55
57
  - `hacklab org` — edit the profile of an organization you've claimed. Pick a
@@ -59,33 +61,89 @@ scan local AI usage → see your rank → pick a username → sign in with GitHu
59
61
 
60
62
  ## Choosing a backend
61
63
 
62
- By default the CLI talks to **production** (`https://hacklab.so`). Pick another
63
- with `--env` (works on any command):
64
+ Every command resolves which backend to talk to by the same precedence:
65
+
66
+ 1. **`--env <name>`** on the command line (highest);
67
+ 2. **`HACKLAB_APP_URL`** set in the environment;
68
+ 3. **the backend you logged into** (saved in the session file);
69
+ 4. **production** (`https://hacklab.so`) by default.
64
70
 
65
71
  ```bash
66
72
  hacklab join --env staging # https://staging.hacklab.so
67
73
  hacklab join --env development # http://localhost:3000
74
+ hacklab drop "hi" --env staging # the override applies to every command, not just login
68
75
  ```
69
76
 
70
- `--env` maps to a fixed URL; `HACKLAB_APP_URL` overrides it for a custom target.
77
+ `--env` accepts any unambiguous abbreviation (`dev`, `prod`, `stag`) and the
78
+ aliases `local`/`localhost` for development. Under the hood it just sets
79
+ `HACKLAB_APP_URL` for that run, so an explicit `--env` overrides an inherited
80
+ `HACKLAB_APP_URL`.
81
+
82
+ Note that **sessions are per-backend**: your token is only valid on the backend
83
+ you logged into. Overriding `--env` to a backend you haven't authenticated
84
+ against will 401 until you `hacklab login --env <that>`. `hacklab whoami` shows
85
+ the effective backend and warns when it differs from where you logged in.
71
86
 
72
87
  ## Environment
73
88
 
74
- - `HACKLAB_APP_URL` — explicit app base URL; overrides `--env`. Defaults to
75
- production when unset.
89
+ - `HACKLAB_APP_URL` — explicit app base URL (read from the real environment; the
90
+ CLI does not load any `.env` file). A command-line `--env` sets this for the
91
+ run, so `--env` wins over an inherited value. See **Choosing a backend** for
92
+ the full precedence.
76
93
  - `HACKLAB_SESSION_PATH` — custom path for the session file
77
94
  (default `~/.hacklab/session.json`).
95
+ - `HACKLAB_CALLBACK_PORT` — pin the local OAuth callback port (default: a random
96
+ free port). Lets you forward a fixed port for the browser-callback flow on a
97
+ remote host.
98
+
99
+ ## Signing in
100
+
101
+ `hacklab login` and `hacklab join` use **GitHub's device flow** by default,
102
+ everywhere (desktop or headless): they print a short code and
103
+ `github.com/login/device`. Open that on any device where you're signed into
104
+ GitHub, enter the code, and authorize Hacklab — the terminal logs into the
105
+ linked Hacklab account. No local server, no port forwarding, no localhost/app
106
+ URL. (No Hacklab account linked to that GitHub yet? `hacklab join` registers
107
+ one; `hacklab login` tells you to run `join`.)
108
+
109
+ ### `--browser`: the local browser flow
110
+
111
+ Pass `--browser` to `login`/`join` to use the OAuth-redirect flow instead — it
112
+ opens your browser and catches the redirect on a local callback server. Handy on
113
+ a desktop where auto-opening a browser beats typing a code. On a remote host
114
+ you'd forward the callback port (pin it with `HACKLAB_CALLBACK_PORT` so the
115
+ forward is stable):
116
+
117
+ ```bash
118
+ # on the remote host:
119
+ HACKLAB_CALLBACK_PORT=8765 hacklab login --browser
120
+ # from your laptop, forward that port, then open the printed URL:
121
+ ssh -L 8765:localhost:8765 <this-host>
122
+ ```
123
+
124
+ The device flow also falls back to `--browser` automatically if a backend
125
+ doesn't expose the device routes yet (e.g. not-yet-deployed staging).
78
126
 
79
127
  ## Local development
80
128
 
81
- From the repo root, run the CLI from source against a local app:
129
+ From the repo root, `pnpm cli <command>` runs the CLI from source (tsx, no
130
+ build) and defaults to the **development** backend, so local work needs no
131
+ flags:
132
+
133
+ ```bash
134
+ pnpm cli chat # runs against http://localhost:3000
135
+ pnpm cli join --env staging # override the dev default per-command
136
+ ```
137
+
138
+ The dev default lives only in the root `cli` script (`--env development`), so
139
+ the published npm package still defaults to production. Use a throwaway session
140
+ to avoid touching a real account:
82
141
 
83
142
  ```bash
84
- HACKLAB_SESSION_PATH=/tmp/hl-test.json \
85
- pnpm --filter hacklab dev join --env development
143
+ HACKLAB_SESSION_PATH=/tmp/hl-test.json pnpm cli join
86
144
  ```
87
145
 
88
- `pnpm --filter hacklab dev <command>` runs `src/index.ts` via tsx (no build).
146
+ Under the hood `pnpm cli` is `pnpm --filter hacklab dev` (= `tsx src/index.ts`).
89
147
  `pnpm --filter hacklab build` compiles to `dist/`.
90
148
 
91
149
  To reset a test account so its GitHub identity can join fresh:
@@ -1,5 +1,7 @@
1
1
  import { type Session } from '../session.js';
2
2
  export declare function baseUrl(session?: Session | null): string;
3
+ export declare function datePrefix(when: Date, now: Date): string;
4
+ export declare function formatTimestamp(when: string | Date, now?: Date): string;
3
5
  type RenderableMessage = {
4
6
  createdAt: string;
5
7
  senderHandle: string;
@@ -7,8 +9,8 @@ type RenderableMessage = {
7
9
  senderLevel?: number | null;
8
10
  };
9
11
  export declare function stripControl(s: string): string;
10
- export declare function formatLine(m: RenderableMessage): string;
11
- export declare function formatPendingLine(handle: string, content: string, tag: string, at?: string): string;
12
+ export declare function formatLine(m: RenderableMessage, now?: Date): string;
13
+ export declare function formatPendingLine(handle: string, content: string, tag: string, at?: string, now?: Date): string;
12
14
  export declare function chat(args: string[]): Promise<void>;
13
15
  export {};
14
16
  //# sourceMappingURL=chat.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAkDpE,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAGxD;AA+BD,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,CAAA;AAKD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,UAAU,CAAC,CAAC,EAAE,iBAAiB,GAAG,MAAM,CAQvD;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,EAAE,GAAE,MAAiC,GACpC,MAAM,CAGR;AAoZD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAyBxC"}
1
+ {"version":3,"file":"chat.d.ts","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"AACA,OAAO,EAA0B,KAAK,OAAO,EAAE,MAAM,eAAe,CAAA;AAkDpE,wBAAgB,OAAO,CAAC,OAAO,CAAC,EAAE,OAAO,GAAG,IAAI,GAAG,MAAM,CAGxD;AAqED,wBAAgB,UAAU,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,GAAG,MAAM,CASxD;AAKD,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GAAG,IAAI,EACnB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAKR;AAED,KAAK,iBAAiB,GAAG;IACvB,SAAS,EAAE,MAAM,CAAA;IACjB,YAAY,EAAE,MAAM,CAAA;IACpB,OAAO,EAAE,MAAM,CAAA;IACf,WAAW,CAAC,EAAE,MAAM,GAAG,IAAI,CAAA;CAC5B,CAAA;AAKD,wBAAgB,YAAY,CAAC,CAAC,EAAE,MAAM,GAAG,MAAM,CAG9C;AAED,wBAAgB,UAAU,CACxB,CAAC,EAAE,iBAAiB,EACpB,GAAG,GAAE,IAAiB,GACrB,MAAM,CAQR;AAQD,wBAAgB,iBAAiB,CAC/B,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,EACf,GAAG,EAAE,MAAM,EACX,EAAE,GAAE,MAAiC,EACrC,GAAG,GAAE,IAAiB,GACrB,MAAM,CAIR;AA0bD,wBAAsB,IAAI,CAAC,IAAI,EAAE,MAAM,EAAE,iBAyBxC"}
@@ -37,11 +37,67 @@ function flagValue(args, name) {
37
37
  const eq = args.find((a) => a.startsWith(`${name}=`));
38
38
  return eq ? eq.slice(name.length + 1) : undefined;
39
39
  }
40
- function clock(iso) {
41
- const d = new Date(iso);
42
- const hh = String(d.getHours()).padStart(2, '0');
43
- const mm = String(d.getMinutes()).padStart(2, '0');
44
- return `${hh}:${mm}`;
40
+ // Universal, locale-independent labels — we never want American month/day
41
+ // ordering or localized names sneaking in. Lowercase to match the terminal's
42
+ // quiet aesthetic. Indexed by Date.getDay() (0 = Sunday) / Date.getMonth().
43
+ const WEEKDAYS = ['sun', 'mon', 'tue', 'wed', 'thu', 'fri', 'sat'];
44
+ const MONTHS = [
45
+ 'jan',
46
+ 'feb',
47
+ 'mar',
48
+ 'apr',
49
+ 'may',
50
+ 'jun',
51
+ 'jul',
52
+ 'aug',
53
+ 'sep',
54
+ 'oct',
55
+ 'nov',
56
+ 'dec',
57
+ ];
58
+ function pad2(n) {
59
+ return String(n).padStart(2, '0');
60
+ }
61
+ // A calendar-day index in *local* time: the count of days since the epoch using
62
+ // the date's local Y/M/D. Computing it via Date.UTC on the local components
63
+ // strips the time-of-day entirely, so subtracting two of these gives an exact
64
+ // whole-day difference that is immune to DST (a local "day" can be 23 or 25
65
+ // hours, but we never look at hours) and to leap years (Date.UTC normalizes
66
+ // real calendar dates). This is the basis for "today vs yesterday vs N days
67
+ // ago" — never a raw millisecond/24h subtraction.
68
+ function localDayNumber(d) {
69
+ return Math.floor(Date.UTC(d.getFullYear(), d.getMonth(), d.getDate()) / 86_400_000);
70
+ }
71
+ // The date prefix shown before a message's HH:MM, by how many *local calendar
72
+ // days* ago it was sent (relative to `now`):
73
+ // - today (or future/clock-skew): no prefix
74
+ // - 1 day ago: "yest"
75
+ // - 2–6 days ago: short weekday ("mon".."sun"). This range can never collide
76
+ // with today's weekday or with yesterday, so the day name is unambiguous.
77
+ // - 7+ days ago: a date. "the same weekday last week" is 7 days ago, so it
78
+ // lands here (a date, not a weekday) — exactly the ambiguity we want to
79
+ // avoid. This-year dates render "mmm-dd"; other years render "yyyy-mm-dd".
80
+ export function datePrefix(when, now) {
81
+ const diff = localDayNumber(now) - localDayNumber(when);
82
+ if (diff <= 0)
83
+ return '';
84
+ if (diff === 1)
85
+ return 'yest';
86
+ if (diff <= 6)
87
+ return WEEKDAYS[when.getDay()];
88
+ if (when.getFullYear() === now.getFullYear()) {
89
+ return `${MONTHS[when.getMonth()]}-${pad2(when.getDate())}`;
90
+ }
91
+ return `${when.getFullYear()}-${pad2(when.getMonth() + 1)}-${pad2(when.getDate())}`;
92
+ }
93
+ // A message timestamp: 24h local HH:MM, with a relative date prefix once the
94
+ // message is no longer from today. `now` is injectable so the live view can
95
+ // re-derive every prefix when the local day rolls over.
96
+ export function formatTimestamp(when, now = new Date()) {
97
+ const d = typeof when === 'string' ? new Date(when) : when;
98
+ const time = `${pad2(d.getHours())}:${pad2(d.getMinutes())}`;
99
+ const prefix = datePrefix(d, now);
100
+ return prefix ? `${prefix} ${time}` : time;
45
101
  }
46
102
  // Strip C0 control characters + DEL from untrusted message content before
47
103
  // printing it to the terminal. Without this, a hacker could embed ANSI escape
@@ -50,14 +106,14 @@ export function stripControl(s) {
50
106
  // biome-ignore lint/suspicious/noControlCharactersInRegex: intentionally matching control chars to remove them
51
107
  return s.replace(/[\x00-\x1f\x7f]/g, '');
52
108
  }
53
- export function formatLine(m) {
109
+ export function formatLine(m, now = new Date()) {
54
110
  const lvl = m.senderLevel != null ? dim(` lv${m.senderLevel}`) : '';
55
111
  // Colour the author's handle in their belt/rank colour (see rankColor).
56
112
  // Strip control chars from the handle too, not just content: it's untrusted
57
113
  // (user-registered) and gets wrapped in ANSI colour codes before printing, so
58
114
  // an embedded escape sequence would otherwise hijack the viewer's terminal.
59
115
  const handle = rankColor(m.senderLevel, stripControl(m.senderHandle));
60
- return `${dim(clock(m.createdAt))} ${handle}${lvl}: ${stripControl(m.content)}`;
116
+ return `${dim(formatTimestamp(m.createdAt, now))} ${handle}${lvl}: ${stripControl(m.content)}`;
61
117
  }
62
118
  // Optimistic "sending" line: the just-typed message rendered faded with a
63
119
  // status tag, shown the instant you hit enter and rewritten in place once the
@@ -65,8 +121,9 @@ export function formatLine(m) {
65
121
  // our own rank level locally, so the confirmed line from the server is what
66
122
  // applies the proper belt colour. `tag` is passed pre-styled by the caller
67
123
  // (dim for sending, red for failed).
68
- export function formatPendingLine(handle, content, tag, at = new Date().toISOString()) {
69
- const base = `${clock(at)} ${stripControl(handle)}: ${stripControl(content)}`;
124
+ export function formatPendingLine(handle, content, tag, at = new Date().toISOString(), now = new Date()) {
125
+ const ts = formatTimestamp(at, now);
126
+ const base = `${ts} ${stripControl(handle)}: ${stripControl(content)}`;
70
127
  return `${dim(base)} ${tag}`;
71
128
  }
72
129
  // API returns newest-first; print oldest-first like a chat log.
@@ -252,70 +309,107 @@ async function chatLive() {
252
309
  // We learn our own handle from the first confirmed send (or the session) and
253
310
  // use it to match incoming messages back to our optimistic placeholders.
254
311
  let myHandle = session.handle;
255
- const pending = [];
312
+ // The local calendar day we last rendered against. When it changes (midnight,
313
+ // or waking from sleep across midnight), every message's relative date prefix
314
+ // may be stale, so we repaint the whole transcript.
315
+ let dayKey = localDayNumber(new Date());
316
+ const log = [];
256
317
  const rl = readline.createInterface({
257
318
  input: process.stdin,
258
319
  output: process.stdout,
259
320
  prompt: dim('> '),
260
321
  });
261
- function shiftPending() {
262
- for (const p of pending)
263
- p.rowsUp += 1;
264
- }
265
- // Print a line above the prompt without clobbering whatever the user is
266
- // mid-typing: clear the current line, write the message, then redraw the
267
- // prompt + the in-progress input buffer. Inserting a line pushes every
268
- // pending placeholder one row up.
269
- function printAbove(text) {
270
- shiftPending();
322
+ function renderEntry(e, now) {
323
+ if (e.kind === 'msg')
324
+ return formatLine(e.m, now);
325
+ const tag = e.failed ? red(`[failed: ${e.failed}]`) : dim('[sending]');
326
+ return formatPendingLine(myHandle ?? 'you', e.content, tag, e.at, now);
327
+ }
328
+ // How many terminal rows above the prompt an entry sits (1 = directly above).
329
+ // Derived from its index in `log`: the last entry is one row up, and every
330
+ // later line pushes earlier ones further up. Assumes one row per entry, as the
331
+ // rest of this view does.
332
+ function rowsUpOf(e) {
333
+ const i = log.indexOf(e);
334
+ return i === -1 ? 0 : log.length - i;
335
+ }
336
+ // Append a new entry as a line above the prompt without clobbering whatever
337
+ // the user is mid-typing: clear the prompt line, write the entry, then redraw
338
+ // the prompt + the in-progress input buffer.
339
+ function appendEntry(e) {
340
+ log.push(e);
271
341
  const inProgress = rl.line;
272
342
  readline.cursorTo(process.stdout, 0);
273
343
  readline.clearLine(process.stdout, 0);
274
- process.stdout.write(`${text}\n`);
344
+ process.stdout.write(`${renderEntry(e, new Date())}\n`);
275
345
  process.stdout.write(rl.getPrompt() + inProgress);
276
346
  }
277
- // Rewrite the line `rowsUp` rows above the prompt in place, then restore the
278
- // prompt + in-progress input. Used to swap a faded placeholder for the
279
- // confirmed (or failed) message without printing a second line.
280
- function rewriteAbove(rowsUp, text) {
347
+ // Rewrite an entry's existing line in place (it must still be on screen), then
348
+ // restore the prompt + in-progress input. Used to swap an optimistic
349
+ // placeholder for the confirmed (or failed) message with no second line.
350
+ function rewriteEntry(e) {
351
+ const rowsUp = rowsUpOf(e);
352
+ if (rowsUp < 1)
353
+ return;
281
354
  const inProgress = rl.line;
282
355
  readline.moveCursor(process.stdout, 0, -rowsUp);
283
356
  readline.cursorTo(process.stdout, 0);
284
357
  readline.clearLine(process.stdout, 0);
285
- process.stdout.write(text);
358
+ process.stdout.write(renderEntry(e, new Date()));
286
359
  readline.cursorTo(process.stdout, 0);
287
360
  readline.moveCursor(process.stdout, 0, rowsUp);
288
361
  readline.clearLine(process.stdout, 0);
289
362
  process.stdout.write(rl.getPrompt() + inProgress);
290
363
  }
364
+ // Repaint the entire transcript with fresh date prefixes. Clears the screen
365
+ // *and* scrollback (\x1b[3J) so the rolled-over timestamps don't leave a stale
366
+ // duplicate above. Rare — at most once per local-day change.
367
+ function repaint() {
368
+ const now = new Date();
369
+ const inProgress = rl.line;
370
+ process.stdout.write('\x1b[3J\x1b[2J\x1b[H');
371
+ for (const e of log)
372
+ process.stdout.write(`${renderEntry(e, now)}\n`);
373
+ process.stdout.write(rl.getPrompt() + inProgress);
374
+ }
291
375
  // Render a confirmed message exactly once. If it matches one of our pending
292
- // optimistic sends (same author + content), swap that faded placeholder in
293
- // place; otherwise print it as a fresh line. Dedupes whether the message
294
- // arrives via the POST response or the poll, whichever wins the race.
376
+ // optimistic sends (same author + content), swap that placeholder in place;
377
+ // otherwise append it. Dedupes whether the message arrives via the POST
378
+ // response or the poll, whichever wins the race.
295
379
  function commitMessage(m) {
296
380
  if (seen.has(m.id))
297
381
  return;
298
382
  seen.add(m.id);
299
- const idx = pending.findIndex((p) => p.content === m.content &&
383
+ const idx = log.findIndex((e) => e.kind === 'pending' &&
384
+ e.content === m.content &&
300
385
  (myHandle ? m.senderHandle === myHandle : true));
301
386
  if (idx !== -1) {
302
- const [p] = pending.splice(idx, 1);
303
- rewriteAbove(p.rowsUp, formatLine(m));
387
+ log[idx] = { kind: 'msg', m };
388
+ rewriteEntry(log[idx]);
304
389
  }
305
390
  else {
306
- printAbove(formatLine(m));
391
+ appendEntry({ kind: 'msg', m });
307
392
  }
308
393
  }
309
- // A send failed: flip its placeholder to a red [failed] tag instead of
310
- // leaving it stuck on [sending]. No-op if the poll already confirmed it.
394
+ // A send failed: flip its placeholder to a red [failed] tag instead of leaving
395
+ // it stuck on [sending]. No-op if the poll already confirmed it (the
396
+ // placeholder object is no longer in `log`).
311
397
  function failPending(placeholder, reason) {
312
- const idx = pending.indexOf(placeholder);
313
- if (idx === -1)
398
+ if (placeholder.kind !== 'pending' || placeholder.failed)
399
+ return;
400
+ if (!log.includes(placeholder))
314
401
  return;
315
- pending.splice(idx, 1);
316
- rewriteAbove(placeholder.rowsUp, formatPendingLine(myHandle ?? 'you', placeholder.content, red(`[failed: ${reason}]`)));
402
+ placeholder.failed = reason;
403
+ rewriteEntry(placeholder);
317
404
  }
318
405
  async function poll() {
406
+ // Day-rollover check runs every tick, independent of the network, so the
407
+ // relative prefixes advance even while the fetch is failing.
408
+ const k = localDayNumber(new Date());
409
+ if (started && k !== dayKey) {
410
+ dayKey = k;
411
+ repaint();
412
+ }
319
413
  try {
320
414
  const res = await fetch(`${base}${CHANNEL_BASE}/tail`);
321
415
  if (!res.ok)
@@ -323,9 +417,12 @@ async function chatLive() {
323
417
  const data = (await res.json());
324
418
  const ordered = [...data.messages].reverse();
325
419
  if (!started) {
420
+ const now = new Date();
326
421
  for (const m of ordered) {
327
422
  seen.add(m.id);
328
- console.log(formatLine(m));
423
+ const e = { kind: 'msg', m };
424
+ log.push(e);
425
+ console.log(renderEntry(e, now));
329
426
  }
330
427
  started = true;
331
428
  rl.prompt();
@@ -356,11 +453,16 @@ async function chatLive() {
356
453
  readline.moveCursor(process.stdout, 0, -echoRows);
357
454
  readline.cursorTo(process.stdout, 0);
358
455
  readline.clearScreenDown(process.stdout);
359
- // Faded placeholder, one row above the freshly drawn prompt.
360
- shiftPending();
361
- process.stdout.write(`${formatPendingLine(myHandle ?? 'you', content, dim('[sending]'))}\n`);
362
- const placeholder = { content, rowsUp: 1 };
363
- pending.push(placeholder);
456
+ // Faded placeholder, one row above the freshly drawn prompt. Written inline
457
+ // (not via appendEntry) so we can hand control back with rl.prompt(), which
458
+ // keeps readline's cursor model correct for the next keystroke.
459
+ const placeholder = {
460
+ kind: 'pending',
461
+ content,
462
+ at: new Date().toISOString(),
463
+ };
464
+ log.push(placeholder);
465
+ process.stdout.write(`${renderEntry(placeholder, new Date())}\n`);
364
466
  rl.prompt();
365
467
  try {
366
468
  const res = await fetch(`${base}${CHANNEL_BASE}`, {
@@ -1 +1 @@
1
- {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"chat.js","sourceRoot":"","sources":["../../src/commands/chat.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hacklab",
3
- "version": "0.5.3",
3
+ "version": "0.6.0",
4
4
  "private": false,
5
5
  "publishConfig": {
6
6
  "access": "public"
@@ -10,10 +10,9 @@
10
10
  "node": ">=20"
11
11
  },
12
12
  "bin": {
13
- "hacklab": "./dist/index.js",
14
- "ddd": "./bin/ddd"
13
+ "hacklab": "./dist/index.js"
15
14
  },
16
- "files": ["dist", "bin"],
15
+ "files": ["dist"],
17
16
  "scripts": {
18
17
  "build": "tsc -p tsconfig.json && chmod +x dist/index.js",
19
18
  "dev": "tsx src/index.ts",
package/bin/ddd DELETED
@@ -1,19 +0,0 @@
1
- #!/bin/sh
2
- # Wrapper that invokes the real dd.js entrypoint.
3
- # When used with a noglob alias (alias ddd='noglob ddd'), zsh won't
4
- # expand special characters like ? ! * before they reach Node.
5
- #
6
- # Resolve symlinks so dist/dd.js is found even when this script is invoked
7
- # through a bin symlink (e.g. /opt/homebrew/bin/ddd -> .../hacklab/bin/ddd).
8
- # A plain `dirname "$0"` would point at the symlink's dir, not the package.
9
- src="$0"
10
- while [ -L "$src" ]; do
11
- dir="$(cd -P "$(dirname "$src")" && pwd)"
12
- src="$(readlink "$src")"
13
- case "$src" in
14
- /*) ;;
15
- *) src="$dir/$src" ;;
16
- esac
17
- done
18
- dir="$(cd -P "$(dirname "$src")" && pwd)"
19
- exec node "$dir/../dist/dd.js" "$@"