@hraness/peopleblade 0.2.1 → 0.3.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.2.1
18
+ bun add --global @hraness/peopleblade@0.3.0
19
19
  peopleblade --version
20
20
  peopleblade init
21
21
  peopleblade stats --json
@@ -37,33 +37,66 @@ authorized devices, `peopleblade cloud revoke DEVICE_ID` for a lost device, and
37
37
  token. The signed-in dashboard provides the lost-device recovery path when no CLI
38
38
  token remains available.
39
39
 
40
- ### Optional Wrench-backed sources
40
+ ### Optional Ghostget-backed sources
41
41
 
42
- The package does not install Wrench, browser automation, KB, native model runtimes,
43
- or provider credentials. Beeper, Google, and WhatsApp live sync commands delegate
44
- through a separately reviewed `wrench` executable on `PATH` (or the absolute
45
- `PEOPLEBLADE_WRENCH_EXECUTABLE` path). PeopleBlade bundles only the pinned Wrench
46
- 0.16.8 client validators needed to fence requests and receipts; it does not bundle
47
- or silently download Wrench's execution runtime.
42
+ The package does not install Ghostget, browser automation, KB, native model runtimes,
43
+ or provider credentials. Beeper, Google, and WhatsApp live sync commands and the
44
+ LinkedIn Contact-info read delegate through a separately reviewed `ghostget`
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
47
+ fence requests and receipts; it does not bundle or silently download Ghostget's
48
+ execution runtime.
48
49
 
49
- PeopleBlade 0.2.1 contains the reviewed Wrench-backed Beeper, Google, and WhatsApp
50
+ `PEOPLEBLADE_WRENCH_EXECUTABLE` remains a compatibility alias for the explicit
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.
53
+
54
+ PeopleBlade 0.3.0 contains the reviewed Ghostget-backed Beeper, Google, and WhatsApp
50
55
  live sync commands. Running them requires the separately installed public
51
- `@hraness/wrench` 0.16.8 package. Beeper support is bounded to account-aware
56
+ `@hraness/ghostget` 0.17.3 package. Beeper support is bounded to account-aware
52
57
  `contacts.list@3` reads, `contacts.search@1`, `messaging.search@2`, and the separate
53
58
  body-free interaction exporter. `contacts.search@1` executes the official Beeper
54
- CLI 0.6.2 executable pinned by Wrench; `contacts.list@3` and `messaging.search@2`
55
- use Wrench's bounded Desktop-loopback read paths. The exporter is macOS arm64 only
59
+ CLI 0.6.2 executable pinned by Ghostget; `contacts.list@3` and `messaging.search@2`
60
+ use Ghostget's bounded Desktop-loopback read paths. The exporter is macOS arm64 only
56
61
  and reports lower-bound interaction counts from complete one-to-one conversations
57
62
  only. See
