@hraness/peopleblade 0.3.6 → 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 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.3.6
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, backup,
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.17.3 client validators needed to
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.17.3 before invoking a provider operation.
52
+ bridge still requires exact Ghostget 0.18.13 before invoking a provider operation.
53
53
 
54
- PeopleBlade 0.3.6 contains the reviewed Ghostget-backed Beeper, Google, and WhatsApp
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.17.3 package. Beeper support is bounded to account-aware
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.17.3. The command appends reviewed metadata for the same source
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.17.3. It needs a Ghostget path-backed
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.17.3 client
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
@@ -203,3 +227,26 @@ Support state stays local; these commands do not sign up or charge anyone.
203
227
  The optional email suggestion comes only from local Git configuration. It is
204
228
  editable and establishes neither ownership nor permission to subscribe.
205
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.
@@ -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.17.3 (commit
5
- `67b53cc1917bb09a48b22042cc988c3afbc0aaf8`) and message-bundle contract code
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.17.3";
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 (