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
12 changes: 12 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,18 @@ Historical entries retain their original delivery coordinates.

## Unreleased

## 0.18.86

Publish MP4 video on LinkedIn, Threads, and Substack and repair the post-create response bindings on four providers.

- `linkedin-web` `media.publish@1` observes one plan-bound MP4: member video upload registration and byte transfer, the normalized create response with the nested share URN, durable accepted-target retention, and exact permalink readback.
- `threads` `media.publish@1` observes one plan-bound MP4: container create, transcode polling with rendition-dimension binding, and permalink readback.
- `substack-web` `media.publish@1` observes one plan-bound MP4: upload initialization, ordered presigned S3 multipart transfer, transcode and status polling, video-attachment binding, exact Note create, and independent readback of the bound `media_upload_id` and `mediaUpload` state.
- The X, Threads, LinkedIn, and Substack `posts.publish` create responses bind the shapes providers actually return, and the Substack Note create body and feed entity projection match the observed payloads.
- Derivation network-guard readiness now accepts wildcard domains: the sibling-negative probe sits outside the wildcard subtree instead of inside it.
- A crash-interrupted session removal no longer wedges the keyless session store: orphaned state-helper coordination artifacts no longer count as encrypted state, and the artifact-name predicate is shared with read projections.
- `substack-web` keeps its shipped `1.7.0` reader identity as a route-scoped predecessor distribution.

## 0.18.85

Import the Beeper SDK without initializing the provider command definitions.
Expand Down
10 changes: 5 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,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.85/hraness-ghostget-0.18.85.tgz
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.86/hraness-ghostget-0.18.86.tgz
ghostget read https://example.com
```

Expand All @@ -48,9 +48,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.85
npx skills add hraness/ghostget#v0.18.86
# With Bun instead:
bunx skills add hraness/ghostget#v0.18.85
bunx skills add hraness/ghostget#v0.18.86
```

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

## Built-in provider catalog

This v0.18.85 source tree supports executable actions for 21 services: Beeper,
This v0.18.86 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 @@ -266,7 +266,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.85/hraness-ghostget-0.18.85.tgz
bun add https://github.com/hraness/ghostget/releases/download/v0.18.86/hraness-ghostget-0.18.86.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-vtpm6ga0.js";
} from "./index-0c7jvbdw.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
@@ -1,7 +1,7 @@
// @bun
import {
GHOSTGET_VERSION
} from "./index-vtpm6ga0.js";
} from "./index-0c7jvbdw.js";
import {
canonicalJson,
canonicalJsonSha256Matches,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,11 +2,11 @@
import {
ensureImsgNativeResources,
verifyImsgNativeResources
} from "./index-pngvnj0q.js";
} from "./index-hynts08j.js";
import {
ensurePrivateStateDirectory,
ghostgetStateHome
} from "./index-s52dfzqt.js";
} from "./index-wszz7b2r.js";
import"./index-6fv50zce.js";
import"./index-5m1wfgkw.js";
import"./index-26yq8q16.js";
Expand Down
2 changes: 1 addition & 1 deletion dist/index-vtpm6ga0.js → dist/index-0c7jvbdw.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// @bun
// src/version.ts
var GHOSTGET_VERSION = "0.18.85";
var GHOSTGET_VERSION = "0.18.86";