58
63
  [peopleblade.com/sources](https://peopleblade.com/sources) for the complete provider
59
64
  guide. A database previously synced by PeopleBlade 0.1.1 through Wrench 0.16.7
60
65
  must run `peopleblade beeper rebind --auth beeper-main --confirm --json` once after
61
- installing Wrench 0.16.8. The command appends reviewed metadata for the same source
66
+ installing Ghostget 0.17.3. The command appends reviewed metadata for the same source
62
67
  identity only after both complete account inventories match. Do not force-bind
63
- Wrench unless its authenticated Desktop target changed. PeopleBlade calls no
64
- Beeper interface directly and exposes none of Wrench's Beeper send or action
68
+ Ghostget unless its authenticated Desktop target changed. PeopleBlade calls no
69
+ Beeper interface directly and exposes none of Ghostget's Beeper send or action
65
70
  operations. Archive imports, Apple Contacts, iMessage, notes, identity review,
66
- backups, and optional PeopleBlade cloud commands do not require Wrench.
71
+ backups, and optional PeopleBlade cloud commands do not require Ghostget.
72
+
73
+ ### LinkedIn Contact info through Ghostget
74
+
75
+ ```bash
76
+ peopleblade linkedin contact-info --person-id ID [--account KEY] [--auth ID]
77
+ ```
78
+
79
+ `linkedin contact-info` reads the Contact info panel (email, phone numbers,
80
+ websites, birthday, and connected-since date) of one first-degree LinkedIn
81
+ connection that `linkedin import` already imported from the official LinkedIn
82
+ data export. The command records the read as exact, provider-attributed evidence
83
+ for that person; repeating an identical read changes nothing.
84
+
85
+ The read runs through Ghostget, Wrench's renamed successor, published as the
86
+ `@hraness/ghostget` package. The package does not install Ghostget. The command
87
+ delegates to a separately installed `ghostget` executable on `PATH` (or the
88
+ absolute `PEOPLEBLADE_GHOSTGET_EXECUTABLE` path) and refuses any executable
89
+ that does not report exactly version 0.17.3. It needs a Ghostget path-backed
90
+ auth binding for a signed-in LinkedIn browser profile; the default binding id
91
+ is `linkedin-main`, and `--auth ID` selects another. Beeper, Google, and
92
+ WhatsApp delegate through the same `ghostget` executable.
93
+
94
+ Each command reads one bounded profile. It never lists connections, reads
95
+ messages or feeds, or sends invitations, and it fails without writing anything
96
+ when the profile belongs to the account owner or is not a first-degree
97
+ connection. PeopleBlade bundles only the pinned Ghostget 0.17.3 client
98
+ validators that fence the request and receipt; it does not bundle or download
99
+ Ghostget's execution runtime or browser automation.
67
100
 
68
101
  ## Browse and edit locally
69
102
 
@@ -118,9 +151,9 @@ message text. The optional cloud projection excludes source records, raw archive
118
151
  local paths, provider credentials, note bodies and revisions, and message bodies. Ambiguous identity links
119
152
  remain reviewable instead of being silently merged.
120
153
 
121
- This npm artifact contains only the bundled local CLI, its pinned Wrench client
154
+ This npm artifact contains only the bundled local CLI, its pinned Ghostget client
122
155
  validators and executable bridge, SQLite migrations, and package documentation.
123
- It includes the self-contained loopback workspace, but not the Wrench execution
156
+ It includes the self-contained loopback workspace, but not the Ghostget execution
124
157
  runtime, hosted PeopleBlade web server, billing
125
158
  implementation, operational tooling, tests, or private product documentation.
126
159
 
@@ -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/wrench` 0.16.8 (commit
5
- `b0cf2ecbc1113fcc8ef673a824be475c3d7bbb46`) and message-bundle contract code
4
+ `@hraness/ghostget` 0.17.3 (commit
5
+ `67b53cc1917bb09a48b22042cc988c3afbc0aaf8`) 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.
package/dist/cli.ts CHANGED
@@ -3,10 +3,20 @@
3
3
  import { accessSync, constants, realpathSync } from "node:fs";
4
4
  import { isAbsolute, resolve } from "node:path";
5
5
 
6
- const reviewedWrenchVersion = "0.16.8";
7
- const configured = process.env.PEOPLEBLADE_WRENCH_EXECUTABLE;
6
+ const reviewedGhostgetVersion = "0.17.3";
7
+ const canonicalConfigured = process.env.PEOPLEBLADE_GHOSTGET_EXECUTABLE;
8
+ const legacyConfigured = process.env.PEOPLEBLADE_WRENCH_EXECUTABLE;
9
+ if (
10
+ canonicalConfigured !== undefined
11
+ && legacyConfigured !== undefined
12
+ && canonicalConfigured !== legacyConfigured
13
+ ) {
14
+ console.error("PEOPLEBLADE_GHOSTGET_EXECUTABLE and PEOPLEBLADE_WRENCH_EXECUTABLE must name the same executable when both are set.");
15
+ process.exit(127);
16
+ }
17
+ const configured = canonicalConfigured ?? legacyConfigured;
8
18
  const executable = configured === undefined
9
- ? Bun.which("wrench")
19
+ ? Bun.which("ghostget")
10
20
  : isAbsolute(configured)
11
21
  ? resolve(configured)
12
22
  : null;
@@ -14,8 +24,8 @@ const executable = configured === undefined
14
24
  if (executable === null) {
15
25
  console.error(
16
26
  configured === undefined
17
- ? "PeopleBlade Wrench-backed sources require a separately reviewed `wrench` executable on PATH."
18
- : "PEOPLEBLADE_WRENCH_EXECUTABLE must be an absolute executable path.",
27
+ ? "PeopleBlade Ghostget-backed sources require a separately reviewed `ghostget` executable on PATH."
28
+ : "PEOPLEBLADE_GHOSTGET_EXECUTABLE must be an absolute executable path.",
19
29
  );
20
30
  process.exit(127);
21
31
  }
@@ -25,11 +35,11 @@ try {
25
35
  accessSync(executable, constants.X_OK);
26
36
  canonicalExecutable = realpathSync(executable);
27
37
  } catch {
28
- console.error("The configured PeopleBlade Wrench executable is unavailable or not executable.");
38
+ console.error("The configured PeopleBlade Ghostget executable is unavailable or not executable.");
29
39
  process.exit(127);
30
40
  }
31
41
  if (process.argv[1] !== undefined && canonicalExecutable === realpathSync(process.argv[1])) {
32
- console.error("The PeopleBlade Wrench executable bridge cannot delegate to itself.");
42
+ console.error("The PeopleBlade Ghostget executable bridge cannot delegate to itself.");
33
43
  process.exit(127);
34
44
  }
35
45
 
@@ -54,11 +64,11 @@ if (
54
64
  || versionProbe.signalCode !== undefined
55
65
  || versionProbe.exitedDueToTimeout === true
56
66
  || versionProbe.exitedDueToMaxBuffer === true
57
- || versionProbe.stdout?.toString() !== `${reviewedWrenchVersion}\n`
67
+ || versionProbe.stdout?.toString() !== `${reviewedGhostgetVersion}\n`
58
68
  || versionProbe.stderr?.byteLength !== 0
59
69
  ) {
60
70
  console.error(
61
- `PeopleBlade Wrench-backed sources require the exact reviewed Wrench ${reviewedWrenchVersion} executable.`,
71
+ `PeopleBlade Ghostget-backed sources require the exact reviewed Ghostget ${reviewedGhostgetVersion} executable.`,
62
72
  );
63
73
  process.exit(126);
64
74
  }