@hraness/ghostget 0.17.6 → 0.18.2
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/CHANGELOG.md +301 -0
- package/README.md +16 -9
- package/dist/apple-photos-client.js +2 -1
- package/dist/beeper-client.js +2 -1
- package/dist/client.js +1 -0
- package/dist/imessage-direct-install-2gm3kge7.js +324 -0
- package/dist/index-01eeae9e.js +5 -0
- package/dist/index-2ymnp8xv.js +145 -0
- package/dist/index-en5hycxp.js +175 -0
- package/dist/{index-cytf8d9p.js → index-hfbygww8.js} +1 -1
- package/dist/index-n4szk3nw.js +50 -0
- package/dist/index-yq6maz71.js +1105 -0
- package/dist/index-z1w83f81.js +4 -0
- package/dist/index.js +4 -47
- package/dist/messaging-automation-api.js +21 -0
- package/dist/messaging-automation-j4274hvc.js +609 -0
- package/dist/messaging-native-install-8w1j36ah.js +16 -0
- package/dist/messaging.js +1 -0
- package/dist/omni-client.js +1 -0
- package/dist/whatsapp-automation-runtime-hgh1e9rm.js +845 -0
- package/dist/whatsapp-client.js +1 -0
- package/docs/control-panel.md +147 -0
- package/docs/imessage-direct-provider.md +31 -7
- package/docs/messaging-automation.md +103 -0
- package/package.json +66 -7
- package/skills/ghostget/SKILL.md +3 -1
- package/skills/ghostget/references/control-panel.md +43 -0
- package/skills/ghostget/references/install.md +5 -5
- package/skills/ghostget/references/linkedin-adapter.md +222 -12
- package/skills/ghostget/references/platform-patterns.md +1 -1
- package/src/args.ts +18 -5
- package/src/assets/adapters/imessage/wrench-web-adapter.json +126 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.json +1 -1
- package/src/assets/adapters/whatsapp/wrench-web-adapter.json +144 -0
- package/src/assets/messaging-runtime/NOTICE.txt +2580 -0
- package/src/assets/messaging-runtime/imsg-darwin-arm64.gz +0 -0
- package/src/assets/messaging-runtime/phone-number-info.plist.gz +0 -0
- package/src/assets/messaging-runtime/phone-number-metadata.json.gz +0 -0
- package/src/assets/messaging-runtime/phone-number-privacy.plist.gz +0 -0
- package/src/assets/messaging-runtime/wacli-darwin-arm64.gz +0 -0
- package/src/auth.ts +35 -1
- package/src/beeper-client-types.ts +1 -1
- package/src/cli.ts +18 -0
- package/src/confirmed-write-platform.ts +16 -1
- package/src/control/account-revision.ts +16 -0
- package/src/control/activity.ts +104 -0
- package/src/control/approval-broker.ts +59 -0
- package/src/control/approval-client.ts +49 -0
- package/src/control/bundled-interfaces.ts +20 -0
- package/src/control/cli.ts +20 -0
- package/src/control/connections.ts +87 -0
- package/src/control/credential-helper.ts +152 -0
- package/src/control/helper.ts +79 -0
- package/src/control/interface-cli.ts +22 -0
- package/src/control/interface-json.ts +94 -0
- package/src/control/interface-schema.ts +120 -0
- package/src/control/interfaces.ts +438 -0
- package/src/control/protocol.ts +182 -0
- package/src/control/service.ts +104 -0
- package/src/control/validation.ts +103 -0
- package/src/control/vault.ts +105 -0
- package/src/control/web-gateway.ts +62 -0
- package/src/control/web-policy.ts +56 -0
- package/src/ghostget.ts +18 -4
- package/src/messaging-automation-api.ts +12 -0
- package/src/messaging-automation-descriptors.ts +29 -0
- package/src/messaging-automation-factory.ts +148 -0
- package/src/messaging-automation-server.ts +183 -0
- package/src/messaging-automation-types.ts +155 -0
- package/src/messaging-automation-validation.ts +110 -0
- package/src/messaging-automation.ts +356 -0
- package/src/messaging-runtime.ts +3 -0
- package/src/oauth-google.ts +11 -5
- package/src/omni-runtime.ts +18 -3
- package/src/operation-permission-store.ts +92 -0
- package/src/operation-permission.ts +308 -0
- package/src/pinned-https.ts +5 -0
- package/src/plugins/imessage-direct/plugin.ts +12 -1
- package/src/plugins/imessage-direct/vendor/0003-feat-rpc-add-no-fetch-rich-cards.patch +276 -0
- package/src/plugins/imessage-direct/vendor/provenance.json +84 -10
- package/src/plugins/linkedin-web/plugin.ts +1 -1
- package/src/plugins/whatsapp-linked-device/plugin.ts +7 -2
- package/src/plugins/whatsapp-linked-device/vendor/0001-ghostget-private-messaging.patch +1093 -0
- package/src/plugins/whatsapp-linked-device/vendor/README.md +39 -0
- package/src/plugins/whatsapp-linked-device/vendor/provenance.json +45 -0
- package/src/provider-http.ts +11 -3
- package/src/provider-plugin-contract-identity.ts +2 -2
- package/src/provider-plugin-import-analysis.ts +52 -0
- package/src/provider-plugin-module-analysis.ts +21 -1
- package/src/provider-plugin-registry.ts +4 -8
- package/src/provider-plugin.ts +18 -8
- package/src/providers/imessage-automation.ts +250 -0
- package/src/providers/imessage-direct-install.ts +7 -0
- package/src/providers/imessage-direct-runtime.ts +32 -2
- package/src/providers/imessage-direct.ts +13 -3
- package/src/providers/linkedin-contact-failure.ts +21 -0
- package/src/providers/linkedin-contact-platform.ts +8 -1
- package/src/providers/linkedin-contact-program.ts +34 -5
- package/src/providers/linkedin-web-contact.ts +1223 -35
- package/src/providers/linkedin-web-profile-browser.ts +659 -45
- package/src/providers/linkedin-web-runtime.ts +1 -0
- package/src/providers/linkedin-web.ts +46 -2
- package/src/providers/messaging-native-artifacts.ts +38 -0
- package/src/providers/messaging-native-install.ts +75 -0
- package/src/providers/whatsapp-automation-runtime.ts +240 -0
- package/src/providers/whatsapp-automation.ts +153 -0
- package/src/read-client.ts +12 -2
- package/src/runtime.ts +81 -9
- package/src/state-helper.ts +2 -0
- package/src/storage.ts +71 -1
- package/src/usage.ts +9 -1
- package/src/version.ts +1 -1
- package/src/web-session-contract-definitions.ts +1 -1
- package/tsconfig.json +3 -0
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,307 @@ Historical entries retain their original delivery coordinates.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
- Keep the unique reviewed Contact info click bound after adapter
|
|
11
|
+
1.36.1 when contained Chrome follows the live vanity overlay path.
|
|
12
|
+
Operator smoke on 2026-09-12 clicked that unique control, then
|
|
13
|
+
fail-closed because pathname left `/in/tessbloch/` for
|
|
14
|
+
`/in/tessbloch/overlay/contact-info/`. Headed proof the same day
|
|
15
|
+
still showed Email in the modal. After click, the contained path now
|
|
16
|
+
treats the exact bound profile pathname or that reviewed vanity
|
|
17
|
+
overlay pathname as still bound, then snapshots the unique dialog.
|
|
18
|
+
Authwall, other origins, and any other path still fail closed. Zero
|
|
19
|
+
or two-plus controls and a missing or ambiguous modal still fail
|
|
20
|
+
closed. It still does not mint a navigation POST or track headers.
|
|
21
|
+
GraphQL 403, minted navigation GETs, vanity HTML-shell honesty, and
|
|
22
|
+
embedded-field projection stay. Soft-labels stay. Self,
|
|
23
|
+
non-first-degree, and contradictory distances still fail closed, and
|
|
24
|
+
no email is invented. Adapter bundle 1.36.2.
|
|
25
|
+
This is the sixteenth live Contact-info drift after the 1.36.1
|
|
26
|
+
overlay-href click. Cloud has no signed-in LinkedIn session; do
|
|
27
|
+
not treat this landing as live green. Operator smoke:
|
|
28
|
+
|
|
29
|
+
```sh
|
|
30
|
+
printf '%s' '{"profile_url":"https://www.linkedin.com/in/tessbloch/"}' \
|
|
31
|
+
| ghostget invoke linkedin-web contacts.read --input - --auth linkedin-dormant-20260911 --json
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
## 0.18.2 - 2026-09-12
|
|
35
|
+
|
|
36
|
+
- Apply the shared editorial typography, textured background and blurred header
|
|
37
|
+
to the homepage. Keep logos sharp, phone navigation on one row, and documentation
|
|
38
|
+
and inert native examples in their existing layouts.
|
|
39
|
+
- Correct canonical archive-size limits for bundled messaging helpers.
|
|
40
|
+
|
|
41
|
+
- Allow the unique reviewed Contact info control to open the live
|
|
42
|
+
LinkedIn SPA modal after adapter 1.36.0. Operator smoke on
|
|
43
|
+
2026-09-12 found that unique control on tessbloch, then fail-closed
|
|
44
|
+
before click because its href matched `/overlay/contact-info/`.
|
|
45
|
+
Headed proof the same day showed Email in that modal after click.
|
|
46
|
+
The contained path now clicks that unique accessible name even when
|
|
47
|
+
the href is the vanity overlay GET. Zero or two-plus controls and a
|
|
48
|
+
missing or ambiguous modal still fail closed. It still does not mint
|
|
49
|
+
a navigation POST or track headers. GraphQL 403, minted navigation
|
|
50
|
+
GETs, vanity HTML-shell honesty, and embedded-field projection stay.
|
|
51
|
+
Soft-labels stay. Self, non-first-degree, and contradictory
|
|
52
|
+
distances still fail closed, and no email is invented. Adapter bundle 1.36.1.
|
|
53
|
+
This is the fifteenth live Contact-info drift after the 1.36.0
|
|
54
|
+
Contact info click. Cloud has no signed-in LinkedIn session; do
|
|
55
|
+
not treat this landing as live green. Operator smoke:
|
|
56
|
+
|
|
57
|
+
```sh
|
|
58
|
+
printf '%s' '{"profile_url":"https://www.linkedin.com/in/tessbloch/"}' \
|
|
59
|
+
| ghostget invoke linkedin-web contacts.read --input - --auth linkedin-dormant-20260911 --json
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
- Click the unique reviewed Contact info control on an already-loaded
|
|
63
|
+
1st-degree LinkedIn profile and project Email from that modal after
|
|
64
|
+
adapter 1.35.0. Operator headed proof on 2026-09-12 showed Email in
|
|
65
|
+
the modal DOM. Contained synthetic navigation POST still returned
|
|
66
|
+
HTTP 500 `text/html` after the exact headed body and observed X-Li
|
|
67
|
+
set. The contained path now opens that profile, binds a unique
|
|
68
|
+
page-instance, clicks only the exact accessible name `Contact info`,
|
|
69
|
+
snapshots the unique dialog, and projects Email from that HTML. Zero
|
|
70
|
+
or two-plus controls, an overlay GET href, or a missing modal fail
|
|
71
|
+
closed. It does not mint a navigation POST or track headers.
|
|
72
|
+
GraphQL 403, navigation GETs, vanity HTML-shell honesty, and
|
|
73
|
+
embedded-field projection stay. Soft-labels stay. Self,
|
|
74
|
+
non-first-degree, and contradictory distances still fail closed, and
|
|
75
|
+
no email is invented. Adapter bundle 1.36.0.
|
|
76
|
+
This is the fourteenth live Contact-info drift after the 1.35.0
|
|
77
|
+
observed-header bind. Cloud has no signed-in LinkedIn session; do
|
|
78
|
+
not treat this landing as live green. Operator smoke:
|
|
79
|
+
|
|
80
|
+
```sh
|
|
81
|
+
printf '%s' '{"profile_url":"https://www.linkedin.com/in/tessbloch/"}' \
|
|
82
|
+
| ghostget invoke linkedin-web contacts.read --input - --auth linkedin-dormant-20260911 --json
|
|
83
|
+
```
|
|
84
|
+
|
|
85
|
+
- Copy already-observed LinkedIn `contacts.read@1` rsc-action
|
|
86
|
+
`x-li-page-instance-tracking-id`, `x-li-pageforestid`,
|
|
87
|
+
`x-li-traceparent`, `x-li-tracestate`, and optional
|
|
88
|
+
`x-li-layout-tree` onto the Contact-info overlay POST after adapter
|
|
89
|
+
1.34.0. Live peel after that bind kept the headed nested body and
|
|
90
|
+
forwarded page-instance, track (`mpName=web`), application
|
|
91
|
+
version/instance, anchor page key, and `rscStream=true`, but contained
|
|
92
|
+
Chrome still returned HTTP 500 `text/html`. The same profile-wait
|
|
93
|
+
`/flagship-web/rsc-action/` observations already carried those
|
|
94
|
+
tracking and trace names; 1.34.0 left them off as headed-only. The
|
|
95
|
+
contained path now copies the original strings from the same selected
|
|
96
|
+
same-origin rsc-action observation under a reviewed allowlist, prefers
|
|
97
|
+
that rsc-action bind, and omits a name when that observation lacks it.
|
|
98
|
+
It does not mint tracking IDs, traces, pageforest, or layout-tree.
|
|
99
|
+
Missing or malformed observed values fail closed before POST. Headed
|
|
100
|
+
successful body Content-Length was 400; compact emit at 398 stays.
|
|
101
|
+
GraphQL 403, navigation GETs, vanity HTML-shell honesty,
|
|
102
|
+
`sduiid=screenId`, the headed nested body, and prior page-derived
|
|
103
|
+
copies stay. Soft-labels stay. Self, non-first-degree, and
|
|
104
|
+
contradictory distances still fail closed, and no email is invented.
|
|
105
|
+
Adapter bundle 1.35.0.
|
|
106
|
+
This is the thirteenth live Contact-info drift after the 1.34.0
|
|
107
|
+
page-derived header bind. Cloud has no signed-in LinkedIn session; do
|
|
108
|
+
not treat this landing as live green. Operator smoke:
|
|
109
|
+
|
|
110
|
+
```sh
|
|
111
|
+
printf '%s' '{"profile_url":"https://www.linkedin.com/in/tessbloch/"}' \
|
|
112
|
+
| ghostget invoke linkedin-web contacts.read --input - --auth linkedin-dormant-20260911 --json
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
- Bind LinkedIn `contacts.read@1` Contact-info navigation POST to the
|
|
116
|
+
already-loaded profile document after adapter 1.33.0. Live peel of the
|
|
117
|
+
headed nested `payload.requestMetadata` body matched byte-for-byte,
|
|
118
|
+
but contained Chrome still returned HTTP 500 `text/html` because that
|
|
119
|
+
POST ran from the signed-in origin fetch context with only `Accept`,
|
|
120
|
+
`Content-Type`, and session `csrf-token`. Headed success also sent
|
|
121
|
+
page-instance and the other X-Li names from the profile SPA. The
|
|
122
|
+
contained path now opens the exact reviewed profile URL, waits for
|
|
123
|
+
that document, and copies a unique `d_flagship3_profile*`
|
|
124
|
+
`x-li-page-instance` plus optional `x-li-track` (`mpName` `web` or
|
|
125
|
+
`voyager-web`), `x-li-application-version`,
|
|
126
|
+
`x-li-application-instance`, `x-li-anchor-page-key`, and
|
|
127
|
+
`x-li-rsc-stream=true` from observed same-origin rsc-action or
|
|
128
|
+
voyager requests, or page-instance from the loaded document. It does
|
|
129
|
+
not mint `traceparent`, `tracestate`, `pageforest`,
|
|
130
|
+
page-instance-tracking-id, or layout-tree; those headed-only values
|
|
131
|
+
stay blockers if LinkedIn still 500s after the reviewed copies. Live
|
|
132
|
+
query key stays `sduiid=` (headed 200 plus public SDUI routes);
|
|
133
|
+
`sduid=` notes are transcription typos. Missing or ambiguous
|
|
134
|
+
page-instance fails closed before POST. GraphQL 403, navigation GETs,
|
|
135
|
+
vanity HTML-shell honesty, `sduiid=screenId`, and the headed nested
|
|
136
|
+
body stay. Soft-labels stay. Self,
|
|
137
|
+
non-first-degree, and contradictory distances still fail closed, and
|
|
138
|
+
no email is invented. Adapter bundle 1.34.0.
|
|
139
|
+
This is the twelfth live Contact-info drift after the 1.33.0 nested
|
|
140
|
+
body. Cloud has no signed-in LinkedIn session; do not treat this
|
|
141
|
+
landing as live green.
|
|
142
|
+
|
|
143
|
+
## 0.18.1 - 2026-09-12
|
|
144
|
+
|
|
145
|
+
- Add the owner messaging automation protocol for iMessage and WhatsApp:
|
|
146
|
+
exact conversation enrollment, revocable action grants, durable event cursors,
|
|
147
|
+
bounded history, admitted attachment bytes, and ordered send receipts. Importing
|
|
148
|
+
the eighth public SDK entrypoint performs no account or network work.
|
|
149
|
+
- Bundle reviewed private iMessage and wacli helpers with pinned bytes, source
|
|
150
|
+
patches, resources, and licenses. Installation starts no provider and changes
|
|
151
|
+
no macOS security settings. WhatsApp synchronization requires an explicit owner
|
|
152
|
+
action and keeps each outgoing action to one dispatch attempt.
|
|
153
|
+
- Expose text, files, reactions, stickers, links, and polls when the selected
|
|
154
|
+
provider and its managed permissions support them. Automated iMessage link
|
|
155
|
+
cards skip helper metadata/image fetching. Native rich iMessage actions require
|
|
156
|
+
an already-working private bridge; its upstream setup requires disabled SIP.
|
|
157
|
+
App Clips and arbitrary mini-app experiences remain unavailable. Offline checks
|
|
158
|
+
do not establish real account pairing or message delivery.
|
|
159
|
+
- Nest LinkedIn `contacts.read@1` Contact-info `requestMetadata` under
|
|
160
|
+
`payload` after adapter 1.32.0. Live peel of sibling `proto.sdui`
|
|
161
|
+
types succeeded, but the POST still returned HTTP 500 `text/html`
|
|
162
|
+
because the body sent empty sibling `RequestMetadata{$type}` and
|
|
163
|
+
omitted headed children `states`, `screenId`, and `knownTemplates`.
|
|
164
|
+
Headed 200 Email capture
|
|
165
|
+
`POST-navigation-body-shape-20260912.md` keeps
|
|
166
|
+
`clientArguments.$type`, `requestedStateKeys: []`, and nested
|
|
167
|
+
`payload.requestMetadata` with `$type`, `states: []`, overlay
|
|
168
|
+
`screenId`, and `knownTemplates: []`. The builder now emits that
|
|
169
|
+
exact headed shape, including when dormant HTML omits metadata, and
|
|
170
|
+
copies reviewed string lists when the page already has them. Empty
|
|
171
|
+
arrays and the two reviewed `proto.sdui` `$type` values come from
|
|
172
|
+
that capture, not invented opaque state. Extra keys, object-valued
|
|
173
|
+
states, and unrelated proto prefixes still fail closed. GraphQL 403,
|
|
174
|
+
navigation GETs, vanity HTML-shell honesty, and `sduiid=screenId`
|
|
175
|
+
stay. Contained Chrome already sends `Accept: */*`,
|
|
176
|
+
`Content-Type: application/json`, and session `csrf-token` for this
|
|
177
|
+
POST; it does not mint `X-Li-*` track values. Soft-labels stay.
|
|
178
|
+
Self, non-first-degree, and contradictory distances still fail
|
|
179
|
+
closed, and no email is invented. Adapter bundle 1.33.0.
|
|
180
|
+
This is the eleventh live Contact-info drift after the 1.32.0 sibling
|
|
181
|
+
peel. Cloud has no signed-in LinkedIn session; do not treat this
|
|
182
|
+
landing as live green.
|
|
183
|
+
- Fix LinkedIn `contacts.read@1` Contact-info navigation POST body after
|
|
184
|
+
adapter 1.31.0. Live 1st-degree bind still succeeded, but building
|
|
185
|
+
`clientArguments` from NavigateToScreen failed closed on
|
|
186
|
+
`unreviewed-client-arguments` keys=`["requestMetadata"]` because live
|
|
187
|
+
HTML keeps `requestMetadata` a sibling of `payload` under
|
|
188
|
+
`requestedArguments`, and `$type` uses `proto.sdui.*`
|
|
189
|
+
(`RequestedArguments`, `RequestMetadata`). A payload-only POST then
|
|
190
|
+
returned HTTP 500. The operation now copies that reviewed sibling
|
|
191
|
+
shape, lifts headed nested `payload.requestMetadata` to the sibling
|
|
192
|
+
placement, and admits `proto.sdui.*` types only on this overlay POST
|
|
193
|
+
body. Extra keys and unrelated proto prefixes still fail closed.
|
|
194
|
+
GraphQL 403, navigation GETs, vanity HTML-shell honesty, and
|
|
195
|
+
sduiid=screenId stay. Soft-labels stay. Self, non-first-degree, and
|
|
196
|
+
contradictory distances still fail closed, and no email is invented.
|
|
197
|
+
Adapter bundle 1.32.0. This is the tenth live Contact-info drift after
|
|
198
|
+
the 1.31.0 navigation POST. Cloud has no signed-in LinkedIn session;
|
|
199
|
+
do not treat this landing as live green.
|
|
200
|
+
- Read LinkedIn `contacts.read@1` Contact-info Email from the headed
|
|
201
|
+
ProfileContactDetailsOverlay navigation POST after 1st-degree bind.
|
|
202
|
+
Operator Chrome showed Email in the Contact-info modal; the first
|
|
203
|
+
response that contained the Email label was POST
|
|
204
|
+
`/flagship-web/rsc-action/actions/navigation?screenId=…ProfileContactDetailsOverlay&sduiid=…ProfileContactDetailsOverlay`
|
|
205
|
+
with JSON `{ clientArguments, isModal }` and an RSC
|
|
206
|
+
`application/octet-stream` flight. Headed capture bound `sduiid` to
|
|
207
|
+
the same overlay `screenId` constant, not a per-session mint.
|
|
208
|
+
Dormant profile HTML NavigateToScreen exposes `pageKey`
|
|
209
|
+
`profile_view_base_contact_details` and
|
|
210
|
+
`requestedArguments.payload` (`vanityName`, `givenName`,
|
|
211
|
+
`familyName`, `isVanityNameResolved`) but omits `sduiid`; the
|
|
212
|
+
operation still POSTs that exact allowlisted URL after 1st-degree
|
|
213
|
+
bind and peels reviewed payload keys without inventing `$type`,
|
|
214
|
+
`requestMetadata`, or a stolen id. A different `sduiid` fails
|
|
215
|
+
closed. GraphQL Contact-info stays 403 `text/html`, navigation
|
|
216
|
+
overlay GETs stay 500-rejected, and the vanity overlay GET remains
|
|
217
|
+
HTML-shell honesty when no Contact-info NavigateToScreen is present.
|
|
218
|
+
Soft-labels stay. Self, non-first-degree, and contradictory
|
|
219
|
+
distances still fail closed, and no email is invented.
|
|
220
|
+
Adapter bundle 1.31.0. This is the ninth live Contact-info drift after
|
|
221
|
+
the 1.30.0 overlay-shell honesty path. Cloud has no signed-in LinkedIn
|
|
222
|
+
session; do not treat this landing as live green.
|
|
223
|
+
- Keep LinkedIn `contacts.read@1` honest when GraphQL Contact-info stays HTTP
|
|
224
|
+
403 `text/html` and the vanity `/in/:publicIdentifier/overlay/contact-info/`
|
|
225
|
+
GET returns an HTML-200 profile shell with no Email. Dormant contained
|
|
226
|
+
Chrome cannot mint the client-filled Contact-info modal from GET-only
|
|
227
|
+
RSC or HTML. An HTML shell now fails as omitted Contact-info fields
|
|
228
|
+
after 1st-degree binding, not as a JSON-object parse. Overlay HTML that
|
|
229
|
+
still carries Como Email, a unique mailto, or an RSC/SDUI flight still
|
|
230
|
+
projects. `/flagship-web/rsc-action/actions/navigation` overlay GETs stay
|
|
231
|
+
rejected. Self, non-first-degree, and contradictory distances still fail
|
|
232
|
+
closed, and no email is invented. Adapter bundle 1.30.0. This is the eighth live
|
|
233
|
+
Contact-info drift after the 1.29.0 vanity overlay.
|
|
234
|
+
- Read LinkedIn `contacts.read@1` Contact-info email from the exact vanity
|
|
235
|
+
`/in/:publicIdentifier/overlay/contact-info/` RSC GET when GraphQL
|
|
236
|
+
`voyagerIdentityDashProfileContactInfo` is unavailable. Live dormant
|
|
237
|
+
sessions still bind 1st-degree distance, but the 1.28.0
|
|
238
|
+
`/flagship-web/rsc-action/actions/navigation` overlay GET returns HTTP
|
|
239
|
+
500 `application/octet-stream`, GraphQL still returns HTTP 403
|
|
240
|
+
`text/html`, and long SDUI strings in profile HTML aborted the
|
|
241
|
+
best-effort embedded walk at profile stage. The operation now skips
|
|
242
|
+
non-bounded field labels during that walk and GETs the live HTML-200
|
|
243
|
+
vanity overlay path with RSC browser binding. ScreenId-only and
|
|
244
|
+
`profileUrn`-bound navigation overlay URLs, other RSC screens, and
|
|
245
|
+
writes stay rejected. Self, non-first-degree, and contradictory
|
|
246
|
+
distances still fail closed, and no email is invented. Adapter bundle 1.29.0. This is the seventh live
|
|
247
|
+
Contact-info drift after the 1.28.0 navigation overlay.
|
|
248
|
+
- Read LinkedIn `contacts.read@1` Contact-info email from the target-bound
|
|
249
|
+
ProfileContactDetailsOverlay RSC navigation when GraphQL
|
|
250
|
+
`voyagerIdentityDashProfileContactInfo` is unavailable. Live dormant
|
|
251
|
+
Chrome and Arc sessions still bind 1st-degree distance from profile HTML,
|
|
252
|
+
but Contact-info GraphQL returns HTTP 403 `text/html` and the page embeds
|
|
253
|
+
no queryId. The operation now GETs the overlay with exact `screenId` plus
|
|
254
|
+
`profileUrn` when queryId is absent, or after that reviewed GraphQL
|
|
255
|
+
rejection, and projects Email plus Connected since from the RSC or SDUI
|
|
256
|
+
payload. ScreenId-only overlay URLs, other RSC screens, and writes stay
|
|
257
|
+
rejected. Self, non-first-degree, and contradictory distances still fail
|
|
258
|
+
closed, and no email is invented. Adapter bundle 1.28.0. This is the sixth
|
|
259
|
+
live Contact-info drift after the 1.23.0 flight-array parse, the 1.24.0
|
|
260
|
+
deep-walk / `vieweeProfileId` join, the 1.25.0 `vieweeMemberUrn` distance
|
|
261
|
+
join, the 1.26.0 multi-escaped peel, and the 1.27.0 non-flight string-slot
|
|
262
|
+
bootstrap.
|
|
263
|
+
- Read LinkedIn `contacts.read@1` first-degree distance from non-flight Como
|
|
264
|
+
rehydration string slots. Live pages after adapter 1.26.0 still bound
|
|
265
|
+
identity through `vieweeProfileId` plus vanity, but `networkDistance` and
|
|
266
|
+
paired `vieweeMemberUrn` sat in a Como array string that was not an RSC
|
|
267
|
+
flight. `decodeComoRehydrationValue` dropped that slot before the 1.26.0
|
|
268
|
+
peel could run. Non-flight string slots now go through
|
|
269
|
+
`decodeStringBootstrap`. True RSC flights still use
|
|
270
|
+
`decodeRscFlightRecords`. Self, non-first-degree, and contradictory
|
|
271
|
+
distances still fail closed, and no email is invented. Adapter bundle 1.27.0.
|
|
272
|
+
This is the fifth live Contact-info drift after the 1.23.0
|
|
273
|
+
flight-array parse, the 1.24.0 deep-walk / `vieweeProfileId` join, the
|
|
274
|
+
1.25.0 `vieweeMemberUrn` distance join, and the 1.26.0 multi-escaped peel.
|
|
275
|
+
- Read LinkedIn `contacts.read@1` first-degree distance from multi-escaped Como
|
|
276
|
+
PROFILE_VIEW breadcrumb rows. Live pages after adapter 1.25.0 still bound
|
|
277
|
+
identity through `vieweeProfileId` plus vanity, but `networkDistance` and
|
|
278
|
+
paired `vieweeMemberUrn` sat in string rows such as `networkDistance\":1`.
|
|
279
|
+
The binder now peels JSON string escapes and accepts those escaped key/value
|
|
280
|
+
forms. Object, flight-array, and lightly escaped breadcrumbs still bind.
|
|
281
|
+
Self, non-first-degree, and contradictory distances still fail closed, and
|
|
282
|
+
no email is invented. Adapter bundle 1.26.0. This is the fourth live
|
|
283
|
+
Contact-info drift after the 1.23.0 flight-array parse, the 1.24.0 deep-walk
|
|
284
|
+
/ `vieweeProfileId` join, and the 1.25.0 `vieweeMemberUrn` distance join.
|
|
285
|
+
- Join LinkedIn `contacts.read@1` first-degree distance when identity comes from
|
|
286
|
+
`vieweeProfileId` plus vanity and `networkDistance` sits on a PROFILE_VIEW
|
|
287
|
+
breadcrumb or `vieweeMemberUrn` record, including a member id or a different
|
|
288
|
+
`fsd_profile` encoding than the bound URN. Self, non-first-degree, and
|
|
289
|
+
contradictory distances still fail closed, and no email is invented.
|
|
290
|
+
Adapter bundle 1.25.0. This is the third live Contact-info drift after the
|
|
291
|
+
1.23.0 flight-array parse and the 1.24.0 deep-walk / `vieweeProfileId` join.
|
|
292
|
+
|
|
293
|
+
## 0.18.0 - 2026-09-11
|
|
294
|
+
|
|
295
|
+
- Add a macOS-first Tauri control panel for accounts, semantic capabilities,
|
|
296
|
+
permissions, human approval, user OpenAPI interfaces, and copyable agent
|
|
297
|
+
instructions. Keep the existing Bun kernel and a narrow Rust host. Direct
|
|
298
|
+
drives the real shared UI; the website embeds inert renders of its scenarios.
|
|
299
|
+
- Add exact account and implementation-bound operation grants and a public
|
|
300
|
+
HTTPS web gateway with domain/path rules, human approval, and local SQLite
|
|
301
|
+
request metadata. Activity has search, filters, a virtualized table, and
|
|
302
|
+
cursor-based infinite scrolling.
|
|
303
|
+
- Add browser connection and subject verification for X, LinkedIn, and Reddit,
|
|
304
|
+
plus an isolated 1Password X token import sink. Password and passkey login
|
|
305
|
+
remains in the system browser. The native app is a source build; signed
|
|
306
|
+
desktop authentication and installer distribution are separate qualification.
|
|
307
|
+
- Make user-space OpenAPI imports inert, reviewable drafts with exact semantic
|
|
308
|
+
executor bindings and explicit activation. Future middleware and automatic
|
|
309
|
+
approval remain extension boundaries, with no model runtime in the kernel.
|
|
310
|
+
|
|
10
311
|
## 0.17.6 - 2026-09-10
|
|
11
312
|
|
|
12
313
|
- Align the marketing site with AICharts using the shared Paper colors, Nebula
|
package/README.md
CHANGED
|
@@ -17,9 +17,16 @@ operation to one exact provider, transport, account realm, contract version,
|
|
|
17
17
|
implementation, and risk level. If those facts drift, the operation stops. It
|
|
18
18
|
does not silently fall back to general browser control.
|
|
19
19
|
|
|
20
|
-
Bring the model, planner, tool loop
|
|
21
|
-
|
|
22
|
-
|
|
20
|
+
Bring the model, planner, and tool loop you prefer. Ghostget supplies precise web
|
|
21
|
+
capabilities with local custody and explicit evidence. Its native macOS control
|
|
22
|
+
panel manages accounts, operation permissions, human approvals, editable OpenAPI
|
|
23
|
+
interfaces, and a searchable local web request log. See the
|
|
24
|
+
[control panel guide](docs/control-panel.md) and [native source build](https://github.com/hraness/ghostget/blob/v0.18.2/desktop/README.md).
|
|
25
|
+
|
|
26
|
+
The separate public web gateway admits exact HTTPS retrieval URLs under human
|
|
27
|
+
domain and path rules. Use `ghostget web request <url>` with the app open, and
|
|
28
|
+
enable gateway-only mode when the harness should use Ghostget as its sole web
|
|
29
|
+
tool. It is an application permission boundary, not an operating-system firewall.
|
|
23
30
|
|
|
24
31
|
```sh
|
|
25
32
|
ghostget https://example.com/article
|
|
@@ -44,7 +51,7 @@ ghostget plugin list
|
|
|
44
51
|
|
|
45
52
|
## Built-in provider catalog
|
|
46
53
|
|
|
47
|
-
This v0.
|
|
54
|
+
This v0.18.2 source tree supports executable actions for 20 services: Beeper,
|
|
48
55
|
Bluesky, ClasificadosOnline, Facebook, Facebook Groups, Facebook Marketplace,
|
|
49
56
|
GitHub, Gmail, Hacker News, Instagram, iMessage, LinkedIn, Reddit, Substack,
|
|
50
57
|
Threads, TikTok, Twitch, WhatsApp, X, and YouTube.
|
|
@@ -109,7 +116,7 @@ owns the narrow capability boundary that can sit beneath them.
|
|
|
109
116
|
Wrench is now Ghostget. The package name is `@hraness/ghostget`, and the CLI
|
|
110
117
|
command is `ghostget`. Read the [migration guide](docs/ghostget-migration.md)
|
|
111
118
|
before updating an existing installation. After its optional npm mirror is
|
|
112
|
-
verified public, `@hraness/ghostget@0.
|
|
119
|
+
verified public, `@hraness/ghostget@0.18.2` is also available from the registry.
|
|
113
120
|
|
|
114
121
|
This README describes the package version in this source tree. Its versioned
|
|
115
122
|
GitHub archive and Agent Skill become a supported public release after the
|
|
@@ -120,9 +127,9 @@ The optional npm mirror can follow later without delaying canonical delivery.
|
|
|
120
127
|
Install the single Ghostget Agent Skill with either runner:
|
|
121
128
|
|
|
122
129
|
```sh
|
|
123
|
-
npx skills add hraness/ghostget#v0.
|
|
130
|
+
npx skills add hraness/ghostget#v0.18.2
|
|
124
131
|
# or
|
|
125
|
-
bunx skills add hraness/ghostget#v0.
|
|
132
|
+
bunx skills add hraness/ghostget#v0.18.2
|
|
126
133
|
```
|
|
127
134
|
|
|
128
135
|
The skill teaches Codex, Claude Code, Cursor, and other compatible coding
|
|
@@ -132,7 +139,7 @@ install the CLI if it is missing. Start a new agent session after installation.
|
|
|
132
139
|
After the matching immutable Release exists, install this exact canonical archive:
|
|
133
140
|
|
|
134
141
|
```sh
|
|
135
|
-
bun add --global https://github.com/hraness/ghostget/releases/download/v0.
|
|
142
|
+
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.2/hraness-ghostget-0.18.2.tgz
|
|
136
143
|
ghostget adapter sync-bundled --json
|
|
137
144
|
ghostget doctor
|
|
138
145
|
```
|
|
@@ -160,7 +167,7 @@ For that same released coordinate, install Ghostget in an agent or application
|
|
|
160
167
|
that owns its own model, planning, tool loop, approvals, and interface:
|
|
161
168
|
|
|
162
169
|
```sh
|
|
163
|
-
bun add https://github.com/hraness/ghostget/releases/download/v0.
|
|
170
|
+
bun add https://github.com/hraness/ghostget/releases/download/v0.18.2/hraness-ghostget-0.18.2.tgz
|
|
164
171
|
```
|
|
165
172
|
|
|
166
173
|
```ts
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
// @bun
|
|
2
2
|
import {
|
|
3
3
|
GHOSTGET_VERSION
|
|
4
|
-
} from "./index-
|
|
4
|
+
} from "./index-hfbygww8.js";
|
|
5
5
|
import {
|
|
6
6
|
canonicalJson,
|
|
7
7
|
sha256
|
|
8
8
|
} from "./index-gwk7rbyj.js";
|
|
9
|
+
import"./index-z1w83f81.js";
|
|
9
10
|
|
|
10
11
|
// src/apple-photos-client.ts
|
|
11
12
|
import { spawnSync } from "child_process";
|
package/dist/beeper-client.js
CHANGED
|
@@ -4,11 +4,12 @@ import {
|
|
|
4
4
|
} from "./index-26yq8q16.js";
|
|
5
5
|
import {
|
|
6
6
|
GHOSTGET_VERSION
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-hfbygww8.js";
|
|
8
8
|
import {
|
|
9
9
|
canonicalJson,
|
|
10
10
|
sha256
|
|
11
11
|
} from "./index-gwk7rbyj.js";
|
|
12
|
+
import"./index-z1w83f81.js";
|
|
12
13
|
|
|
13
14
|
// src/beeper-client.ts
|
|
14
15
|
import { spawnSync } from "child_process";
|