@hraness/peopleblade 0.3.5 → 0.4.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 +85 -10
- package/THIRD_PARTY_NOTICES.md +89 -2
- package/dist/cli.ts +1 -1
- package/dist/cloud-sync-client.js +538 -15
- package/dist/migrations/018_exposure.sql +88 -0
- package/dist/migrations/019_exposure_attestations.sql +44 -0
- package/dist/migrations/020_exposure_attestation_sends.sql +46 -0
- package/dist/migrations/021_identity_component_projection.sql +212 -0
- package/dist/peopleblade.js +14568 -5285
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -15,7 +15,7 @@ Installation includes the pinned runtime dependencies Zod 4.4.3 and Effect 3.22.
|
|
|
15
15
|
## Install
|
|
16
16
|
|
|
17
17
|
```bash
|
|
18
|
-
bun add --global @hraness/peopleblade@0.
|
|
18
|
+
bun add --global @hraness/peopleblade@0.4.0
|
|
19
19
|
peopleblade --version
|
|
20
20
|
peopleblade init
|
|
21
21
|
peopleblade stats --json
|
|
@@ -26,8 +26,8 @@ The default database is:
|
|
|
26
26
|
- macOS: `~/Library/Application Support/PeopleBlade/peopleblade.sqlite3`
|
|
27
27
|
- Linux: `${XDG_DATA_HOME:-~/.local/share}/peopleblade/peopleblade.sqlite3`
|
|
28
28
|
|
|
29
|
-
Use `peopleblade --help` to list source, identity-review, notes, research,
|
|
30
|
-
and optional cloud commands. Every schema upgrade of an existing database creates
|
|
29
|
+
Use `peopleblade --help` to list source, identity-review, notes, research,
|
|
30
|
+
exposure-assessment, backup, and optional cloud commands. Every schema upgrade of an existing database creates
|
|
31
31
|
a private backup before applying migrations. `peopleblade backup` creates an
|
|
32
32
|
additional consistent SQLite backup on demand.
|
|
33
33
|
|
|
@@ -43,17 +43,17 @@ The package does not install Ghostget, browser automation, KB, native model runt
|
|
|
43
43
|
or provider credentials. Beeper, Google, and WhatsApp live sync commands and the
|
|
44
44
|
LinkedIn Contact-info read delegate through a separately reviewed `ghostget`
|
|
45
45
|
executable on `PATH` (or the absolute `PEOPLEBLADE_GHOSTGET_EXECUTABLE` path).
|
|
46
|
-
PeopleBlade bundles only the pinned Ghostget 0.
|
|
46
|
+
PeopleBlade bundles only the pinned Ghostget 0.18.13 client validators needed to
|
|
47
47
|
fence requests and receipts; it does not bundle or silently download Ghostget's
|
|
48
48
|
execution runtime.
|
|
49
49
|
|
|
50
50
|
`PEOPLEBLADE_WRENCH_EXECUTABLE` remains a compatibility alias for the explicit
|
|
51
51
|
path. When both variables are set, they must name the same executable. The
|
|
52
|
-
bridge still requires exact Ghostget 0.
|
|
52
|
+
bridge still requires exact Ghostget 0.18.13 before invoking a provider operation.
|
|
53
53
|
|
|
54
|
-
PeopleBlade 0.
|
|
54
|
+
PeopleBlade 0.4.0 contains the reviewed Ghostget-backed Beeper, Google, and WhatsApp
|
|
55
55
|
live sync commands. Running them requires the separately installed public
|
|
56
|
-
`@hraness/ghostget` 0.
|
|
56
|
+
`@hraness/ghostget` 0.18.13 package. Beeper support is bounded to account-aware
|
|
57
57
|
`contacts.list@3` reads, `contacts.search@1`, `messaging.search@2`, and the separate
|
|
58
58
|
body-free interaction exporter. `contacts.search@1` executes the official Beeper
|
|
59
59
|
CLI 0.6.2 executable pinned by Ghostget; `contacts.list@3` and `messaging.search@2`
|
|
@@ -65,13 +65,22 @@ does not join that resource by name or another fuzzy field. See
|
|
|
65
65
|
[peopleblade.com/sources](https://peopleblade.com/sources) for the complete provider
|
|
66
66
|
guide. A database previously synced by PeopleBlade 0.1.1 through Wrench 0.16.7
|
|
67
67
|
must run `peopleblade beeper rebind --auth beeper-main --confirm --json` once after
|
|
68
|
-
installing Ghostget 0.
|
|
68
|
+
installing Ghostget 0.18.13. The command appends reviewed metadata for the same source
|
|
69
69
|
identity only after both complete account inventories match. Do not force-bind
|
|
70
70
|
Ghostget unless its authenticated Desktop target changed. PeopleBlade calls no
|
|
71
71
|
Beeper interface directly and exposes none of Ghostget's Beeper send or action
|
|
72
72
|
operations. Archive imports, Apple Contacts, iMessage, notes, identity review,
|
|
73
73
|
backups, and optional PeopleBlade cloud commands do not require Ghostget.
|
|
74
74
|
|
|
75
|
+
One bounded send path exists outside the Beeper surface: `exposure attest-send`
|
|
76
|
+
delivers a signed exposure-attestation packet through Ghostget 0.18.13's
|
|
77
|
+
messaging-automation host as a single attachment to one enrolled iMessage or
|
|
78
|
+
WhatsApp conversation. It requires `--confirm`, an owner-allowed
|
|
79
|
+
`messaging.automation.send.attachment` operation in Ghostget, and exactly one
|
|
80
|
+
matching conversation for the recipient's stored identifiers; it journals the
|
|
81
|
+
delivery before dispatch and never retries an uncertain send. It exposes no
|
|
82
|
+
general messaging operations.
|
|
83
|
+
|
|
75
84
|
### LinkedIn Contact info through Ghostget
|
|
76
85
|
|
|
77
86
|
```bash
|
|
@@ -88,7 +97,7 @@ The read runs through Ghostget, Wrench's renamed successor, published as the
|
|
|
88
97
|
`@hraness/ghostget` package. The package does not install Ghostget. The command
|
|
89
98
|
delegates to a separately installed `ghostget` executable on `PATH` (or the
|
|
90
99
|
absolute `PEOPLEBLADE_GHOSTGET_EXECUTABLE` path) and refuses any executable
|
|
91
|
-
that does not report exactly version 0.
|
|
100
|
+
that does not report exactly version 0.18.13. It needs a Ghostget path-backed
|
|
92
101
|
auth binding for a signed-in LinkedIn browser profile; the default binding id
|
|
93
102
|
is `linkedin-main`, and `--auth ID` selects another. Beeper, Google, and
|
|
94
103
|
WhatsApp delegate through the same `ghostget` executable.
|
|
@@ -96,7 +105,7 @@ WhatsApp delegate through the same `ghostget` executable.
|
|
|
96
105
|
Each command reads one bounded profile. It never lists connections, reads
|
|
97
106
|
messages or feeds, or sends invitations, and it fails without writing anything
|
|
98
107
|
when the profile belongs to the account owner or is not a first-degree
|
|
99
|
-
connection. PeopleBlade bundles only the pinned Ghostget 0.
|
|
108
|
+
connection. PeopleBlade bundles only the pinned Ghostget 0.18.13 client
|
|
100
109
|
validators that fence the request and receipt; it does not bundle or download
|
|
101
110
|
Ghostget's execution runtime or browser automation.
|
|
102
111
|
|
|
@@ -146,6 +155,21 @@ The envelope binds this database and its current identity evidence. The strict
|
|
|
146
155
|
legacy three-field input remains supported. JSON-mode errors are one structured
|
|
147
156
|
`peopleblade.error.v1` object on stderr; successful results stay on stdout.
|
|
148
157
|
|
|
158
|
+
### Optional Hunter reverse enrichment
|
|
159
|
+
|
|
160
|
+
Hunter customers can reverse-enrich contacts that have a business email but no
|
|
161
|
+
LinkedIn profile. Each explicit invocation is capped at 100 contacts, skips terminal
|
|
162
|
+
prior attempts, and prints aggregate outcomes only:
|
|
163
|
+
|
|
164
|
+
```bash
|
|
165
|
+
HUNTER_API_KEY=... peopleblade hunter reverse-enrich \
|
|
166
|
+
--limit 100 --non-webmail --json
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
The command promotes a LinkedIn profile only after exact returned-email,
|
|
170
|
+
compatible-name, safe-URL, and local-ownership checks pass. It uses the caller's
|
|
171
|
+
Hunter account directly and is separate from PeopleBlade cloud credits.
|
|
172
|
+
|
|
149
173
|
## Privacy boundary
|
|
150
174
|
|
|
151
175
|
PeopleBlade's provider import paths never retain, search, enrich from, or upload
|
|
@@ -175,3 +199,54 @@ product boundaries.
|
|
|
175
199
|
The public PeopleBlade CLI package is available under the MIT License. This
|
|
176
200
|
license applies to the npm package, not to PeopleBlade's private repository or
|
|
177
201
|
hosted service.
|
|
202
|
+
|
|
203
|
+
## Optional support and updates
|
|
204
|
+
|
|
205
|
+
`peopleblade support` shows optional ways to support PeopleBlade and receive product updates.
|
|
206
|
+
The person reviews current options and confirms any payment in their browser.
|
|
207
|
+
These options do not restrict the tool's features.
|
|
208
|
+
|
|
209
|
+
Agents can inspect `peopleblade support protocol --json` without claiming an
|
|
210
|
+
invitation. After completed useful CLI work, stderr may contain a compact
|
|
211
|
+
discovery notice; stdout keeps the requested data format. The default, including
|
|
212
|
+
a pseudo-terminal, is agent-oriented discovery. `HRANESS_SUPPORT_AUDIENCE=human`
|
|
213
|
+
selects a direct invitation in an interactive terminal; `agent` selects discovery
|
|
214
|
+
and `off` suppresses incidental notices and due offers. CI and child tools stay
|
|
215
|
+
quiet. Programmatic entrypoints do not emit incidental notices.
|
|
216
|
+
|
|
217
|
+
At a human-facing task closeout, use `support offer --json` once and follow the
|
|
218
|
+
returned protocol. A discovery notice does not count as a shown invitation.
|
|
219
|
+
Acknowledge `shown <id>` only after persistent human-facing output. If the host
|
|
220
|
+
can only retain the final answer and cannot call tools afterward, include the
|
|
221
|
+
invitation there without acknowledging it. That offer expires after ten minutes;
|
|
222
|
+
the weekly cooldown begins only after acknowledged output.
|
|
223
|
+
|
|
224
|
+
`peopleblade support dismiss` opts out across participating Hraness tools on this
|
|
225
|
+
machine; `snooze` pauses invitations for thirty days and `enable` restores them.
|
|
226
|
+
Support state stays local; these commands do not sign up or charge anyone.
|
|
227
|
+
The optional email suggestion comes only from local Git configuration. It is
|
|
228
|
+
editable and establishes neither ownership nor permission to subscribe.
|
|
229
|
+
`HRANESS_SUPPORT_EMAIL=off` disables that suggestion.
|
|
230
|
+
|
|
231
|
+
## Prepaid credits
|
|
232
|
+
|
|
233
|
+
Cloud enrichment is metered through prepaid Hraness credits: one credit is one
|
|
234
|
+
cent, and the wallet belongs to the device that paid for it.
|
|
235
|
+
|
|
236
|
+
```bash
|
|
237
|
+
peopleblade credits status --json
|
|
238
|
+
peopleblade credits estimate enrich_contact --units 25 --json
|
|
239
|
+
peopleblade credits topup
|
|
240
|
+
peopleblade credits wait
|
|
241
|
+
```
|
|
242
|
+
|
|
243
|
+
`topup` prints a pay link for packs of $10, $25, $50 and $100; the page shows the
|
|
244
|
+
credits each pack adds. `wait` stores the device token once the first purchase
|
|
245
|
+
is paid. Previews and dispatches forward that token, and a command that needs
|
|
246
|
+
payment exits 1 with `error.code` `credits_required`; with `--json` it first
|
|
247
|
+
prints one `hraness-credits-required-v1` line on stderr carrying the price, the
|
|
248
|
+
link, and the command to rerun. Agents follow `peopleblade credits protocol
|
|
249
|
+
--json`. The CLI never opens the link, enters card details, or sends email on
|
|
250
|
+
its own: `credits email --to <address>` asks the service to send the link, and
|
|
251
|
+
`credits signout` forgets the token. Balances and prices come from the service;
|
|
252
|
+
`estimate` reports them before a batch is previewed.
|
package/THIRD_PARTY_NOTICES.md
CHANGED
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
# Third-party notices
|
|
2
2
|
|
|
3
3
|
The PeopleBlade CLI bundle includes reviewed client-boundary code from
|
|
4
|
-
`@hraness/ghostget` 0.
|
|
5
|
-
`
|
|
4
|
+
`@hraness/ghostget` 0.18.13 (commit
|
|
5
|
+
`0ab5942fbe5e5a4cf3e9b86a4572cb2cab8ca0c9`) and message-bundle contract code
|
|
6
6
|
from `@hraness/message-like-me` 0.7.0. Those portions are provided under the
|
|
7
7
|
following license. The PeopleBlade CLI package has its own MIT grant in
|
|
8
8
|
`LICENSE`; this notice preserves the attribution for the bundled portions.
|
|
@@ -36,3 +36,90 @@ Its reviewed source identity and file hashes are recorded in the source reposito
|
|
|
36
36
|
`styles/vendor/hraness-paper/provenance.json`. The theme is copyright (c) 2026 Hraness
|
|
37
37
|
and distributed under the MIT license reproduced in this package’s `LICENSE`.
|
|
38
38
|
It contains no fonts, scripts, or runtime dependencies.
|
|
39
|
+
|
|
40
|
+
## Hraness Support Foundation 0.4.0
|
|
41
|
+
|
|
42
|
+
The CLI includes the shared optional-support protocol from commit
|
|
43
|
+
`b32c1c81bb2444f50509ed54388758ecfab1f1c0` of
|
|
44
|
+
https://github.com/hraness/support-foundation.
|
|
45
|
+
|
|
46
|
+
MIT License
|
|
47
|
+
|
|
48
|
+
Copyright (c) 2026 Hraness
|
|
49
|
+
|
|
50
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
51
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
52
|
+
in the Software without restriction, including without limitation the rights
|
|
53
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
54
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
55
|
+
furnished to do so, subject to the following conditions:
|
|
56
|
+
|
|
57
|
+
The above copyright notice and this permission notice shall be included in all
|
|
58
|
+
copies or substantial portions of the Software.
|
|
59
|
+
|
|
60
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
61
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
62
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
63
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
64
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
65
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
66
|
+
SOFTWARE.
|
|
67
|
+
|
|
68
|
+
## Hraness Oh 0.2.0
|
|
69
|
+
|
|
70
|
+
The CLI includes the shared RFC 8785 canonical JSON implementation that backs
|
|
71
|
+
every PeopleBlade digest contract from commit `89fb133` of
|
|
72
|
+
https://github.com/hraness/oh. The knowledge-graph store, sync engine, and CLI
|
|
73
|
+
entrypoint are not bundled.
|
|
74
|
+
|
|
75
|
+
MIT License
|
|
76
|
+
|
|
77
|
+
Copyright (c) 2026 Hraness contributors
|
|
78
|
+
|
|
79
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
80
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
81
|
+
in the Software without restriction, including without limitation the rights
|
|
82
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
83
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
84
|
+
furnished to do so, subject to the following conditions:
|
|
85
|
+
|
|
86
|
+
The above copyright notice and this permission notice shall be included in all
|
|
87
|
+
copies or substantial portions of the Software.
|
|
88
|
+
|
|
89
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
90
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
91
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
92
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
93
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
94
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
95
|
+
SOFTWARE.
|
|
96
|
+
|
|
97
|
+
## Hraness Credits Foundation 0.1.1
|
|
98
|
+
|
|
99
|
+
The CLI includes the shared prepaid-credits protocol, its `credits` commands,
|
|
100
|
+
and the credits-required handoff from commit
|
|
101
|
+
`19b7f04b7bc2f829f8daed0f92ecf604aa6d6142` of
|
|
102
|
+
https://github.com/hraness/credits-foundation. The service client for product
|
|
103
|
+
backends is not bundled.
|
|
104
|
+
|
|
105
|
+
MIT License
|
|
106
|
+
|
|
107
|
+
Copyright (c) 2026 Hraness
|
|
108
|
+
|
|
109
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
110
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
111
|
+
in the Software without restriction, including without limitation the rights
|
|
112
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
113
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
114
|
+
furnished to do so, subject to the following conditions:
|
|
115
|
+
|
|
116
|
+
The above copyright notice and this permission notice shall be included in all
|
|
117
|
+
copies or substantial portions of the Software.
|
|
118
|
+
|
|
119
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
120
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
121
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
122
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
123
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
124
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
125
|
+
SOFTWARE.
|
package/dist/cli.ts
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
import { accessSync, constants, realpathSync } from "node:fs";
|
|
4
4
|
import { isAbsolute, resolve } from "node:path";
|
|
5
5
|
|
|
6
|
-
const reviewedGhostgetVersion = "0.
|
|
6
|
+
const reviewedGhostgetVersion = "0.18.13";
|
|
7
7
|
const canonicalConfigured = process.env.PEOPLEBLADE_GHOSTGET_EXECUTABLE;
|
|
8
8
|
const legacyConfigured = process.env.PEOPLEBLADE_WRENCH_EXECUTABLE;
|
|
9
9
|
if (
|