@hraness/peopleblade 0.3.6 → 0.4.1
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 +66 -10
- package/THIRD_PARTY_NOTICES.md +61 -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 +14652 -5040
- 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.1
|
|
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.1 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,30 @@ 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 enrichment
|
|
159
|
+
|
|
160
|
+
Hunter customers can reverse-enrich contacts that have a business email but no
|
|
161
|
+
LinkedIn profile, verify stored email deliverability, or find a professional email
|
|
162
|
+
for contacts that have none. Each explicit invocation is capped at 100 contacts,
|
|
163
|
+
skips terminal prior attempts, and prints aggregate outcomes only:
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
HUNTER_API_KEY=... peopleblade hunter reverse-enrich \
|
|
167
|
+
--limit 100 --non-webmail --json
|
|
168
|
+
peopleblade hunter verify --limit 100 --key-file /private/path/hunter-key --json
|
|
169
|
+
peopleblade hunter find-emails --limit 100 --key-file /private/path/hunter-key --json
|
|
170
|
+
```
|
|
171
|
+
|
|
172
|
+
`hunter reverse-enrich` promotes a LinkedIn profile only after exact returned-email,
|
|
173
|
+
compatible-name, safe-URL, and local-ownership checks pass. `hunter verify` records
|
|
174
|
+
the verdict, score, flags, and sources on the existing address without replacing it;
|
|
175
|
+
a Hunter privacy rejection removes the address from identity matching.
|
|
176
|
+
`hunter find-emails` starts from a trusted LinkedIn profile or usable stored name and
|
|
177
|
+
organization, then adds a returned email only when its syntax, name compatibility,
|
|
178
|
+
and local ownership pass. The commands use the caller's Hunter account directly
|
|
179
|
+
and are separate from PeopleBlade cloud credits. `--key-file` requires a private
|
|
180
|
+
regular file owned by the current user; `HUNTER_API_KEY` is the alternative.
|
|
181
|
+
|
|
149
182
|
## Privacy boundary
|
|
150
183
|
|
|
151
184
|
PeopleBlade's provider import paths never retain, search, enrich from, or upload
|
|
@@ -203,3 +236,26 @@ Support state stays local; these commands do not sign up or charge anyone.
|
|
|
203
236
|
The optional email suggestion comes only from local Git configuration. It is
|
|
204
237
|
editable and establishes neither ownership nor permission to subscribe.
|
|
205
238
|
`HRANESS_SUPPORT_EMAIL=off` disables that suggestion.
|
|
239
|
+
|
|
240
|
+
## Prepaid credits
|
|
241
|
+
|
|
242
|
+
Cloud enrichment is metered through prepaid Hraness credits: one credit is one
|
|
243
|
+
cent, and the wallet belongs to the device that paid for it.
|
|
244
|
+
|
|
245
|
+
```bash
|
|
246
|
+
peopleblade credits status --json
|
|
247
|
+
peopleblade credits estimate enrich_contact --units 25 --json
|
|
248
|
+
peopleblade credits topup
|
|
249
|
+
peopleblade credits wait
|
|
250
|
+
```
|
|
251
|
+
|
|
252
|
+
`topup` prints a pay link for packs of $10, $25, $50 and $100; the page shows the
|
|
253
|
+
credits each pack adds. `wait` stores the device token once the first purchase
|
|
254
|
+
is paid. Previews and dispatches forward that token, and a command that needs
|
|
255
|
+
payment exits 1 with `error.code` `credits_required`; with `--json` it first
|
|
256
|
+
prints one `hraness-credits-required-v1` line on stderr carrying the price, the
|
|
257
|
+
link, and the command to rerun. Agents follow `peopleblade credits protocol
|
|
258
|
+
--json`. The CLI never opens the link, enters card details, or sends email on
|
|
259
|
+
its own: `credits email --to <address>` asks the service to send the link, and
|
|
260
|
+
`credits signout` forgets the token. Balances and prices come from the service;
|
|
261
|
+
`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.
|
|
@@ -64,3 +64,62 @@ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
|
64
64
|
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
65
65
|
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
66
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 (
|