@hraness/ghostget 0.18.12 → 0.18.14
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 +29 -0
- package/README.md +17 -8
- 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-9ayntqrw.js → index-g6na3p6k.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 +12 -7
- package/skills/ghostget/SKILL.md +1 -1
- 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 +570 -0
- 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/imessage-direct-runtime.ts +28 -2
- package/src/providers/messaging-native-install.ts +2 -1
- package/src/support-profile.ts +7 -0
- package/src/support.ts +1 -7
- package/src/version.ts +1 -1
package/CHANGELOG.md
CHANGED
|
@@ -7,6 +7,35 @@ Historical entries retain their original delivery coordinates.
|
|
|
7
7
|
|
|
8
8
|
## Unreleased
|
|
9
9
|
|
|
10
|
+
## 0.18.14
|
|
11
|
+
|
|
12
|
+
- Pin `@hraness/site-footer` v0.13.0 so every public page's shared footer
|
|
13
|
+
carries the package-owned "Built by Hraness" organization attribution. The
|
|
14
|
+
static build keeps the framework-neutral renderer, which tests prove is the
|
|
15
|
+
same `HranessSiteFooter` contract, and the homepage maker biography remains
|
|
16
|
+
product-owned page content rather than footer attribution.
|
|
17
|
+
- Admit Beeper as a third messaging automation provider beside iMessage and
|
|
18
|
+
WhatsApp. Adapter `beeper-local` 2.5.0 declares two scoped owner-automation
|
|
19
|
+
permissions — `messaging.automation.read` and `messaging.automation.send.text` —
|
|
20
|
+
served only through the owner-driven `ghostget messaging automation` host.
|
|
21
|
+
Sessions bind one exact account realm, preserve the realm's canonical Matrix
|
|
22
|
+
self identity beside the bridge-scoped account id, and keep every send
|
|
23
|
+
behind an explicit reviewed grant with no retry after an uncertain dispatch.
|
|
24
|
+
Realm-wide conversation listing excludes chats owned by accounts outside
|
|
25
|
+
the bound realm instead of failing the whole projection.
|
|
26
|
+
|
|
27
|
+
## 0.18.13
|
|
28
|
+
|
|
29
|
+
- Move the menu companion onto the shared desktop-foundation runner, retaining
|
|
30
|
+
its revision-checked account controls and bounded local output listing.
|
|
31
|
+
- Add explicit menu links for free Ghostget updates and optional paid development
|
|
32
|
+
support. Hraness Accounts owns the browser confirmation; the menu sends no
|
|
33
|
+
local account details or email address.
|
|
34
|
+
- Add the shared optional support link to the static website footer, retaining
|
|
35
|
+
the existing production-only Ghostget newsletter form.
|
|
36
|
+
- Retain timeout escalation until the direct iMessage RPC process group exits,
|
|
37
|
+
including descendants that ignore termination and close inherited pipes.
|
|
38
|
+
|
|
10
39
|
## 0.18.12
|
|
11
40
|
|
|
12
41
|
- Make optional updates and support discoverable to agents after successful CLI
|
package/README.md
CHANGED
|
@@ -18,7 +18,7 @@ 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
20
|
Bring the model, planner, and tool loop you prefer. Ghostget supplies precise web
|
|
21
|
-
capabilities with local custody and explicit evidence. Its
|
|
21
|
+
capabilities with local custody and explicit evidence. Its menu-bar companion reviews accounts, pending approvals, and operation permissions through the shared desktop-foundation runner, and browses local output files with CLI guidance. See the [menu-bar companion guide](docs/menubar-release.md).
|
|
22
22
|
|
|
23
23
|
The separate public web gateway admits exact HTTPS retrieval URLs under human
|
|
24
24
|
domain and path rules. Use `ghostget web request <url>` with an authorized local control client running, and
|
|
@@ -48,6 +48,10 @@ ghostget plugin list
|
|
|
48
48
|
|
|
49
49
|
## Optional updates and support
|
|
50
50
|
|
|
51
|
+
The website footer and menu companion offer the same optional support. The menu
|
|
52
|
+
also links to free Ghostget product updates. Select a link to open Hraness
|
|
53
|
+
Accounts, then review and confirm signup or payment in the browser.
|
|
54
|
+
|
|
51
55
|
Ghostget stays free to use. After useful standalone work, the CLI may write a
|
|
52
56
|
compact discovery notice to stderr, including when stdout is JSON or piped.
|
|
53
57
|
It preserves the result on stdout and does not claim an invitation or inspect
|
|
@@ -75,7 +79,7 @@ The protocol and [Agent Skill](skills/ghostget/SKILL.md) describe the handoff.
|
|
|
75
79
|
|
|
76
80
|
## Built-in provider catalog
|
|
77
81
|
|
|
78
|
-
This v0.18.
|
|
82
|
+
This v0.18.14 source tree supports executable actions for 20 services: Beeper,
|
|
79
83
|
Bluesky, ClasificadosOnline, Facebook, Facebook Groups, Facebook Marketplace,
|
|
80
84
|
GitHub, Gmail, Hacker News, Instagram, iMessage, LinkedIn, Reddit, Substack,
|
|
81
85
|
Threads, TikTok, Twitch, WhatsApp, X, and YouTube.
|
|
@@ -90,7 +94,10 @@ Beeper is Ghostget's first provider adapter with a pinned local-CLI transport. I
|
|
|
90
94
|
manage reactions, drafts, reminders, and conversation state; and preview and
|
|
91
95
|
confirm sends, edits, group changes, and presence. Of those, 26 operations use
|
|
92
96
|
the authoritative `@beeper/cli` 0.6.2 executable; six reads use fixed Beeper
|
|
93
|
-
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
|
|
94
101
|
a generic command runner. Submission is not a claim of network delivery.
|
|
95
102
|
|
|
96
103
|
```sh
|
|
@@ -151,9 +158,9 @@ The optional npm mirror can follow later without delaying canonical delivery.
|
|
|
151
158
|
Install the single Ghostget Agent Skill with either runner:
|
|
152
159
|
|
|
153
160
|
```sh
|
|
154
|
-
npx skills add hraness/ghostget#v0.18.
|
|
161
|
+
npx skills add hraness/ghostget#v0.18.14
|
|
155
162
|
# or
|
|
156
|
-
bunx skills add hraness/ghostget#v0.18.
|
|
163
|
+
bunx skills add hraness/ghostget#v0.18.14
|
|
157
164
|
```
|
|
158
165
|
|
|
159
166
|
The skill teaches Codex, Claude Code, Cursor, and other compatible coding
|
|
@@ -163,7 +170,7 @@ install the CLI if it is missing. Start a new agent session after installation.
|
|
|
163
170
|
After the matching immutable Release exists, install this exact canonical archive:
|
|
164
171
|
|
|
165
172
|
```sh
|
|
166
|
-
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.14/hraness-ghostget-0.18.14.tgz
|
|
167
174
|
ghostget adapter sync-bundled --json
|
|
168
175
|
ghostget doctor
|
|
169
176
|
```
|
|
@@ -191,7 +198,7 @@ For that same released coordinate, install Ghostget in an agent or application
|
|
|
191
198
|
that owns its own model, planning, tool loop, approvals, and interface:
|
|
192
199
|
|
|
193
200
|
```sh
|
|
194
|
-
bun add https://github.com/hraness/ghostget/releases/download/v0.18.
|
|
201
|
+
bun add https://github.com/hraness/ghostget/releases/download/v0.18.14/hraness-ghostget-0.18.14.tgz
|
|
195
202
|
```
|
|
196
203
|
|
|
197
204
|
```ts
|
|
@@ -803,7 +810,9 @@ absorbed into explicit account IDs; `targets status`, `version`, and top-level
|
|
|
803
810
|
`export` are internal; `accounts add`, `accounts remove`, and `messages delete`
|
|
804
811
|
are R4 and unavailable to provider dispatch; and plain `status` is among the
|
|
805
812
|
53 unsupported paths. None of those three R4 paths appears in the selected
|
|
806
|
-
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,
|
|
807
816
|
destructive, caller-selected network, or arbitrary-filesystem commands into
|
|
808
817
|
agent authority.
|
|
809
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-g6na3p6k.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.14",
|
|
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",
|
|
@@ -275,6 +276,7 @@
|
|
|
275
276
|
"src/cli.ts",
|
|
276
277
|
"src/cli-intro.ts",
|
|
277
278
|
"src/support.ts",
|
|
279
|
+
"src/support-profile.ts",
|
|
278
280
|
"src/cursor-token.ts",
|
|
279
281
|
"src/derive-command-helper.ts",
|
|
280
282
|
"src/derivation-dnr-readiness.ts",
|
|
@@ -330,6 +332,7 @@
|
|
|
330
332
|
"src/providers/imessage-automation.ts",
|
|
331
333
|
"src/providers/whatsapp-automation.ts",
|
|
332
334
|
"src/providers/whatsapp-automation-runtime.ts",
|
|
335
|
+
"src/providers/beeper-automation.ts",
|
|
333
336
|
"src/providers/messaging-native-install.ts",
|
|
334
337
|
"src/providers/messaging-native-artifacts.ts",
|
|
335
338
|
"src/assets/messaging-runtime",
|
|
@@ -584,6 +587,8 @@
|
|
|
584
587
|
"src/control/credential-helper.ts",
|
|
585
588
|
"src/control/account-revision.ts",
|
|
586
589
|
"src/control/interface-cli.ts",
|
|
590
|
+
"src/control/menubar-cli.ts",
|
|
591
|
+
"src/control/menubar-icon.ts",
|
|
587
592
|
"src/control/bundled-interfaces.ts"
|
|
588
593
|
],
|
|
589
594
|
"scripts": {
|
|
@@ -609,15 +614,14 @@
|
|
|
609
614
|
"check:static": "bun run typecheck && bun run check:effect && bun run website:check && bun run test:npm-release",
|
|
610
615
|
"check:package": "bun run build && bun run test:package",
|
|
611
616
|
"check:macos": "bun run ./scripts/ci-macos-check.ts",
|
|
612
|
-
"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",
|
|
613
619
|
"kb:refresh": "bunx --bun github:hraness/kb#v0.15.2 refresh --root kb",
|
|
614
620
|
"kb:check:lane": "bunx --bun github:hraness/kb#v0.15.2 check --root kb --no-catalog",
|
|
615
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 .",
|
|
616
622
|
"kb:catalog": "bunx --bun github:hraness/kb#v0.15.2 catalog --root kb",
|
|
617
623
|
"prepack": "bun run check",
|
|
618
|
-
"check:effect": "bun scripts/check-effect-architecture.ts"
|
|
619
|
-
"menubar:build": "bun scripts/build-menubar.ts",
|
|
620
|
-
"menubar:check": "bun scripts/check-menubar.ts"
|
|
624
|
+
"check:effect": "bun scripts/check-effect-architecture.ts"
|
|
621
625
|
},
|
|
622
626
|
"dependencies": {
|
|
623
627
|
"@hraness/kb": "https://github.com/hraness/kb/releases/download/v0.19.6/hraness-kb-0.19.6.tgz",
|
|
@@ -628,11 +632,12 @@
|
|
|
628
632
|
"source-map": "0.6.1",
|
|
629
633
|
"source-map-support": "0.5.21",
|
|
630
634
|
"typescript": "6.0.3",
|
|
631
|
-
"@1password/sdk": "0.5.0"
|
|
635
|
+
"@1password/sdk": "0.5.0",
|
|
636
|
+
"@hraness/desktop-foundation": "https://github.com/hraness/desktop-foundation/releases/download/v0.7.0/hraness-desktop-foundation-0.7.0.tgz"
|
|
632
637
|
},
|
|
633
638
|
"devDependencies": {
|
|
634
639
|
"@hraness/design-kit": "github:hraness/design-kit#v0.8.0",
|
|
635
|
-
"@hraness/site-footer": "github:hraness/site-footer#v0.
|
|
640
|
+
"@hraness/site-footer": "github:hraness/site-footer#v0.13.0",
|
|
636
641
|
"@hraness/ui": "github:hraness/ui#v0.5.13",
|
|
637
642
|
"@steipete/sweet-cookie": "0.4.3",
|
|
638
643
|
"@types/bun": "^1.3.14",
|
package/skills/ghostget/SKILL.md
CHANGED
|
@@ -19,7 +19,7 @@ description: >-
|
|
|
19
19
|
|
|
20
20
|
# Ghostget
|
|
21
21
|
|
|
22
|
-
Ghostget supplies bounded CLI and SDK capabilities with a menu-bar companion for local outputs and CLI guidance. Use it from the caller's own agent loop; Ghostget does not run a model.
|
|
22
|
+
Ghostget supplies bounded CLI and SDK capabilities with a menu-bar companion for account, approval, and permission review plus local outputs and CLI guidance. Use it from the caller's own agent loop; Ghostget does not run a model.
|
|
23
23
|
|
|
24
24
|
## Install or verify Ghostget
|
|
25
25
|
|
|
@@ -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.14 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.14/hraness-ghostget-0.18.14.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.14` 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.14/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.14/hraness-ghostget-0.18.14.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
|
}
|