@hraness/ghostget 0.18.13 → 0.18.15
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 +26 -0
- package/README.md +12 -7
- package/dist/apple-photos-client.js +1 -1
- package/dist/beeper-client.js +42 -6
- package/dist/{imessage-direct-install-2gm3kge7.js → imessage-direct-install-5nftwc6p.js} +1 -1
- package/dist/{index-maa9hb5z.js → index-4tsyncva.js} +1 -1
- package/dist/{index-en5hycxp.js → index-kaav16fd.js} +4 -2
- package/dist/{index-2ymnp8xv.js → index-qcf2f6wm.js} +5 -1
- package/dist/{messaging-automation-j4274hvc.js → messaging-automation-58s1366z.js} +1 -1
- package/dist/messaging-automation-api.js +2 -2
- package/dist/{messaging-native-install-8w1j36ah.js → messaging-native-install-c90nv501.js} +1 -1
- package/dist/{whatsapp-automation-runtime-hgh1e9rm.js → whatsapp-automation-runtime-ke1dx91p.js} +1 -1
- package/docs/messaging-automation.md +14 -7
- package/package.json +8 -4
- package/skills/ghostget/references/install.md +5 -5
- package/src/assets/adapters/beeper/wrench-web-adapter.json +37 -1
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.4.0.json +1500 -0
- package/src/beeper-client-types.ts +1 -1
- package/src/control/menubar-cli.ts +3 -1
- package/src/control/menubar-icon.ts +4 -0
- package/src/messaging-automation-descriptors.ts +9 -1
- package/src/messaging-automation-factory.ts +7 -5
- package/src/messaging-automation-server.ts +2 -2
- package/src/messaging-automation-types.ts +3 -2
- package/src/messaging-automation-validation.ts +5 -1
- package/src/plugins/beeper-linked-device/plugin.ts +3 -1
- package/src/provider-plugin-contract-identity.ts +11 -2
- package/src/providers/beeper-automation.ts +447 -0
- package/src/providers/beeper-local-runtime.ts +61 -21
- package/src/providers/beeper-local.ts +4 -4
- package/src/providers/beeper-omni.ts +9 -2
- package/src/providers/messaging-native-install.ts +2 -1
- package/src/providers/x-web-runtime.ts +11 -11
- package/src/providers/x-web.ts +36 -35
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,32 @@ Historical entries retain their original delivery coordinates.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.18.15
|
|
11
|
+
|
|
12
|
+
- Refresh the X web descriptor evidence for the 2026-09-17 authenticated
|
|
13
|
+
client-web drop. X rotated most GraphQL query IDs and chunk names, so exact
|
|
14
|
+
profile, timeline, and Article operations resume instead of reporting
|
|
15
|
+
contract drift. The three retired DM search descriptors are removed, and a
|
|
16
|
+
deleted or renamed profile target now reports `target-unavailable` rather
|
|
17
|
+
than contract drift when X returns its empty-data result.
|
|
18
|
+
|
|
19
|
+
## 0.18.14
|
|
20
|
+
|
|
21
|
+
- Pin `@hraness/site-footer` v0.13.0 so every public page's shared footer
|
|
22
|
+
carries the package-owned "Built by Hraness" organization attribution. The
|
|
23
|
+
static build keeps the framework-neutral renderer, which tests prove is the
|
|
24
|
+
same `HranessSiteFooter` contract, and the homepage maker biography remains
|
|
25
|
+
product-owned page content rather than footer attribution.
|
|
26
|
+
- Admit Beeper as a third messaging automation provider beside iMessage and
|
|
27
|
+
WhatsApp. Adapter `beeper-local` 2.5.0 declares two scoped owner-automation
|
|
28
|
+
permissions — `messaging.automation.read` and `messaging.automation.send.text` —
|
|
29
|
+
served only through the owner-driven `ghostget messaging automation` host.
|
|
30
|
+
Sessions bind one exact account realm, preserve the realm's canonical Matrix
|
|
31
|
+
self identity beside the bridge-scoped account id, and keep every send
|
|
32
|
+
behind an explicit reviewed grant with no retry after an uncertain dispatch.
|
|
33
|
+
Realm-wide conversation listing excludes chats owned by accounts outside
|
|
34
|
+
the bound realm instead of failing the whole projection.
|
|
35
|
+
|
|
10
36
|
## 0.18.13
|
|
11
37
|
|
|
12
38
|
- Move the menu companion onto the shared desktop-foundation runner, retaining
|
package/README.md
CHANGED
|
@@ -79,7 +79,7 @@ The protocol and [Agent Skill](skills/ghostget/SKILL.md) describe the handoff.
|
|
|
79
79
|
|
|
80
80
|
## Built-in provider catalog
|
|
81
81
|
|
|
82
|
-
This v0.18.
|
|
82
|
+
This v0.18.15 source tree supports executable actions for 20 services: Beeper,
|
|
83
83
|
Bluesky, ClasificadosOnline, Facebook, Facebook Groups, Facebook Marketplace,
|
|
84
84
|
GitHub, Gmail, Hacker News, Instagram, iMessage, LinkedIn, Reddit, Substack,
|
|
85
85
|
Threads, TikTok, Twitch, WhatsApp, X, and YouTube.
|
|
@@ -94,7 +94,10 @@ Beeper is Ghostget's first provider adapter with a pinned local-CLI transport. I
|
|
|
94
94
|
manage reactions, drafts, reminders, and conversation state; and preview and
|
|
95
95
|
confirm sends, edits, group changes, and presence. Of those, 26 operations use
|
|
96
96
|
the authoritative `@beeper/cli` 0.6.2 executable; six reads use fixed Beeper
|
|
97
|
-
Desktop loopback endpoints.
|
|
97
|
+
Desktop loopback endpoints. Adapter 2.5.0 adds two scoped owner-automation
|
|
98
|
+
permissions, `messaging.automation.read` and `messaging.automation.send.text`,
|
|
99
|
+
served only through the owner-driven `ghostget messaging automation` host with
|
|
100
|
+
sends behind an explicit bounded grant. Ghostget binds one Desktop target and does not expose
|
|
98
101
|
a generic command runner. Submission is not a claim of network delivery.
|
|
99
102
|
|
|
100
103
|
```sh
|
|
@@ -155,9 +158,9 @@ The optional npm mirror can follow later without delaying canonical delivery.
|
|
|
155
158
|
Install the single Ghostget Agent Skill with either runner:
|
|
156
159
|
|
|
157
160
|
```sh
|
|
158
|
-
npx skills add hraness/ghostget#v0.18.
|
|
161
|
+
npx skills add hraness/ghostget#v0.18.15
|
|
159
162
|
# or
|
|
160
|
-
bunx skills add hraness/ghostget#v0.18.
|
|
163
|
+
bunx skills add hraness/ghostget#v0.18.15
|
|
161
164
|
```
|
|
162
165
|
|
|
163
166
|
The skill teaches Codex, Claude Code, Cursor, and other compatible coding
|
|
@@ -167,7 +170,7 @@ install the CLI if it is missing. Start a new agent session after installation.
|
|
|
167
170
|
After the matching immutable Release exists, install this exact canonical archive:
|
|
168
171
|
|
|
169
172
|
```sh
|
|
170
|
-
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.
|
|
173
|
+
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.15/hraness-ghostget-0.18.15.tgz
|
|
171
174
|
ghostget adapter sync-bundled --json
|
|
172
175
|
ghostget doctor
|
|
173
176
|
```
|
|
@@ -195,7 +198,7 @@ For that same released coordinate, install Ghostget in an agent or application
|
|
|
195
198
|
that owns its own model, planning, tool loop, approvals, and interface:
|
|
196
199
|
|
|
197
200
|
```sh
|
|
198
|
-
bun add https://github.com/hraness/ghostget/releases/download/v0.18.
|
|
201
|
+
bun add https://github.com/hraness/ghostget/releases/download/v0.18.15/hraness-ghostget-0.18.15.tgz
|
|
199
202
|
```
|
|
200
203
|
|
|
201
204
|
```ts
|
|
@@ -807,7 +810,9 @@ absorbed into explicit account IDs; `targets status`, `version`, and top-level
|
|
|
807
810
|
`export` are internal; `accounts add`, `accounts remove`, and `messages delete`
|
|
808
811
|
are R4 and unavailable to provider dispatch; and plain `status` is among the
|
|
809
812
|
53 unsupported paths. None of those three R4 paths appears in the selected
|
|
810
|
-
32-operation provider adapter.
|
|
813
|
+
32-operation provider adapter. Two additional scoped permission descriptors —
|
|
814
|
+
`messaging.automation.read` and `messaging.automation.send.text` — belong only
|
|
815
|
+
to the owner-driven automation host and admit no generic invocation. Ghostget does not turn administrative,
|
|
811
816
|
destructive, caller-selected network, or arbitrary-filesystem commands into
|
|
812
817
|
agent authority.
|
|
813
818
|
|
package/dist/beeper-client.js
CHANGED
|
@@ -4,7 +4,7 @@ import {
|
|
|
4
4
|
} from "./index-26yq8q16.js";
|
|
5
5
|
import {
|
|
6
6
|
GHOSTGET_VERSION
|
|
7
|
-
} from "./index-
|
|
7
|
+
} from "./index-4tsyncva.js";
|
|
8
8
|
import {
|
|
9
9
|
canonicalJson,
|
|
10
10
|
sha256
|
|
@@ -27,7 +27,7 @@ import {
|
|
|
27
27
|
var wrench_web_adapter_default = {
|
|
28
28
|
schemaVersion: 6,
|
|
29
29
|
id: "beeper-local",
|
|
30
|
-
version: "2.
|
|
30
|
+
version: "2.5.0",
|
|
31
31
|
displayName: "Beeper (Pinned Local CLI)",
|
|
32
32
|
surfaceId: "beeper",
|
|
33
33
|
origins: [
|
|
@@ -1521,6 +1521,42 @@ var wrench_web_adapter_default = {
|
|
|
1521
1521
|
timeoutMs: 120000,
|
|
1522
1522
|
maxOutputBytes: 10485760
|
|
1523
1523
|
}
|
|
1524
|
+
},
|
|
1525
|
+
"messaging.automation.read": {
|
|
1526
|
+
description: "Scoped owner automation permission; use ghostget messaging automation serve --stdio. Generic invocation is unavailable.",
|
|
1527
|
+
risk: "R1",
|
|
1528
|
+
sideEffect: "none",
|
|
1529
|
+
idempotency: "none",
|
|
1530
|
+
dedupeWindowMs: 0,
|
|
1531
|
+
input: {
|
|
1532
|
+
properties: {},
|
|
1533
|
+
required: []
|
|
1534
|
+
},
|
|
1535
|
+
localCli: {
|
|
1536
|
+
surface: "beeper",
|
|
1537
|
+
action: "messaging.automation.read",
|
|
1538
|
+
contractVersion: 1,
|
|
1539
|
+
timeoutMs: 30000,
|
|
1540
|
+
maxOutputBytes: 8388608
|
|
1541
|
+
}
|
|
1542
|
+
},
|
|
1543
|
+
"messaging.automation.send.text": {
|
|
1544
|
+
description: "Scoped owner automation permission; use ghostget messaging automation serve --stdio. Generic invocation is unavailable.",
|
|
1545
|
+
risk: "R3",
|
|
1546
|
+
sideEffect: "Submit one exact action through an enrolled conversation and an unexpired bounded owner grant; delivery remains unknown.",
|
|
1547
|
+
idempotency: "local-at-most-once",
|
|
1548
|
+
dedupeWindowMs: 86400000,
|
|
1549
|
+
input: {
|
|
1550
|
+
properties: {},
|
|
1551
|
+
required: []
|
|
1552
|
+
},
|
|
1553
|
+
localCli: {
|
|
1554
|
+
surface: "beeper",
|
|
1555
|
+
action: "messaging.automation.send.text",
|
|
1556
|
+
contractVersion: 1,
|
|
1557
|
+
timeoutMs: 30000,
|
|
1558
|
+
maxOutputBytes: 8388608
|
|
1559
|
+
}
|
|
1524
1560
|
}
|
|
1525
1561
|
}
|
|
1526
1562
|
};
|
|
@@ -2762,7 +2798,7 @@ function beeperLocalSurfaceInputType(value) {
|
|
|
2762
2798
|
return value;
|
|
2763
2799
|
}
|
|
2764
2800
|
var adapterOperations = wrench_web_adapter_default.operations;
|
|
2765
|
-
var BEEPER_LOCAL_OPERATION_INPUT_TYPES = Object.freeze(Object.fromEntries(
|
|
2801
|
+
var BEEPER_LOCAL_OPERATION_INPUT_TYPES = Object.freeze(Object.fromEntries([...BEEPER_LOCAL_OPERATION_NAMES].sort().map((operation) => [
|
|
2766
2802
|
operation,
|
|
2767
2803
|
Object.freeze(Object.fromEntries(Object.keys(adapterOperations[operation].input.properties).sort().map((field) => [
|
|
2768
2804
|
field,
|
|
@@ -3774,9 +3810,9 @@ var BEEPER_CLI_V062_SURFACE_CONTRACT = defineLocalCliSurfaceContractV1({
|
|
|
3774
3810
|
sdk: BEEPER_DESKTOP_API_PIN,
|
|
3775
3811
|
runtime: {
|
|
3776
3812
|
providerPluginId: "beeper-linked-device",
|
|
3777
|
-
providerPluginVersion: "2.
|
|
3813
|
+
providerPluginVersion: "2.5.0",
|
|
3778
3814
|
adapterId: "beeper-local",
|
|
3779
|
-
adapterVersion: "2.
|
|
3815
|
+
adapterVersion: "2.5.0",
|
|
3780
3816
|
operationContractVersions: BEEPER_LOCAL_OPERATION_CONTRACT_VERSIONS,
|
|
3781
3817
|
operationInputTypes: BEEPER_LOCAL_OPERATION_INPUT_TYPES,
|
|
3782
3818
|
target: BEEPER_DESKTOP_TARGET,
|
|
@@ -3790,7 +3826,7 @@ var BEEPER_CLI_V062_SURFACE_CONTRACT = defineLocalCliSurfaceContractV1({
|
|
|
3790
3826
|
var BEEPER_CLI_V062_UPSTREAM_SURFACE_SHA256 = "74297df1af30fe89cf1596a0670983e79cf85c0768c2f68e9bc3d386be640836";
|
|
3791
3827
|
var BEEPER_CLI_V062_CLASSIFICATION_SHA256 = "bcd411af1544e5cd618cd3c04f2852a797bd804d92b7fe4cd226374b61c57d08";
|
|
3792
3828
|
var BEEPER_CLI_V062_SEMANTIC_PROFILES_SHA256 = "fb7ea5f70f004dd8090c3e6e0996bfa00b0bab8ea5639203e2d1027602450ffe";
|
|
3793
|
-
var BEEPER_CLI_V062_WHOLE_SURFACE_SHA256 = "
|
|
3829
|
+
var BEEPER_CLI_V062_WHOLE_SURFACE_SHA256 = "bedc3063a7a792686e351c78e7ba3ed2a5fc0cc6efd3d88a23d9b7ae777765e2";
|
|
3794
3830
|
var BEEPER_CLI_V062_PUBLIC_MANUAL_SEMANTIC_PROFILE_SHA256 = Object.freeze({
|
|
3795
3831
|
setup: "cd432e2649e5724d70398e739a2d1c0c21557a23820aaa14562575a5fe689406",
|
|
3796
3832
|
"install desktop": "478f4cc022b1d51d4016a319efea17e4523c55e3168560c99fdf7779347ae78a",
|
|
@@ -147,6 +147,8 @@ async function ensureImsgNativeResources(installDirectory, environment) {
|
|
|
147
147
|
async function installBundledMessagingRuntime(provider, environment = process.env) {
|
|
148
148
|
if (process.platform !== "darwin" || process.arch !== "arm64")
|
|
149
149
|
throw new Error("Bundled messaging runtimes require Apple silicon macOS");
|
|
150
|
+
if (provider === "beeper")
|
|
151
|
+
throw new Error("Beeper has no bundled messaging runtime; the pinned local CLI and running Beeper Desktop are installed separately");
|
|
150
152
|
if (provider !== "imessage" && provider !== "whatsapp")
|
|
151
153
|
throw new Error("Unknown messaging runtime");
|
|
152
154
|
const bytes = await readBundledMessagingAsset(provider), directory = await mkdtemp(join(await realpath(tmpdir()), "wrench-messaging-install-"));
|
|
@@ -160,11 +162,11 @@ async function installBundledMessagingRuntime(provider, environment = process.en
|
|
|
160
162
|
await file.close();
|
|
161
163
|
}
|
|
162
164
|
if (provider === "imessage") {
|
|
163
|
-
const { installReviewedImsgBinary } = await import("./imessage-direct-install-
|
|
165
|
+
const { installReviewedImsgBinary } = await import("./imessage-direct-install-5nftwc6p.js");
|
|
164
166
|
const result = await installReviewedImsgBinary(path, environment);
|
|
165
167
|
return { version: result.version, sha256: result.executableSha256, alreadyPresent: result.alreadyPresent };
|
|
166
168
|
}
|
|
167
|
-
const { installReviewedWhatsAppAutomationBinary } = await import("./whatsapp-automation-runtime-
|
|
169
|
+
const { installReviewedWhatsAppAutomationBinary } = await import("./whatsapp-automation-runtime-ke1dx91p.js");
|
|
168
170
|
return await installReviewedWhatsAppAutomationBinary(path, environment);
|
|
169
171
|
} finally {
|
|
170
172
|
await unlink(path);
|
|
@@ -59,6 +59,10 @@ function parseAutomationCoordinate(value) {
|
|
|
59
59
|
throw new Error("Only exact iMessage conversations are supported.");
|
|
60
60
|
return Object.freeze({ provider, chatGuid, service: "iMessage", observedChatRowId: automationInteger(r2.observedChatRowId, 1, Number.MAX_SAFE_INTEGER) });
|
|
61
61
|
}
|
|
62
|
+
if (provider === "beeper") {
|
|
63
|
+
const r2 = automationRecord(value, ["provider", "accountId", "conversationId"]);
|
|
64
|
+
return Object.freeze({ provider, accountId: automationText(r2.accountId, 512), conversationId: automationText(r2.conversationId, 2048) });
|
|
65
|
+
}
|
|
62
66
|
const r = automationRecord(value, ["provider", "conversationJid"]);
|
|
63
67
|
if (provider !== "whatsapp" || typeof r.conversationJid !== "string" || !/^(?:[1-9][0-9]{4,14}@s\.whatsapp\.net|[1-9][0-9]{4,19}@lid)$/u.test(r.conversationJid))
|
|
64
68
|
throw new Error("Only exact individual WhatsApp conversations are supported.");
|
|
@@ -66,7 +70,7 @@ function parseAutomationCoordinate(value) {
|
|
|
66
70
|
}
|
|
67
71
|
function parseAutomationIdentity(value) {
|
|
68
72
|
const r = automationRecord(value, ["provider", "authId", "accountIdentity", "accountSubject", "implementationIdentity", "sourceGeneration"]);
|
|
69
|
-
if (r.provider !== "imessage" && r.provider !== "whatsapp")
|
|
73
|
+
if (r.provider !== "imessage" && r.provider !== "whatsapp" && r.provider !== "beeper")
|
|
70
74
|
throw new Error("Messaging provider is invalid.");
|
|
71
75
|
return Object.freeze({ provider: r.provider, authId: automationId(r.authId), accountIdentity: automationDigest(r.accountIdentity), accountSubject: automationText(r.accountSubject, 512), implementationIdentity: automationDigest(r.implementationIdentity), sourceGeneration: automationText(r.sourceGeneration, 256) });
|
|
72
76
|
}
|
|
@@ -8,11 +8,11 @@ import {
|
|
|
8
8
|
|
|
9
9
|
// src/messaging-automation-api.ts
|
|
10
10
|
async function createMessagingAutomationHost(providers, environment) {
|
|
11
|
-
const { MessagingAutomationHost } = await import("./messaging-automation-
|
|
11
|
+
const { MessagingAutomationHost } = await import("./messaging-automation-58s1366z.js");
|
|
12
12
|
return new MessagingAutomationHost(providers, environment);
|
|
13
13
|
}
|
|
14
14
|
async function installBundledMessagingRuntime(provider, environment) {
|
|
15
|
-
return (await import("./messaging-native-install-
|
|
15
|
+
return (await import("./messaging-native-install-c90nv501.js")).installBundledMessagingRuntime(provider, environment);
|
|
16
16
|
}
|
|
17
17
|
export {
|
|
18
18
|
installBundledMessagingRuntime,
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
# Owner messaging host
|
|
2
2
|
|
|
3
3
|
`ghostget messaging automation serve --stdio` is the trusted owner control port
|
|
4
|
-
for enrolled iMessage and
|
|
4
|
+
for enrolled iMessage, WhatsApp, and Beeper conversations. It is never an agent
|
|
5
|
+
tool.
|
|
5
6
|
All configuration, targets, message bodies and assets arrive on stdin; stdout
|
|
6
7
|
contains only protocol responses. Do not run it in a terminal or record its
|
|
7
8
|
streams in general logs. It does not pair accounts or start synchronization on
|
|
@@ -15,11 +16,13 @@ must enforce their own exact permissions and cleanup. Use the stdio host above
|
|
|
15
16
|
for Ghostget's built-in accounts and managed registry; its session factory is
|
|
16
17
|
internal and is not part of the SDK.
|
|
17
18
|
|
|
18
|
-
Install the current bundled `imessage-direct` or `
|
|
19
|
-
explicit existing Ghostget account, and enable managed
|
|
20
|
-
Ghostget. Grant `allow` separately to
|
|
21
|
-
`messaging.automation.send.<kind>`
|
|
22
|
-
`messaging.automation.sync`.
|
|
19
|
+
Install the current bundled `imessage-direct`, `whatsapp-web`, or `beeper-local`
|
|
20
|
+
adapter, bind an explicit existing Ghostget account, and enable managed
|
|
21
|
+
operation permissions in Ghostget. Grant `allow` separately to
|
|
22
|
+
`messaging.automation.read`, the required `messaging.automation.send.<kind>`
|
|
23
|
+
operations, and (WhatsApp only) `messaging.automation.sync`. Beeper admits exact
|
|
24
|
+
text sends only: `messaging.automation.send.text` is its sole send permission.
|
|
25
|
+
An old `messaging.send` allow does not authorize this
|
|
23
26
|
host. `ask`, `deny`, and an unmanaged policy do not provide unattended authority.
|
|
24
27
|
Updated manifests and automatic implementation closures invalidate old grants.
|
|
25
28
|
These catalog entries cannot dispatch through generic `invoke` or `confirm`.
|
|
@@ -31,6 +34,10 @@ ghostget imessage transport install --json
|
|
|
31
34
|
ghostget whatsapp automation install --json
|
|
32
35
|
```
|
|
33
36
|
|
|
37
|
+
Beeper has no bundled runtime: its transport is the separately installed pinned
|
|
38
|
+
`beeper` CLI against the running Beeper Desktop local API on its fixed loopback
|
|
39
|
+
target.
|
|
40
|
+
|
|
34
41
|
The default installs the exact compressed runtime included in the Ghostget package. An optional `--binary /absolute/reviewed-file` selects an explicit source instead. Only exact pinned bytes are accepted. Installation starts no helper. The
|
|
35
42
|
WhatsApp binary is the reviewed wacli build with durable events and exact action
|
|
36
43
|
claims; a stock wacli does not qualify. Existing account pairing and macOS
|
|
@@ -46,7 +53,7 @@ responses can arrive before a pending ordinary response.
|
|
|
46
53
|
|
|
47
54
|
| Method | Exact params | Result |
|
|
48
55
|
| --- | --- | --- |
|
|
49
|
-
| initialize | providers: 1–
|
|
56
|
+
| initialize | providers: 1–3 `{provider,authId}`, distinct networks | `{initialized:true}` |
|
|
50
57
|
| status | provider | Current identity and permissions-intersected capabilities |
|
|
51
58
|
| start | provider | Current status; WhatsApp sync starts explicitly |
|
|
52
59
|
| conversations | provider, limit (1–200) | Current individual conversations |
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hraness/ghostget",
|
|
3
|
-
"version": "0.18.
|
|
3
|
+
"version": "0.18.15",
|
|
4
4
|
"description": "Open-source CLI and TypeScript SDK for precise web capabilities for AI agents: page capture, verified media archives, encrypted reads, and typed provider operations.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"type": "module",
|
|
@@ -108,6 +108,7 @@
|
|
|
108
108
|
"src/assets/adapters/beeper/wrench-web-adapter.v2.1.0.json",
|
|
109
109
|
"src/assets/adapters/beeper/wrench-web-adapter.v2.2.0.json",
|
|
110
110
|
"src/assets/adapters/beeper/wrench-web-adapter.v2.3.0.json",
|
|
111
|
+
"src/assets/adapters/beeper/wrench-web-adapter.v2.4.0.json",
|
|
111
112
|
"src/assets/adapters/imessage/wrench-web-adapter.json",
|
|
112
113
|
"src/assets/adapters/bluesky/wrench-web-adapter.json",
|
|
113
114
|
"src/assets/adapters/bluesky/wrench-web-adapter.v1.0.0.json",
|
|
@@ -331,6 +332,7 @@
|
|
|
331
332
|
"src/providers/imessage-automation.ts",
|
|
332
333
|
"src/providers/whatsapp-automation.ts",
|
|
333
334
|
"src/providers/whatsapp-automation-runtime.ts",
|
|
335
|
+
"src/providers/beeper-automation.ts",
|
|
334
336
|
"src/providers/messaging-native-install.ts",
|
|
335
337
|
"src/providers/messaging-native-artifacts.ts",
|
|
336
338
|
"src/assets/messaging-runtime",
|
|
@@ -586,6 +588,7 @@
|
|
|
586
588
|
"src/control/account-revision.ts",
|
|
587
589
|
"src/control/interface-cli.ts",
|
|
588
590
|
"src/control/menubar-cli.ts",
|
|
591
|
+
"src/control/menubar-icon.ts",
|
|
589
592
|
"src/control/bundled-interfaces.ts"
|
|
590
593
|
],
|
|
591
594
|
"scripts": {
|
|
@@ -611,7 +614,8 @@
|
|
|
611
614
|
"check:static": "bun run typecheck && bun run check:effect && bun run website:check && bun run test:npm-release",
|
|
612
615
|
"check:package": "bun run build && bun run test:package",
|
|
613
616
|
"check:macos": "bun run ./scripts/ci-macos-check.ts",
|
|
614
|
-
"check": "bun
|
|
617
|
+
"check:cost-surfaces": "bun ./scripts/check-cost-surfaces.mjs",
|
|
618
|
+
"check": "bun run check:cost-surfaces && bun run check:static && bun run check:package && bun run test && bun run test:standalone",
|
|
615
619
|
"kb:refresh": "bunx --bun github:hraness/kb#v0.15.2 refresh --root kb",
|
|
616
620
|
"kb:check:lane": "bunx --bun github:hraness/kb#v0.15.2 check --root kb --no-catalog",
|
|
617
621
|
"kb:check": "bunx --bun github:hraness/kb#v0.15.2 check --root kb && bunx --bun github:hraness/kb#v0.15.2 agents check --root kb --repo .",
|
|
@@ -629,11 +633,11 @@
|
|
|
629
633
|
"source-map-support": "0.5.21",
|
|
630
634
|
"typescript": "6.0.3",
|
|
631
635
|
"@1password/sdk": "0.5.0",
|
|
632
|
-
"@hraness/desktop-foundation": "https://github.com/hraness/desktop-foundation/releases/download/v0.
|
|
636
|
+
"@hraness/desktop-foundation": "https://github.com/hraness/desktop-foundation/releases/download/v0.7.0/hraness-desktop-foundation-0.7.0.tgz"
|
|
633
637
|
},
|
|
634
638
|
"devDependencies": {
|
|
635
639
|
"@hraness/design-kit": "github:hraness/design-kit#v0.8.0",
|
|
636
|
-
"@hraness/site-footer": "github:hraness/site-footer#v0.
|
|
640
|
+
"@hraness/site-footer": "github:hraness/site-footer#v0.13.0",
|
|
637
641
|
"@hraness/ui": "github:hraness/ui#v0.5.13",
|
|
638
642
|
"@steipete/sweet-cookie": "0.4.3",
|
|
639
643
|
"@types/bun": "^1.3.14",
|
|
@@ -17,34 +17,34 @@ If Bun is missing, stop and direct the user to the official
|
|
|
17
17
|
[Bun installation guide](https://bun.sh/docs/installation). Do not switch
|
|
18
18
|
package managers or pipe an unreviewed installer into a shell.
|
|
19
19
|
|
|
20
|
-
This reference is authored for the exact v0.18.
|
|
20
|
+
This reference is authored for the exact v0.18.15 release coordinate. Use it
|
|
21
21
|
only from the matching release-bound Agent Skill after its canonical archive and
|
|
22
22
|
immutable GitHub Release exist. If the coordinate is not public, stop instead
|
|
23
23
|
of substituting `main`, another tag, or a different package version. Install
|
|
24
24
|
that exact release and its reviewed bundled adapter manifests:
|
|
25
25
|
|
|
26
26
|
```sh
|
|
27
|
-
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.
|
|
27
|
+
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.15/hraness-ghostget-0.18.15.tgz
|
|
28
28
|
ghostget adapter sync-bundled --json
|
|
29
29
|
ghostget --help
|
|
30
30
|
ghostget doctor --json
|
|
31
31
|
```
|
|
32
32
|
|
|
33
|
-
The package is `@hraness/ghostget`; `@hraness/ghostget@0.18.
|
|
33
|
+
The package is `@hraness/ghostget`; `@hraness/ghostget@0.18.15` is an optional npm
|
|
34
34
|
mirror only after verified registry publication. Canonical installation does not
|
|
35
35
|
wait for registry publication.
|
|
36
36
|
|
|
37
37
|
When upgrading from Wrench, use `ghostget` for new commands and
|
|
38
38
|
`GHOSTGET_STATE_HOME` for an explicit state root. Existing state is selected in
|
|
39
39
|
place; do not rename, copy, or delete a state directory as part of the upgrade.
|
|
40
|
-
The [migration guide](https://github.com/hraness/ghostget/blob/v0.18.
|
|
40
|
+
The [migration guide](https://github.com/hraness/ghostget/blob/v0.18.15/docs/ghostget-migration.md)
|
|
41
41
|
explains the retained state aliases and durable protocol names.
|
|
42
42
|
|
|
43
43
|
Do not clone the repository merely to run the CLI. Importing the SDK is a
|
|
44
44
|
separate project dependency and does not install a global command:
|
|
45
45
|
|
|
46
46
|
```sh
|
|
47
|
-
bun add https://github.com/hraness/ghostget/releases/download/v0.18.
|
|
47
|
+
bun add https://github.com/hraness/ghostget/releases/download/v0.18.15/hraness-ghostget-0.18.15.tgz
|
|
48
48
|
```
|
|
49
49
|
|
|
50
50
|
`ghostget adapter sync-bundled` upgrades exact bundled baselines, including an
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 6,
|
|
3
3
|
"id": "beeper-local",
|
|
4
|
-
"version": "2.
|
|
4
|
+
"version": "2.5.0",
|
|
5
5
|
"displayName": "Beeper (Pinned Local CLI)",
|
|
6
6
|
"surfaceId": "beeper",
|
|
7
7
|
"origins": [
|
|
@@ -1495,6 +1495,42 @@
|
|
|
1495
1495
|
"timeoutMs": 120000,
|
|
1496
1496
|
"maxOutputBytes": 10485760
|
|
1497
1497
|
}
|
|
1498
|
+
},
|
|
1499
|
+
"messaging.automation.read": {
|
|
1500
|
+
"description": "Scoped owner automation permission; use ghostget messaging automation serve --stdio. Generic invocation is unavailable.",
|
|
1501
|
+
"risk": "R1",
|
|
1502
|
+
"sideEffect": "none",
|
|
1503
|
+
"idempotency": "none",
|
|
1504
|
+
"dedupeWindowMs": 0,
|
|
1505
|
+
"input": {
|
|
1506
|
+
"properties": {},
|
|
1507
|
+
"required": []
|
|
1508
|
+
},
|
|
1509
|
+
"localCli": {
|
|
1510
|
+
"surface": "beeper",
|
|
1511
|
+
"action": "messaging.automation.read",
|
|
1512
|
+
"contractVersion": 1,
|
|
1513
|
+
"timeoutMs": 30000,
|
|
1514
|
+
"maxOutputBytes": 8388608
|
|
1515
|
+
}
|
|
1516
|
+
},
|
|
1517
|
+
"messaging.automation.send.text": {
|
|
1518
|
+
"description": "Scoped owner automation permission; use ghostget messaging automation serve --stdio. Generic invocation is unavailable.",
|
|
1519
|
+
"risk": "R3",
|
|
1520
|
+
"sideEffect": "Submit one exact action through an enrolled conversation and an unexpired bounded owner grant; delivery remains unknown.",
|
|
1521
|
+
"idempotency": "local-at-most-once",
|
|
1522
|
+
"dedupeWindowMs": 86400000,
|
|
1523
|
+
"input": {
|
|
1524
|
+
"properties": {},
|
|
1525
|
+
"required": []
|
|
1526
|
+
},
|
|
1527
|
+
"localCli": {
|
|
1528
|
+
"surface": "beeper",
|
|
1529
|
+
"action": "messaging.automation.send.text",
|
|
1530
|
+
"contractVersion": 1,
|
|
1531
|
+
"timeoutMs": 30000,
|
|
1532
|
+
"maxOutputBytes": 8388608
|
|
1533
|
+
}
|
|
1498
1534
|
}
|
|
1499
1535
|
}
|
|
1500
1536
|
}
|