Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ Historical entries retain their original delivery coordinates.

## Unreleased

## 0.18.45

This release keeps the shipped type sources compiling under a consumer's
strict compiler flags and moves the knowledge-base runtime to the
immutable Wordcell release.

- The packaged type sources compile again under a consumer's strict
compiler flags. Consumers that set `erasableSyntaxOnly` and narrow
`ProcessEnv.NODE_ENV` to its literal union, as Next.js does, can now
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ Install [Bun 1.3.14](https://bun.sh/docs/installation) if needed, then install
Ghostget and read a public page:

```sh
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.44/hraness-ghostget-0.18.44.tgz
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.45/hraness-ghostget-0.18.45.tgz
ghostget read https://example.com
```

Expand All @@ -49,9 +49,9 @@ which always names the latest published release. Upgrading from Wrench? Read the
The optional Agent Skill teaches your agent when and how to use Ghostget:

```sh
npx skills add hraness/ghostget#v0.18.44
npx skills add hraness/ghostget#v0.18.45
# With Bun instead:
bunx skills add hraness/ghostget#v0.18.44
bunx skills add hraness/ghostget#v0.18.45
```

Start a new agent session, then ask: “Use Ghostget to read https://example.com
Expand Down Expand Up @@ -150,7 +150,7 @@ firewall.

## Built-in provider catalog

This v0.18.44 source tree supports executable actions for 21 services: Beeper,
This v0.18.45 source tree supports executable actions for 21 services: Beeper,
Bluesky, ClasificadosOnline, Facebook, Facebook Groups, Facebook Marketplace,
GitHub, Gmail, Hacker News, Instagram, iMessage, LinkedIn, Reddit, Substack,
Threads, TikTok, Twitch, WebMCP Registry, WhatsApp, X, and YouTube. LinkedIn
Expand Down Expand Up @@ -234,7 +234,7 @@ For that same released coordinate, install Ghostget in an agent or application
that owns its own model, planning, tool loop, approvals, and interface:

```sh
bun add https://github.com/hraness/ghostget/releases/download/v0.18.44/hraness-ghostget-0.18.44.tgz
bun add https://github.com/hraness/ghostget/releases/download/v0.18.45/hraness-ghostget-0.18.45.tgz
```

```ts
Expand Down
2 changes: 1 addition & 1 deletion dist/apple-photos-client.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// @bun
import {
GHOSTGET_VERSION
} from "./index-p8gqwqtd.js";
} from "./index-4sy438tg.js";
import {
canonicalJson,
sha256
Expand Down
2 changes: 1 addition & 1 deletion dist/beeper-client.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ import {
} from "./index-26yq8q16.js";
import {
GHOSTGET_VERSION
} from "./index-p8gqwqtd.js";
} from "./index-4sy438tg.js";
import {
canonicalJson,
canonicalJsonSha256Matches,
Expand Down
2 changes: 1 addition & 1 deletion dist/index-p8gqwqtd.js → dist/index-4sy438tg.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @bun
// src/version.ts
var GHOSTGET_VERSION = "0.18.44";
var GHOSTGET_VERSION = "0.18.45";

export { GHOSTGET_VERSION };
4 changes: 2 additions & 2 deletions docs/contracts.md
Original file line number Diff line number Diff line change
Expand Up @@ -128,7 +128,7 @@ matches some IDs lists the installed ones and exits 0.
{
"ok": true,
"contract": "ghostget.contract-catalog.v1",
"ghostget": { "version": "0.18.44" },
"ghostget": { "version": "0.18.45" },
"generatedAt": "2026-09-21T20:00:00.000Z",
"vocabulary": {
"risks": ["R1", "R2", "R3", "R4"],
Expand Down Expand Up @@ -186,7 +186,7 @@ does not parse is an error (exit 3) and no catalog is read.
{
"ok": false,
"contract": "ghostget.contract-check.v1",
"ghostget": { "version": "0.18.44" },
"ghostget": { "version": "0.18.45" },
"plan": { "collectionKey": "hraness-social-profile-statistics", "reads": 15 },
"reads": [
{ "index": 0, "accountKey": "x-hraness", "adapter": "x-web", "operation": "profiles.read",
Expand Down
2 changes: 1 addition & 1 deletion docs/microsoft-graph-qualification.md
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# Microsoft Graph activation evidence

The Microsoft Graph plugin ships as a disabled candidate starting with
0.18.44. Source, parser, HTTP-fixture,
0.18.45. Source, parser, HTTP-fixture,
package, and registry tests can admit the artifact without activating it.
Neither operation may be marked `observed` from those tests alone.

Expand Down
4 changes: 2 additions & 2 deletions docs/publishing.md
Original file line number Diff line number Diff line change
Expand Up @@ -222,12 +222,12 @@ delivery proceeds through a new source-qualified version.

## Install the canonical release

These commands require the matching published immutable v0.18.44 release.
These commands require the matching published immutable v0.18.45 release.

For the CLI:

```sh
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.44/hraness-ghostget-0.18.44.tgz
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.45/hraness-ghostget-0.18.45.tgz
ghostget --version
ghostget doctor --json
```
Expand Down
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
{
"name": "@hraness/ghostget",
"version": "0.18.44",
"version": "0.18.45",
"description": "Ghostget gives your AI agent named web actions: read a page, archive one media item, or use a connected account, without credentials or a browser to steer.",
"license": "MIT",
"type": "module",
Expand Down
19 changes: 10 additions & 9 deletions scripts/npm-release-workflow.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -1220,7 +1220,7 @@ describe("npm publication contract", () => {
(MAX_UNPACKED_BYTES + MAX_PACKED_ENTRIES * 1_023 + 1_024) / 512,
) * 512,
);
expect(MAX_PACKAGE_TAR_BYTES).toBe(24_574_464);
expect(MAX_PACKAGE_TAR_BYTES).toBe(24_574_976);
expect(MAX_PACKAGE_TAR_BYTES % 512).toBe(0);
expect(artifact).toContain("maxOutputLength: MAX_PACKAGE_TAR_BYTES");
expect(artifact).not.toContain("const maximumTarBytes");
Expand Down Expand Up @@ -1425,10 +1425,11 @@ describe("npm publication contract", () => {
expect(budget).toContain("00ead58f3e0268855e0face59da2460faa723c68c18e19542c37fd891cd4431f");
expect(budget).toContain("81b82626d55fcc0ef960ac59c3dfc0e90ed6417756d614b00796d5c4122b5072");
expect(budget).toContain("d5681ab13f0bc005bcd4bbf4b18152de887c062e7e8be3d0ecc28f14e11177d5");
expect(budget).toContain("0d6a1de00fd825d700b1ed0505b6fa34992f11d1deb42a5c255f7cfc295eedbc");
expect(Object.isFrozen(repairPackageMeasurement)).toBeTrue();
expect(repairPackageMeasurement).toMatchObject({
archiveSha256: "d5681ab13f0bc005bcd4bbf4b18152de887c062e7e8be3d0ecc28f14e11177d5",
packedBytes: 12_125_748, unpackedBytes: 23_940_758, entryCount: 618,
archiveSha256: "0d6a1de00fd825d700b1ed0505b6fa34992f11d1deb42a5c255f7cfc295eedbc",
packedBytes: 12_125_761, unpackedBytes: 23_940_938, entryCount: 618,
packedPlatformProjection: 12_387, packedPortabilityAllowance: 4_096,
payloadPlatformProjection: 353, payloadAllowance: 65,
});
Expand All @@ -1438,8 +1439,8 @@ describe("npm publication contract", () => {
expect(budget).toContain("12,141,169 packed; 23,937,025 + 353 + 65 = 23,937,443 unpacked");
expect(budget).toContain("23,930,250 + 353 + 65 = 23,930,668 unpacked");
expect(budget).toContain("12,141,373 packed; 23,937,545 + 353 + 65 = 23,937,963 unpacked");
expect(MAX_PACKED_BYTES).toBe(12_142_231);
expect(MAX_PACKED_BYTES).toBe(12_125_748 + 12_387 + 4_096);
expect(MAX_PACKED_BYTES).toBe(12_142_244);
expect(MAX_PACKED_BYTES).toBe(12_125_761 + 12_387 + 4_096);
expect(budget).toContain("aa127b3193c9bb3b0cb5deece5927be60ccb7111a50169320d322ffdeaa13f39");
expect(budget).toContain("0c331bab3ab3df69a108e18f5f29845b0db90c281cbd6455c0d90fa0b24081e2");
expect(budget).toContain("873cad8139fda303e2d19c6afd61cf549cf9b4d1d76b2a1d6d632a6afe6bd0d1");
Expand Down Expand Up @@ -1560,7 +1561,7 @@ describe("npm publication contract", () => {
expect(budget).toContain("47684b3e2eb5cf3ed07fbb520aade8c7251d993f75262fbf1af627d9081a1a5f");
expect(budget).toContain("23,688,277 + 353 + 65 = 23,688,695");
expect(budget).toContain("23,759,283 + 353 + 65 = 23,759,701");
expect(MAX_UNPACKED_BYTES).toBe(23_941_176);
expect(MAX_UNPACKED_BYTES).toBe(23_941_356);
expect(budget).toContain("23,037,873 + 65 = 23,037,938");
expect(budget).toContain("f9f3ab38a682690ceaa2699a7309997512030f0fa500a9dc29dcd108123dc41f");
expect(budget).toContain("23,038,557 + 65 = 23,038,622");
Expand Down Expand Up @@ -1593,7 +1594,7 @@ describe("npm publication contract", () => {
expect(budget).toContain("01875f12ab73a49d6c7d6bf520dc3d318db816addee2fa7981889f35c958cf7c");
expect(budget).toContain("b12909f08f7c19460ced56e30619f4860a1183f4b0106170c07837dae577a937");
expect(budget).toContain("0b212ac291218528dcf979370110a36f10850e046ca90a536057d9a44e807d1d");
expect(MAX_UNPACKED_BYTES).toBe(23_940_758 + 353 + 65);
expect(MAX_UNPACKED_BYTES).toBe(23_940_938 + 353 + 65);
expect(budget).toContain("22,794,052 + 65 = 22,794,117");
expect(budget).toContain("c482efe748f880e3717727d6d39fd92a68953e6eea766642b329ba47ae772d80");
expect(budget).toContain("22,759,423 + 65 = 22,759,488");
Expand Down Expand Up @@ -1629,8 +1630,8 @@ describe("npm publication contract", () => {
expect(packageArtifactBudget).toEqual({
entryCount: { min: 618, max: 618 },
fileCount: { min: 618, max: 618 },
packedBytes: { min: 1_600_000, max: 12_142_231 },
unpackedBytes: { min: 9_000_000, max: 23_941_176 },
packedBytes: { min: 1_600_000, max: 12_142_244 },
unpackedBytes: { min: 9_000_000, max: 23_941_356 },
});
});

Expand Down
19 changes: 15 additions & 4 deletions scripts/package-budget.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2083,14 +2083,25 @@
// Retain the same platform projections and allowances:
// 12,125,748 + 12,387 + 4,096 = 12,142,231 packed;
// 23,940,758 + 353 + 65 = 23,941,176 unpacked.
//
// The 0.18.45 release bumps the version pins, adds its changelog section
// over merged main 2ed33bb, and rebuilds the version chunk; no other
// source or adapter file changes. After `bun run build`, a clean
// npm 11.19.0 pack --ignore-scripts with Node 24.18.1 on darwin arm64
// measured 618 entries, 12,125,761 packed bytes, and 23,940,938
// unpacked bytes; archive SHA-256
// 0d6a1de00fd825d700b1ed0505b6fa34992f11d1deb42a5c255f7cfc295eedbc.
// Retain the same platform projections and allowances:
// 12,125,761 + 12,387 + 4,096 = 12,142,244 packed;
// 23,940,938 + 353 + 65 = 23,941,356 unpacked.
export const repairPackageMeasurement = Object.freeze({
scope: "erasableSyntaxOnly packaged-source compatibility and @hraness/local-custody 0.9.1 pin",
scope: "Ghostget 0.18.45 release over merged main 2ed33bb",
command: "npm pack --ignore-scripts",
npmVersion: "11.19.0",
platform: "darwin-arm64",
archiveSha256: "d5681ab13f0bc005bcd4bbf4b18152de887c062e7e8be3d0ecc28f14e11177d5",
packedBytes: 12_125_748,
unpackedBytes: 23_940_758,
archiveSha256: "0d6a1de00fd825d700b1ed0505b6fa34992f11d1deb42a5c255f7cfc295eedbc",
packedBytes: 12_125_761,
unpackedBytes: 23_940_938,
entryCount: 618,
packedPlatformProjection: 12_387,
packedPortabilityAllowance: 4_096,
Expand Down
10 changes: 5 additions & 5 deletions skills/ghostget/references/install.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,14 +17,14 @@ If Bun is missing, stop and direct the user to the official
[Bun installation guide](https://bun.sh/docs/installation). Do not switch
package managers or pipe an unreviewed installer into a shell.

This reference is authored for the exact v0.18.44 release coordinate. Use it
This reference is authored for the exact v0.18.45 release coordinate. Use it
only from the matching release-bound Agent Skill after its canonical archive and
immutable GitHub Release exist. If the coordinate is not public, stop instead
of substituting `main`, another tag, or a different package version. Install
that exact release and verify a public-page read:

```sh
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.44/hraness-ghostget-0.18.44.tgz
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.45/hraness-ghostget-0.18.45.tgz
ghostget read https://example.com
```

Expand All @@ -47,21 +47,21 @@ for the requested workflow; an unconnected provider or missing media tool does
not prevent a public-page read, and overall provider readiness can be false on
a fresh installation.

The package is `@hraness/ghostget`; `@hraness/ghostget@0.18.44` is an optional npm
The package is `@hraness/ghostget`; `@hraness/ghostget@0.18.45` is an optional npm
mirror only after verified registry publication. Canonical installation does not
wait for registry publication.

When upgrading from Wrench, use `ghostget` for new commands and
`GHOSTGET_STATE_HOME` for an explicit state root. Existing state is selected in
place; do not rename, copy, or delete a state directory as part of the upgrade.
The [migration guide](https://github.com/hraness/ghostget/blob/v0.18.44/docs/ghostget-migration.md)
The [migration guide](https://github.com/hraness/ghostget/blob/v0.18.45/docs/ghostget-migration.md)
explains the retained state aliases and durable protocol names.

Do not clone the repository merely to run the CLI. Importing the SDK is a
separate project dependency and does not install a global command:

```sh
bun add https://github.com/hraness/ghostget/releases/download/v0.18.44/hraness-ghostget-0.18.44.tgz
bun add https://github.com/hraness/ghostget/releases/download/v0.18.45/hraness-ghostget-0.18.45.tgz
```

`ghostget adapter sync-bundled` upgrades exact bundled baselines, including an
Expand Down
2 changes: 1 addition & 1 deletion skills/ghostget/references/microsoft-graph.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Microsoft Graph contacts and calendar

This disabled candidate ships starting with 0.18.44.
This disabled candidate ships starting with 0.18.45.
The `microsoft-graph-official` plugin reserves two read operations. Both are
`capture-required`: Ghostget rejects them before reading credentials or making
a network request. The implementation has synthetic tests; an authorized
Expand Down
2 changes: 1 addition & 1 deletion src/beeper-client-types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -96,7 +96,7 @@ export type BeeperContactInteractionExportReceipt = Readonly<{
implementation: Readonly<{
producer: Readonly<{
package: "@hraness/ghostget";
version: "0.18.44";
version: "0.18.45";
}>;
officialCli: Readonly<{
implementation: "github.com/beeper/cli";
Expand Down
2 changes: 1 addition & 1 deletion src/cli.ts
Original file line number Diff line number Diff line change
Expand Up @@ -114,7 +114,7 @@ export function isImmediateGhostgetVersionRequest(
&& (second === undefined || second === "--json");
}

/** `ghostget 0.18.44`, or `{"name":"ghostget","version":"0.18.44"}` with `--json`. */
/** `ghostget 0.18.45`, or `{"name":"ghostget","version":"0.18.45"}` with `--json`. */
export function ghostgetVersionText(rawArguments: readonly string[]): string {
return rawArguments.includes("--json")
? `${JSON.stringify({ name: "ghostget", version: GHOSTGET_VERSION })}\n`
Expand Down
2 changes: 1 addition & 1 deletion src/contracts-check.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ describe("checkCollectionPlan", () => {
const check = checkCollectionPlan(examplePlan(), exampleCatalog());
expect(check.ok).toBeTrue();
expect(check.contract).toBe("ghostget.contract-check.v1");
expect(check.ghostget).toEqual({ version: "0.18.44" });
expect(check.ghostget).toEqual({ version: "0.18.45" });
expect(check.plan).toEqual({ collectionKey: "example-social-statistics", reads: 3 });
expect(check.reads[0]).toEqual({
index: 0,
Expand Down
2 changes: 1 addition & 1 deletion src/contracts.test-support.ts
Original file line number Diff line number Diff line change
Expand Up @@ -95,7 +95,7 @@ export function exampleCatalog(): ContractCatalogV1 {
return {
ok: true,
contract: CONTRACT_CATALOG_V1,
ghostget: { version: "0.18.44" },
ghostget: { version: "0.18.45" },
generatedAt: "2026-09-21T20:00:00.000Z",
vocabulary: catalogVocabularyValue,
adapters: [
Expand Down
2 changes: 1 addition & 1 deletion src/media/manifest.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -465,7 +465,7 @@ function trackedYtDlpManifest(
describe("Ghostget media manifest", () => {
test("uses one Ghostget-owned schema and transcriber identity", () => {
expect(GHOSTGET_MEDIA_SCHEMA_VERSION).toBe(1);
expect(GHOSTGET_MEDIA_VERSION).toBe("0.18.44");
expect(GHOSTGET_MEDIA_VERSION).toBe("0.18.45");
expect(localTranscriptVariantSegments(localIdentity)).toEqual([
"transcript",
"local",
Expand Down
2 changes: 1 addition & 1 deletion src/version.ts
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
/** Canonical immutable Ghostget package release identity. */
export const GHOSTGET_VERSION = "0.18.44" as const;
export const GHOSTGET_VERSION = "0.18.45" as const;
2 changes: 1 addition & 1 deletion website/build.ts
Original file line number Diff line number Diff line change
Expand Up @@ -107,7 +107,7 @@ export const PUBLISHER_URL = "https://github.com/hraness" as const;
export const HRANESS_URL = "https://hraness.com/" as const;
export const HRANESS_ORGANIZATION_ID = `${HRANESS_URL}#organization` as const;
export const SKILL_REPOSITORY = "hraness/ghostget" as const;
export const CONTENT_REVIEWED_RELEASE = "v0.18.44" as const;
export const CONTENT_REVIEWED_RELEASE = "v0.18.45" as const;
export const DEFAULT_POSTHOG_HOST = "https://us.i.posthog.com" as const;
export const DEMO_PUBLIC_FILES = [
"wrench-first-capture.gif",
Expand Down
Loading