export { GHOSTGET_VERSION };
6 changes: 3 additions & 3 deletions dist/index-pngvnj0q.js → dist/index-hynts08j.js
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
// @bun
import {
ensurePrivateStateDirectory
} from "./index-s52dfzqt.js";
} from "./index-wszz7b2r.js";
import {
__require
} from "./index-z1w83f81.js";
Expand Down Expand Up @@ -217,11 +217,11 @@ async function installBundledMessagingRuntime(provider, environment = process.en
await file.close();
}
if (provider === "imessage") {
const { installReviewedImsgBinary } = await import("./imessage-direct-install-rc7txgp5.js");
const { installReviewedImsgBinary } = await import("./imessage-direct-install-xgyjatez.js");
const result = await installReviewedImsgBinary(path, environment);
return { version: result.version, sha256: result.executableSha256, alreadyPresent: result.alreadyPresent };
}
const { installReviewedWhatsAppAutomationBinary } = await import("./whatsapp-automation-runtime-2v9x3j80.js");
const { installReviewedWhatsAppAutomationBinary } = await import("./whatsapp-automation-runtime-yjz34ncv.js");
return await installReviewedWhatsAppAutomationBinary(path, environment);
} finally {
await unlink(path);
Expand Down
7 changes: 7 additions & 0 deletions dist/index-s52dfzqt.js → dist/index-wszz7b2r.js
Original file line number Diff line number Diff line change
Expand Up @@ -1282,6 +1282,13 @@ function ensurePrivateStateDirectory(path, environment = process.env) {
}
return response.targetIdentity;
}
var stateHelperArtifactNamePatterns = Object.freeze([
/^\.io-write-[1-9][0-9]{0,9}-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.tmp$/u,
/^\.io-mutation-[a-f0-9]{64}-(?:waiting|candidate|held)-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.lock$/u,
/^\.io-mutation-stage-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}-[1-9][0-9]{0,9}\.tmp$/u,
/^\.io-remove-file-[0-9a-f]{8}-[0-9a-f]{4}-4[0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}\.quarantine$/u,
/^\.io-remove(?:-tree)?-[1-9][0-9]{0,9}-[1-9][0-9]{0,15}-[0-9a-f]{12}4[0-9a-f]{3}[89ab][0-9a-f]{15}\.quarantine$/u
]);
function snapshotPrivateStateDirectory(path, environment = process.env, expectedTarget, options = {}) {
const root = ghostgetStateHome(environment);
const identity = ensureClaimedStateRoot(root);
Expand Down
4 changes: 2 additions & 2 deletions dist/messaging-automation-api.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import {

// src/messaging-automation-api.ts
async function createMessagingAutomationHost(providers, environment) {
const { MessagingAutomationHost } = await import("./messaging-automation-tn4gf00y.js");
const { MessagingAutomationHost } = await import("./messaging-automation-s68zhpsa.js");
return new MessagingAutomationHost(providers, environment);
}
async function installBundledMessagingRuntime(provider, environment) {
return (await import("./messaging-native-install-a1jy4mse.js")).installBundledMessagingRuntime(provider, environment);
return (await import("./messaging-native-install-efhe2e86.js")).installBundledMessagingRuntime(provider, environment);
}
export {
installBundledMessagingRuntime,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@ import {
ensurePrivateStateDirectory,
ghostgetStateHome,
snapshotPrivateStateDirectory
} from "./index-s52dfzqt.js";
} from "./index-wszz7b2r.js";
import"./index-6fv50zce.js";
import"./index-5m1wfgkw.js";
import"./index-26yq8q16.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ import {
materializeImsgNativeResources,
readBundledMessagingAsset,
verifyImsgNativeResources
} from "./index-pngvnj0q.js";
import"./index-s52dfzqt.js";
} from "./index-hynts08j.js";
import"./index-wszz7b2r.js";
import"./index-6fv50zce.js";
import"./index-5m1wfgkw.js";
import"./index-26yq8q16.js";
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ import {
ensurePrivateStateDirectory,
ghostgetStateHome,
processOwnerStatus
} from "./index-s52dfzqt.js";
} from "./index-wszz7b2r.js";
import"./index-6fv50zce.js";
import {
startProviderPluginCleanupTrackedOperation
Expand Down
2 changes: 1 addition & 1 deletion docs/publishing.md
Original file line number Diff line number Diff line change
Expand Up @@ -337,7 +337,7 @@ These commands require the matching published immutable v0.18.85 release.
For the CLI:

```sh
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.85/hraness-ghostget-0.18.85.tgz
bun add --global https://github.com/hraness/ghostget/releases/download/v0.18.86/hraness-ghostget-0.18.86.tgz
ghostget --version
ghostget doctor --json
```
Expand Down
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
105 changes: 105 additions & 0 deletions kb/articles/post-by-threads-on-threads/capture.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,105 @@
{
"schemaVersion": 4,
"document": {
"path": "post-by-threads-on-threads.md",
"bytes": 1757,
"sha256": "ab30f3617004c8c33698c05920886951d5ca6116d6cbb7501964db3baa25feae"
},
"sourceUrl": "https://www.threads.com/@hraness",
"canonicalUrl": "https://www.threads.com/@hraness",
"capturedAt": "2026-10-05T14:10:16.833Z",
"platform": "threads",
"status": "complete",
"scope": "page",
"acquisition": {
"method": "browser-fresh",
"finalUrl": "https://www.threads.com/@hraness",
"contentType": "text/html; charset=utf-8"
},
"extraction": {
"extractor": "defuddle:threads",
"score": 9548,
"wordCount": 223,
"capturedItems": 1,
"expectedItems": null
},
"attempts": [
{
"method": "public-api",
"outcome": "skipped",
"message": "no stable public structured adapter"
},
{
"method": "http",
"outcome": "succeeded",
"message": "complete; 0 words; 1 items"
},
{
"method": "cookie-http",
"outcome": "succeeded",
"message": "complete; 0 words; 1 items"
},
{
"method": "browser-fresh",
"outcome": "succeeded",
"message": "complete; 147 words; 1 items"
}
],
"assets": [
{
"source": "https://scontent-mia5-1.cdninstagram.com/v/t51.82787-15/834318489_17986965720099423_793010400322550474_n.jpg",
"url": "https://scontent-mia5-1.cdninstagram.com/v/t51.82787-15/834318489_17986965720099423_793010400322550474_n.jpg",
"path": "assets/69f72f037fb9b5a96b109cf295826bc693f68be9c429aaffb23b61e927a22b26.jpg",
"mimeType": "image/jpeg",
"bytes": 83198,
"sha256": "69f72f037fb9b5a96b109cf295826bc693f68be9c429aaffb23b61e927a22b26"
},
{
"source": "https://scontent-mia3-1.cdninstagram.com/v/t51.82787-19/779787970_17980344444099423_5647745513502034641_n.jpg",
"url": "https://scontent-mia3-1.cdninstagram.com/v/t51.82787-19/779787970_17980344444099423_5647745513502034641_n.jpg",
"path": "assets/9f4dead02f45b686580db309380f29969e0f448818662d81a5be8cba3346da25.jpg",
"mimeType": "image/jpeg",
"bytes": 64820,
"sha256": "9f4dead02f45b686580db309380f29969e0f448818662d81a5be8cba3346da25"
},
{
"source": "https://scontent-mia3-1.cdninstagram.com/v/t51.71878-15/830324728_1611951653761384_8875728722481838194_n.jpg",
"url": "https://scontent-mia3-1.cdninstagram.com/v/t51.71878-15/830324728_1611951653761384_8875728722481838194_n.jpg",
"path": "assets/b056d369885d5dceb4c000cd67ec76eb7450da2222994ecbe048489abc08e22c.jpg",
"mimeType": "image/jpeg",
"bytes": 12869,
"sha256": "b056d369885d5dceb4c000cd67ec76eb7450da2222994ecbe048489abc08e22c"
}
],
"artifacts": {
"images": {
"requested": true,
"status": "captured",
"files": 3
},
"media": {
"requested": false,
"status": "not-requested",
"files": 0
},
"videoContext": {
"requested": false,
"status": "not-requested",
"thumbnailPath": null,
"transcriptLanguage": null,
"transcriptCueCount": 0,
"transcriptTruncated": false,
"metadata": null
}
},
"evidence": {
"requested": "none",
"screenshotPath": null,
"screenshotStatus": "not-requested",
"sourceHtmlStatus": "not-requested",
"sourceHtmlPath": null
},
"warnings": [
"Seeded explicitly selected cookies into the owned browser without broadening their domain, path, Secure, HttpOnly, SameSite, or expiry attributes."
]
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,77 @@
---
title: "Post by @Threads on Threads"
source: "https://www.threads.com/@hraness"
author: "@Threads"
published: "2026-09-30"
description: "hraness"
clipped: "2026-10-05"
platform: "threads"
capture_status: "complete"
capture_method: "browser-fresh"
capture_scope: "page"
---
# Post by @Threads on Threads

hraness

tokenmaxxer

AI Threads

Business Threads

Tech Threads

AI Threads

Business Threads

Tech Threads

Music Threads

Food Threads

Art Threads

Book Threads

Photographers of Threads

Cooking Threads

Pinned

Music Threads

i'm reimagining the DAW

one-shotted in a couple hours with a bunch of GPT 6.1 Sol Ultra in my software factory

original track "Valhalla" – handcrafted using my human brain and hands (though i'm cooking on some agentic music composition tools, more on that later)

sound on 🔊

threads image verification probe 2026-10-05 06:55 UTC

threads image verification probe 2026-10-05 06:50 UTC

![](assets/b056d369885d5dceb4c000cd67ec76eb7450da2222994ecbe048489abc08e22c.jpg) ![Photo by hraness on October 05, 2026. May be a meme of text.](assets/69f72f037fb9b5a96b109cf295826bc693f68be9c429aaffb23b61e927a22b26.jpg) ![Photo by hraness on October 05, 2026. May be a meme of text.](assets/69f72f037fb9b5a96b109cf295826bc693f68be9c429aaffb23b61e927a22b26.jpg)

> **@hraness** · 2026-09-30
>
> Pinned
>
> Music Threads
>
> 4d
>
> i'm reimagining the DAW
>
> one-shotted in a couple hours with a bunch of GPT 6.1 Sol Ultra in my software factory
>
> original track "Valhalla" – handcrafted using my human brain and hands (though i'm cooking on some agentic music composition tools, more on that later)
>
> sound on 🔊

![Cover image](assets/9f4dead02f45b686580db309380f29969e0f448818662d81a5be8cba3346da25.jpg)
Loading
Loading