terminalhire 0.1.1 → 0.2.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.
- package/README.md +39 -12
- package/dist/bin/jpi-dispatch.js +1038 -35
- package/dist/bin/jpi-jobs.js +34 -1
- package/dist/bin/jpi-learn.js +23 -0
- package/dist/bin/jpi-login.js +23 -0
- package/dist/bin/jpi-profile.js +23 -0
- package/dist/bin/jpi-refresh.js +1897 -0
- package/dist/bin/jpi-save.js +674 -0
- package/dist/bin/jpi-spinner.js +352 -0
- package/dist/bin/jpi-sync.js +837 -0
- package/dist/bin/spinner.js +242 -0
- package/dist/src/profile.js +23 -0
- package/install.js +96 -4
- package/package.json +13 -3
package/README.md
CHANGED
|
@@ -22,17 +22,23 @@ The installer prints a full v3.1 disclosure, asks for explicit "yes", then offer
|
|
|
22
22
|
## Uninstall
|
|
23
23
|
|
|
24
24
|
```sh
|
|
25
|
-
node install.js --uninstall
|
|
25
|
+
node $(npm root -g)/terminalhire/install.js --uninstall
|
|
26
26
|
terminalhire logout # clear GitHub token (if connected)
|
|
27
27
|
terminalhire profile --delete # also wipe local profile
|
|
28
|
-
rm -rf ~/.
|
|
28
|
+
rm -rf ~/.terminalhire # wipe everything
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
To disable only the spinner job surface without uninstalling:
|
|
32
|
+
|
|
33
|
+
```sh
|
|
34
|
+
terminalhire spinner --off
|
|
29
35
|
```
|
|
30
36
|
|
|
31
37
|
## Commands
|
|
32
38
|
|
|
33
39
|
```sh
|
|
34
40
|
terminalhire login # sign in with GitHub — enriches profile instantly (recommended)
|
|
35
|
-
terminalhire logout # clear stored GitHub token from ~/.
|
|
41
|
+
terminalhire logout # clear stored GitHub token from ~/.terminalhire/github-token.enc
|
|
36
42
|
|
|
37
43
|
terminalhire jobs # fetch index, match locally, browse ranked roles
|
|
38
44
|
terminalhire jobs --limit 20 # show top 20 results (default: 10)
|
|
@@ -56,7 +62,7 @@ This runs the **GitHub OAuth Device Flow**:
|
|
|
56
62
|
|
|
57
63
|
1. A code like `XXXX-XXXX` and a URL (`https://github.com/login/device`) are displayed.
|
|
58
64
|
2. You open the URL, enter the code, and click "Authorize".
|
|
59
|
-
3. Terminalhire polls until you authorize, then stores the token encrypted at `~/.
|
|
65
|
+
3. Terminalhire polls until you authorize, then stores the token encrypted at `~/.terminalhire/github-token.enc`.
|
|
60
66
|
4. Your public GitHub profile is fetched, processed, and merged into your local profile.
|
|
61
67
|
|
|
62
68
|
### What GitHub enriches
|
|
@@ -79,7 +85,7 @@ Scope requested: **`read:user`** — public profile + public repos only.
|
|
|
79
85
|
|
|
80
86
|
### Data residency
|
|
81
87
|
|
|
82
|
-
- Token: encrypted at `~/.
|
|
88
|
+
- Token: encrypted at `~/.terminalhire/github-token.enc` (AES-256-GCM, same scheme as local profile).
|
|
83
89
|
- GitHub data stays **on your machine** — it enriches your local profile.
|
|
84
90
|
- GitHub fields cross the wire **only** in a consented `LeadPayload` when you type "yes".
|
|
85
91
|
- GitHub data is **never sent silently**.
|
|
@@ -127,15 +133,36 @@ After `terminalhire jobs` runs and finds matches, the Claude Code status bar sho
|
|
|
127
133
|
✦ N roles match your current work — run: terminalhire jobs
|
|
128
134
|
```
|
|
129
135
|
|
|
130
|
-
The nudge is printed at most once per Claude Code session. It reads only `~/.
|
|
136
|
+
The nudge is printed at most once per Claude Code session. It reads only `~/.terminalhire/index-cache.json` (a matchCount written by the last `terminalhire jobs` run). It makes zero network calls.
|
|
137
|
+
|
|
138
|
+
## Spinner job surface
|
|
139
|
+
|
|
140
|
+
While you work inside Claude Code, terminalhire surfaces your top local job matches directly in the spinner — the ambient status indicator that appears while Claude is thinking.
|
|
141
|
+
|
|
142
|
+
- **Enabled at install.** No additional setup required.
|
|
143
|
+
- **Computed locally.** Match scoring runs on your machine against your encrypted local profile. No network call is made for the spinner display.
|
|
144
|
+
- **Zero egress.** The spinner reads only `~/.terminalhire/index-cache.json` (written by the last `terminalhire jobs` run). Nothing leaves your device.
|
|
145
|
+
- **Reversible.** Disable at any time without uninstalling:
|
|
146
|
+
|
|
147
|
+
```sh
|
|
148
|
+
terminalhire spinner --off
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
Re-enable with:
|
|
152
|
+
|
|
153
|
+
```sh
|
|
154
|
+
terminalhire spinner --on
|
|
155
|
+
```
|
|
156
|
+
|
|
157
|
+
The spinner surface shows a short ranked summary (e.g. `✦ 3 matches — run: terminalhire jobs`). It does not send your profile, fingerprint, or any data to any server.
|
|
131
158
|
|
|
132
159
|
## Architecture (v3.1 hybrid)
|
|
133
160
|
|
|
134
161
|
```
|
|
135
162
|
Server Client (your machine)
|
|
136
163
|
────────────────────────────── ─────────────────────────────────────────
|
|
137
|
-
Broad public pool: ~/.
|
|
138
|
-
Greenhouse + Ashby (ATS) ~/.
|
|
164
|
+
Broad public pool: ~/.terminalhire/profile.enc (AES-256-GCM encrypted)
|
|
165
|
+
Greenhouse + Ashby (ATS) ~/.terminalhire/github-token.enc (AES-256-GCM)
|
|
139
166
|
Himalayas + WWR + HN GET Fingerprint built from profile
|
|
140
167
|
Coastal buyer-lead roles ←─── /api/index (anonymous, no dev data)
|
|
141
168
|
Local match() from @jpi/core
|
|
@@ -168,9 +195,9 @@ GitHub (optional enrichment):
|
|
|
168
195
|
## Local profile encryption
|
|
169
196
|
|
|
170
197
|
- Algorithm: **AES-256-GCM** via Node built-in `crypto` (no external deps).
|
|
171
|
-
- Key: stored at `~/.
|
|
172
|
-
- Profile file: `~/.
|
|
173
|
-
- GitHub token file: `~/.
|
|
198
|
+
- Key: stored at `~/.terminalhire/key` with `0600` permissions. If `keytar` is installed, the OS keychain is preferred and the key file is not written.
|
|
199
|
+
- Profile file: `~/.terminalhire/profile.enc` — JSON blob `{ iv, tag, ciphertext }` (all hex-encoded).
|
|
200
|
+
- GitHub token file: `~/.terminalhire/github-token.enc` — same format, same key.
|
|
174
201
|
|
|
175
202
|
## Lead payload shape
|
|
176
203
|
|
|
@@ -290,5 +317,5 @@ apps/cli/
|
|
|
290
317
|
| Contact email | Stored encrypted locally (pre-filled from GitHub public email) | Included if set and "yes" |
|
|
291
318
|
| GitHub login / profileUrl | Stored in `profile.github` on `terminalhire login` | Included in `approvedFields.github` ONLY on "yes" |
|
|
292
319
|
| GitHub topLanguages | Used locally for tag inference (closed vocab) | Included in `approvedFields.github` ONLY on "yes" |
|
|
293
|
-
| GitHub token | Encrypted at `~/.
|
|
320
|
+
| GitHub token | Encrypted at `~/.terminalhire/github-token.enc` | Never sent |
|
|
294
321
|
| Private repos | Never accessed (scope: read:user) | N/A |
|