@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 +51 -18
- package/THIRD_PARTY_NOTICES.md +2 -2
- package/dist/cli.ts +19 -9
- package/dist/peopleblade.js +832 -432
- 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.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
|
|
40
|
+
### Optional Ghostget-backed sources
|
|
41
41
|
|
|
42
|
-
The package does not install
|
|
43
|
-
or provider credentials. Beeper, Google, and WhatsApp live sync commands
|
|
44
|
-
through a separately reviewed `
|
|
45
|
-
`
|
|
46
|
-
0.
|
|
47
|
-
or silently download
|
|
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
|
-
|
|
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/
|
|
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
|
|
55
|
-
use
|
|
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
|
|
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
|
-
|
|
64
|
-
Beeper interface directly and exposes none of
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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/
|
|
5
|
-
`
|
|
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
|
|
7
|
-
const
|
|
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("
|
|
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
|
|
18
|
-
: "
|
|
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
|
|
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
|
|
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() !== `${
|
|
67
|
+
|| versionProbe.stdout?.toString() !== `${reviewedGhostgetVersion}\n`
|
|
58
68
|
|| versionProbe.stderr?.byteLength !== 0
|
|
59
69
|
) {
|
|
60
70
|
console.error(
|
|
61
|
-
`PeopleBlade
|
|
71
|
+
`PeopleBlade Ghostget-backed sources require the exact reviewed Ghostget ${reviewedGhostgetVersion} executable.`,
|
|
62
72
|
);
|
|
63
73
|
process.exit(126);
|
|
64
74
|
}
|