@hraness/ghostget 0.17.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +458 -0
- package/LICENSE +21 -0
- package/README.md +1359 -0
- package/bunfig.toml +2 -0
- package/dist/apple-photos-client.js +704 -0
- package/dist/beeper-client.js +4602 -0
- package/dist/client.js +1605 -0
- package/dist/index-26yq8q16.js +31 -0
- package/dist/index-9t13b4k7.js +508 -0
- package/dist/index-axwm9b3v.js +5 -0
- package/dist/index-gwk7rbyj.js +30 -0
- package/dist/index.js +701 -0
- package/dist/messaging.js +1130 -0
- package/dist/omni-client.js +1406 -0
- package/dist/whatsapp-client.js +355 -0
- package/docs/imessage-direct-provider.md +106 -0
- package/docs/rental-listings.md +94 -0
- package/package.json +600 -0
- package/skills/ghostget/SKILL.md +251 -0
- package/skills/ghostget/agents/openai.yaml +4 -0
- package/skills/ghostget/references/adapter-contract.md +181 -0
- package/skills/ghostget/references/apple-photos.md +115 -0
- package/skills/ghostget/references/article-drafts.md +235 -0
- package/skills/ghostget/references/code-owned-provider-scaffold.md +134 -0
- package/skills/ghostget/references/cross-posting-video.md +139 -0
- package/skills/ghostget/references/cross-posting.md +82 -0
- package/skills/ghostget/references/derivation.md +390 -0
- package/skills/ghostget/references/hraness-social-profile-stats.json +269 -0
- package/skills/ghostget/references/install.md +66 -0
- package/skills/ghostget/references/linkedin-adapter.md +442 -0
- package/skills/ghostget/references/messaging.md +168 -0
- package/skills/ghostget/references/meta-comet-contract.md +153 -0
- package/skills/ghostget/references/platform-patterns.md +122 -0
- package/skills/ghostget/references/provider-plugins.md +496 -0
- package/skills/ghostget/references/reddit-flair.md +78 -0
- package/skills/ghostget/references/safety-and-state.md +214 -0
- package/skills/ghostget/references/settlement-and-duplicate-cleanup.md +79 -0
- package/skills/ghostget/references/social-platform-routing.md +66 -0
- package/skills/ghostget/references/social-profile-stats.md +195 -0
- package/skills/ghostget/references/social-video-platform-routing.md +89 -0
- package/skills/ghostget/references/whatsapp-adapter.md +101 -0
- package/skills/ghostget/references/x-adapter.md +332 -0
- package/skills/ghostget/references/x-ai-disclosure.md +71 -0
- package/src/apple-photos-cli.ts +639 -0
- package/src/apple-photos-client-types.ts +168 -0
- package/src/apple-photos-client.ts +201 -0
- package/src/apple-photos-contact-evidence.ts +838 -0
- package/src/apple-photos-local-source.ts +1131 -0
- package/src/args.ts +2053 -0
- package/src/article-draft-document.ts +417 -0
- package/src/article-draft-embeds.ts +123 -0
- package/src/article-draft-images.ts +214 -0
- package/src/assets/adapter-template/wrench-adapter.json +40 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.json +1500 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v1.0.0.json +129 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v1.1.0.json +207 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.0.0.json +1463 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.1.0.json +1463 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.2.0.json +1475 -0
- package/src/assets/adapters/beeper/wrench-web-adapter.v2.3.0.json +1488 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.0.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.1.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.2.0.json +581 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.3.0.json +615 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.4.0.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.5.0.json +684 -0
- package/src/assets/adapters/bluesky/wrench-web-adapter.v1.6.0.json +684 -0
- package/src/assets/adapters/clasificados/wrench-web-adapter.json +54 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.json +750 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.0.0.json +706 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.1.0.json +703 -0
- package/src/assets/adapters/facebook/wrench-web-adapter.v1.2.0.json +750 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.json +682 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.0.0.json +583 -0
- package/src/assets/adapters/facebook-group/wrench-web-adapter.v1.1.0.json +682 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.json +437 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.0.0.json +383 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.0.json +437 -0
- package/src/assets/adapters/facebook-marketplace/wrench-web-adapter.v1.1.1.json +437 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.json +880 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.0.0.json +740 -0
- package/src/assets/adapters/facebook-page/wrench-web-adapter.v1.1.0.json +880 -0
- package/src/assets/adapters/github/wrench-web-adapter.json +69 -0
- package/src/assets/adapters/github/wrench-web-adapter.v1.0.0.json +42 -0
- package/src/assets/adapters/github/wrench-web-adapter.v1.1.0.json +69 -0
- package/src/assets/adapters/gmail/wrench-adapter.json +161 -0
- package/src/assets/adapters/gmail/wrench-adapter.v1.2.0.json +157 -0
- package/src/assets/adapters/hacker-news/wrench-web-adapter.json +315 -0
- package/src/assets/adapters/hacker-news/wrench-web-adapter.v1.0.0.json +315 -0
- package/src/assets/adapters/imessage/wrench-web-adapter.json +236 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.json +719 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.0.0.json +627 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.1.0.json +609 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.2.0.json +640 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.3.0.json +671 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.4.0.json +710 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.5.0.json +710 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.6.0.json +719 -0
- package/src/assets/adapters/instagram/wrench-web-adapter.v1.7.0.json +719 -0
- package/src/assets/adapters/linkedin/wrench-adapter.json +442 -0
- package/src/assets/adapters/linkedin/wrench-adapter.v0.4.0.json +124 -0
- package/src/assets/adapters/linkedin/wrench-adapter.v1.0.0.json +411 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.json +914 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.0.0.json +604 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.1.0.json +604 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.10.0.json +809 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.11.0.json +809 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.12.0.json +820 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.13.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.14.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.15.0.json +819 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.16.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.17.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.18.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.19.0.json +874 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.2.0.json +731 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.3.0.json +768 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.4.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.5.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.6.0.json +808 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.7.0.json +825 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.8.0.json +792 -0
- package/src/assets/adapters/linkedin/wrench-web-adapter.v1.9.0.json +809 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.json +855 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.0.0.json +577 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.1.0.json +604 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.10.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.11.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.12.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.2.0.json +653 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.3.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.4.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.5.0.json +712 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.6.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.7.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.8.0.json +713 -0
- package/src/assets/adapters/reddit/wrench-web-adapter.v1.9.0.json +713 -0
- package/src/assets/adapters/substack/wrench-web-adapter.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.0.0.json +817 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.1.0.json +812 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.2.0.json +812 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.3.0.json +902 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.4.0.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.5.0.json +936 -0
- package/src/assets/adapters/substack/wrench-web-adapter.v1.6.0.json +936 -0
- package/src/assets/adapters/threads/wrench-web-adapter.json +692 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.0.0.json +629 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.1.0.json +623 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.2.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.3.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.4.0.json +622 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.5.0.json +699 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.6.0.json +693 -0
- package/src/assets/adapters/threads/wrench-web-adapter.v1.7.0.json +692 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.json +762 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.0.0.json +681 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.1.0.json +708 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.2.0.json +762 -0
- package/src/assets/adapters/tiktok/wrench-web-adapter.v1.3.0.json +762 -0
- package/src/assets/adapters/twitch/wrench-web-adapter.json +42 -0
- package/src/assets/adapters/twitch/wrench-web-adapter.v1.0.0.json +42 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.json +400 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.0.0.json +355 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.1.0.json +386 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.2.0.json +386 -0
- package/src/assets/adapters/whatsapp/wrench-web-adapter.v1.3.0.json +400 -0
- package/src/assets/adapters/x/wrench-adapter.json +749 -0
- package/src/assets/adapters/x/wrench-adapter.v1.0.0.json +700 -0
- package/src/assets/adapters/x/wrench-adapter.v1.1.0.json +707 -0
- package/src/assets/adapters/x/wrench-web-adapter.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.1.0.json +579 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.10.0.json +685 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.11.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.12.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.13.0.json +712 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.2.0.json +578 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.3.0.json +610 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.4.0.json +617 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.5.0.json +634 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.6.0.json +632 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.7.0.json +649 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.8.0.json +649 -0
- package/src/assets/adapters/x/wrench-web-adapter.v1.9.0.json +683 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.json +561 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.0.0.json +465 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.1.0.json +519 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.2.0.json +561 -0
- package/src/assets/adapters/youtube/wrench-web-adapter.v1.3.0.json +561 -0
- package/src/assets/code-owned-provider-template/plugin.test.ts.template +54 -0
- package/src/assets/code-owned-provider-template/plugin.ts.template +102 -0
- package/src/assets/code-owned-provider-template/runtime.internal.test.ts.template +44 -0
- package/src/assets/code-owned-provider-template/runtime.ts.template +59 -0
- package/src/assets/code-owned-provider-template/wrench-adapter.json.template +33 -0
- package/src/assets/fonts/nebula-sans/LICENSE.txt +96 -0
- package/src/assets/fonts/nebula-sans/NebulaSans-Book.woff2 +0 -0
- package/src/assets/fonts/nebula-sans/PROVENANCE.md +14 -0
- package/src/assets.d.ts +4 -0
- package/src/auth.ts +1157 -0
- package/src/beeper-client-types.ts +169 -0
- package/src/beeper-client.ts +250 -0
- package/src/beeper-contact-interactions-cli.ts +180 -0
- package/src/beeper-contact-interactions.ts +1612 -0
- package/src/beeper-message-bundle-v1.ts +257 -0
- package/src/beeper-message-like-me-cli.ts +84 -0
- package/src/beeper-message-like-me-export.ts +2274 -0
- package/src/beeper-message-like-me-recovery.ts +931 -0
- package/src/beeper-message-like-me-source.ts +4034 -0
- package/src/browser-admission.ts +928 -0
- package/src/browser-snapshots.ts +260 -0
- package/src/browser.ts +3873 -0
- package/src/canonical-json.ts +60 -0
- package/src/catalog-cli.ts +638 -0
- package/src/cli.ts +208 -0
- package/src/client-types.ts +301 -0
- package/src/client.ts +2726 -0
- package/src/confirmed-write-failure.ts +44 -0
- package/src/confirmed-write-model.ts +72 -0
- package/src/confirmed-write-platform.ts +1055 -0
- package/src/confirmed-write-program.ts +224 -0
- package/src/confirmed-write-runtime.ts +16 -0
- package/src/cursor-token.ts +228 -0
- package/src/derivation-dnr-readiness.ts +367 -0
- package/src/derivation-file-chooser.ts +384 -0
- package/src/derivation-network-boundary.ts +835 -0
- package/src/derivation-network-guard.ts +782 -0
- package/src/derivation-network-proxy-helper.ts +440 -0
- package/src/derivation-network-proxy.ts +385 -0
- package/src/derive-command-helper.ts +693 -0
- package/src/derive-fixtures.ts +343 -0
- package/src/derive-review.ts +980 -0
- package/src/derive.ts +4754 -0
- package/src/fixtures/beeper-message-like-me-v1/accounts.ndjson +2 -0
- package/src/fixtures/beeper-message-like-me-v1/conversations.ndjson +1 -0
- package/src/fixtures/beeper-message-like-me-v1/manifest.json +1 -0
- package/src/fixtures/beeper-message-like-me-v1/messages.ndjson +2 -0
- package/src/fixtures/beeper-message-like-me-v1/participants.ndjson +3 -0
- package/src/fixtures/beeper-message-like-me-v1/reactions.ndjson +1 -0
- package/src/fixtures/beeper-message-like-me-v1/tombstones.ndjson +1 -0
- package/src/ghostget.ts +3672 -0
- package/src/gmail-capture.ts +1244 -0
- package/src/har-internal.ts +1242 -0
- package/src/har.ts +743 -0
- package/src/index.ts +218 -0
- package/src/invocation-read-platform.ts +55 -0
- package/src/invocation-read-program.ts +93 -0
- package/src/invocation-read-runtime.ts +11 -0
- package/src/linked-device-lifecycle-admission.ts +450 -0
- package/src/linked-device-lifecycle-journal.ts +1560 -0
- package/src/linked-device-lifecycle-runtime.ts +1602 -0
- package/src/local-cli-admission.ts +135 -0
- package/src/local-cli-contracts.ts +271 -0
- package/src/local-cli-execution.ts +98 -0
- package/src/local-cli-surface-contract.ts +1510 -0
- package/src/local-cli-tool-identity.ts +336 -0
- package/src/media/archive.ts +2325 -0
- package/src/media/args.ts +303 -0
- package/src/media/cli.ts +287 -0
- package/src/media/doctor.ts +475 -0
- package/src/media/ffmpeg.ts +1330 -0
- package/src/media/http-capture.ts +711 -0
- package/src/media/http-probe.ts +593 -0
- package/src/media/http.ts +387 -0
- package/src/media/index.ts +10 -0
- package/src/media/local-transcription.ts +613 -0
- package/src/media/lock.ts +321 -0
- package/src/media/manifest.ts +1712 -0
- package/src/media/metadata.ts +906 -0
- package/src/media/process.ts +723 -0
- package/src/media/revision.ts +166 -0
- package/src/media/runtime-closure.ts +1063 -0
- package/src/media/source-router.ts +187 -0
- package/src/media/transcriber-config.ts +1122 -0
- package/src/media/transcript-persistence-model.ts +15 -0
- package/src/media/transcript-persistence-platform.ts +89 -0
- package/src/media/transcript-persistence-program.ts +39 -0
- package/src/media/transcript-persistence-runtime.ts +24 -0
- package/src/media/transcript.ts +616 -0
- package/src/media/utf8-order.ts +30 -0
- package/src/media/whisper-cpp.ts +464 -0
- package/src/media/whisper-language.ts +58 -0
- package/src/media/yt-dlp.ts +439 -0
- package/src/message-like-me-agentic-messaging.ts +882 -0
- package/src/messaging-action-store.ts +793 -0
- package/src/messaging-runtime.ts +2136 -0
- package/src/messaging-store.ts +539 -0
- package/src/messaging-types.ts +1663 -0
- package/src/messaging.ts +334 -0
- package/src/model.ts +2671 -0
- package/src/oauth-google.ts +888 -0
- package/src/omni-client-types.ts +306 -0
- package/src/omni-client.ts +2225 -0
- package/src/omni-limits.ts +34 -0
- package/src/omni-model.ts +1614 -0
- package/src/omni-request.ts +379 -0
- package/src/omni-runtime.ts +1632 -0
- package/src/operation-deadline.ts +189 -0
- package/src/path-helper.ts +1656 -0
- package/src/pinned-https.ts +194 -0
- package/src/plan-assets.ts +832 -0
- package/src/platform-catalog.ts +1832 -0
- package/src/plugins/beeper-linked-device/plugin.ts +310 -0
- package/src/plugins/bluesky-web/plugin.ts +178 -0
- package/src/plugins/clasificados-web/plugin.ts +66 -0
- package/src/plugins/github-web/plugin.ts +80 -0
- package/src/plugins/gmail-official/plugin.ts +110 -0
- package/src/plugins/hacker-news-web/plugin.ts +52 -0
- package/src/plugins/imessage-direct/plugin.ts +195 -0
- package/src/plugins/imessage-direct/vendor/0001-fix-keep-AppleScript-send-payloads-out-of-child-argv.patch +1430 -0
- package/src/plugins/imessage-direct/vendor/0002-feat-rpc-add-exact-chat-lookup.patch +225 -0
- package/src/plugins/imessage-direct/vendor/provenance.json +80 -0
- package/src/plugins/linkedin-official/plugin.ts +84 -0
- package/src/plugins/linkedin-web/plugin.ts +412 -0
- package/src/plugins/meta-web/plugin.ts +317 -0
- package/src/plugins/reddit-web/flair.ts +492 -0
- package/src/plugins/reddit-web/plugin.ts +477 -0
- package/src/plugins/substack-web/plugin.ts +124 -0
- package/src/plugins/tiktok-web/plugin.ts +67 -0
- package/src/plugins/twitch-web/plugin.ts +54 -0
- package/src/plugins/whatsapp-linked-device/plugin.ts +105 -0
- package/src/plugins/x-official/plugin.ts +64 -0
- package/src/plugins/x-web/plugin.ts +488 -0
- package/src/plugins/youtube-web/plugin.ts +101 -0
- package/src/portable-run-recovery.ts +466 -0
- package/src/process-identity.ts +501 -0
- package/src/profile-clone-helper.ts +104 -0
- package/src/provider-catalog-views.ts +51 -0
- package/src/provider-context.ts +69 -0
- package/src/provider-contract-definitions-x.ts +45 -0
- package/src/provider-contract-definitions.ts +948 -0
- package/src/provider-contract-input-gmail.ts +176 -0
- package/src/provider-contract-input-linkedin.ts +77 -0
- package/src/provider-contract-input-x.ts +304 -0
- package/src/provider-contract-planning.ts +23 -0
- package/src/provider-contract-semantic-identity.ts +54 -0
- package/src/provider-contracts.ts +251 -0
- package/src/provider-http.ts +723 -0
- package/src/provider-plugin-auth.ts +36 -0
- package/src/provider-plugin-builtins.ts +229 -0
- package/src/provider-plugin-cleanup-barrier.ts +229 -0
- package/src/provider-plugin-cleanup-execution.ts +79 -0
- package/src/provider-plugin-cleanup-resource.ts +470 -0
- package/src/provider-plugin-contract-identity.ts +707 -0
- package/src/provider-plugin-host.ts +1972 -0
- package/src/provider-plugin-identifiers.ts +60 -0
- package/src/provider-plugin-invocation-lease.ts +889 -0
- package/src/provider-plugin-lifecycle-kernel.ts +566 -0
- package/src/provider-plugin-lifecycle.ts +1455 -0
- package/src/provider-plugin-module-analysis.ts +336 -0
- package/src/provider-plugin-package.ts +2530 -0
- package/src/provider-plugin-portable-authority.ts +106 -0
- package/src/provider-plugin-portable-catalog.ts +94 -0
- package/src/provider-plugin-portable-identity.ts +315 -0
- package/src/provider-plugin-portable-runtime.ts +2057 -0
- package/src/provider-plugin-protocol.ts +1625 -0
- package/src/provider-plugin-registry.ts +3342 -0
- package/src/provider-plugin-store.ts +2155 -0
- package/src/provider-plugin-test-fixture.ts +5 -0
- package/src/provider-plugin.ts +4907 -0
- package/src/provider-plugins.generated.ts +43 -0
- package/src/provider-plugins.ts +8 -0
- package/src/provider-subject.ts +41 -0
- package/src/provider.ts +315 -0
- package/src/providers/beeper-local-runtime.ts +5426 -0
- package/src/providers/beeper-local.ts +2739 -0
- package/src/providers/beeper-messaging.ts +462 -0
- package/src/providers/beeper-omni.ts +1159 -0
- package/src/providers/bluesky-web-runtime.ts +2895 -0
- package/src/providers/bluesky-web.ts +1614 -0
- package/src/providers/clasificados-web-runtime.ts +255 -0
- package/src/providers/clasificados-web.ts +503 -0
- package/src/providers/contact-projection.ts +301 -0
- package/src/providers/github-read-model.ts +94 -0
- package/src/providers/github-read-platform.ts +165 -0
- package/src/providers/github-read-program.ts +97 -0
- package/src/providers/github-web-runtime.ts +320 -0
- package/src/providers/github-web.ts +403 -0
- package/src/providers/gmail-api.ts +2834 -0
- package/src/providers/gmail-omni.ts +830 -0
- package/src/providers/gmail.ts +1130 -0
- package/src/providers/hacker-news-web-runtime.ts +220 -0
- package/src/providers/hacker-news-web.ts +809 -0
- package/src/providers/imessage-direct-install.ts +354 -0
- package/src/providers/imessage-direct-messaging.ts +532 -0
- package/src/providers/imessage-direct-omni.ts +400 -0
- package/src/providers/imessage-direct-runtime.ts +1498 -0
- package/src/providers/imessage-direct.ts +351 -0
- package/src/providers/instagram-video-foundations.ts +913 -0
- package/src/providers/instagram-web-profile-browser.ts +600 -0
- package/src/providers/iso-bmff.ts +338 -0
- package/src/providers/linkedin-company-platform.ts +42 -0
- package/src/providers/linkedin-company-program.ts +88 -0
- package/src/providers/linkedin-contact-failure.ts +84 -0
- package/src/providers/linkedin-contact-platform.ts +45 -0
- package/src/providers/linkedin-contact-program.ts +91 -0
- package/src/providers/linkedin-profile-activity-failure.ts +76 -0
- package/src/providers/linkedin-profile-activity-platform.ts +41 -0
- package/src/providers/linkedin-profile-activity-program.ts +67 -0
- package/src/providers/linkedin-read-failure.ts +52 -0
- package/src/providers/linkedin-self-platform.ts +53 -0
- package/src/providers/linkedin-self-program.ts +122 -0
- package/src/providers/linkedin-web-article-browser.ts +794 -0
- package/src/providers/linkedin-web-bootstrap.ts +146 -0
- package/src/providers/linkedin-web-contact.ts +830 -0
- package/src/providers/linkedin-web-feed-browser.ts +832 -0
- package/src/providers/linkedin-web-feed.ts +864 -0
- package/src/providers/linkedin-web-post-browser.ts +653 -0
- package/src/providers/linkedin-web-profile-browser.ts +683 -0
- package/src/providers/linkedin-web-runtime.ts +2388 -0
- package/src/providers/linkedin-web.ts +3305 -0
- package/src/providers/linkedin.ts +1885 -0
- package/src/providers/meta-bootstrap.ts +1043 -0
- package/src/providers/meta-facebook-group.ts +690 -0
- package/src/providers/meta-marketplace-relay.ts +747 -0
- package/src/providers/meta-omni.ts +373 -0
- package/src/providers/meta-relay-bundle.ts +1049 -0
- package/src/providers/meta-web-descriptors.ts +1740 -0
- package/src/providers/meta-web-runtime.ts +3388 -0
- package/src/providers/meta-web.ts +2931 -0
- package/src/providers/read-failure.ts +139 -0
- package/src/providers/reddit-omni.ts +462 -0
- package/src/providers/reddit-web-runtime.ts +1929 -0
- package/src/providers/reddit-web.ts +1611 -0
- package/src/providers/rental-listings.ts +460 -0
- package/src/providers/substack-omni.ts +406 -0
- package/src/providers/substack-video-mp4.ts +33 -0
- package/src/providers/substack-web-runtime.ts +2812 -0
- package/src/providers/substack-web.ts +1502 -0
- package/src/providers/tiktok-video-mp4.ts +33 -0
- package/src/providers/tiktok-web-runtime.ts +770 -0
- package/src/providers/tiktok-web.ts +2786 -0
- package/src/providers/twitch-web-runtime.ts +226 -0
- package/src/providers/twitch-web.ts +274 -0
- package/src/providers/whatsapp-account-identity.ts +55 -0
- package/src/providers/whatsapp-contact-projection-helper.ts +874 -0
- package/src/providers/whatsapp-contact-projection-protocol.ts +403 -0
- package/src/providers/whatsapp-interaction-projection-helper.ts +1452 -0
- package/src/providers/whatsapp-interaction-projection-protocol.ts +462 -0
- package/src/providers/whatsapp-message-export-projection-protocol.ts +532 -0
- package/src/providers/whatsapp-messaging.ts +132 -0
- package/src/providers/whatsapp-omni.ts +586 -0
- package/src/providers/whatsapp-web-runtime.ts +3108 -0
- package/src/providers/whatsapp-web.ts +1037 -0
- package/src/providers/x-image-provenance.ts +523 -0
- package/src/providers/x-made-with-ai.ts +106 -0
- package/src/providers/x-transaction-id.ts +413 -0
- package/src/providers/x-web-runtime.ts +3485 -0
- package/src/providers/x-web.ts +2332 -0
- package/src/providers/x.ts +1889 -0
- package/src/providers/youtube-web-runtime.ts +1400 -0
- package/src/providers/youtube-web.ts +1221 -0
- package/src/read-admission-runtime.ts +91 -0
- package/src/read-client.ts +521 -0
- package/src/read-effect-platform.ts +7 -0
- package/src/read-effect-runtime.ts +14 -0
- package/src/read-effect.ts +52 -0
- package/src/read-projection-admission.ts +866 -0
- package/src/read-projections.ts +3151 -0
- package/src/recovery.ts +1492 -0
- package/src/reviewed-template.ts +146 -0
- package/src/run-journal.ts +1272 -0
- package/src/runtime.ts +5116 -0
- package/src/scripts/generate-provider-plugin-catalog.ts +121 -0
- package/src/scripts/install-whatsapp-protocol.sh +232 -0
- package/src/scripts/recover-install-stages.ts +1491 -0
- package/src/scripts/resolve-state-home.ts +30 -0
- package/src/scripts/scaffold-web-provider.ts +973 -0
- package/src/scripts/sync-bundled-adapters.ts +695 -0
- package/src/session-secrets.ts +1183 -0
- package/src/state-helper.bunfig.toml +2 -0
- package/src/state-helper.ts +2914 -0
- package/src/storage.ts +3842 -0
- package/src/transport-policy.ts +2 -0
- package/src/usage.ts +182 -0
- package/src/version.ts +2 -0
- package/src/web-session-authentication-policy.ts +136 -0
- package/src/web-session-cleanup-admission.ts +2344 -0
- package/src/web-session-cleanup-join.ts +99 -0
- package/src/web-session-client.ts +996 -0
- package/src/web-session-contract-definitions.ts +820 -0
- package/src/web-session-contract-planning.ts +42 -0
- package/src/web-session-contracts.ts +228 -0
- package/src/web-session-cookies.ts +500 -0
- package/src/web-session-execution.ts +385 -0
- package/src/web-session-http.ts +373 -0
- package/src/web-session-read-errors.ts +19 -0
- package/src/web-session-read-runtime.ts +124 -0
- package/src/web-session-recovery.ts +818 -0
- package/src/web-session-sites.ts +58 -0
- package/src/web-session-template.ts +994 -0
- package/src/web-session.ts +93 -0
- package/src/whatsapp-client-binding.ts +21 -0
- package/src/whatsapp-client-types.ts +75 -0
- package/src/whatsapp-client.ts +395 -0
- package/src/whatsapp-export-coordinate.ts +17 -0
- package/src/whatsapp-message-bundle-v2.ts +195 -0
- package/src/whatsapp-message-like-me-cli.ts +195 -0
- package/src/whatsapp-message-like-me-export.ts +1072 -0
- package/src/whatsapp-message-like-me-source.ts +1012 -0
- package/tsconfig.json +67 -0
package/src/cli.ts
ADDED
|
@@ -0,0 +1,208 @@
|
|
|
1
|
+
#!/usr/bin/env bun
|
|
2
|
+
|
|
3
|
+
import { ghostgetUsage } from "./usage";
|
|
4
|
+
import { GHOSTGET_VERSION } from "./version";
|
|
5
|
+
import type {
|
|
6
|
+
GhostgetCatalogCommand,
|
|
7
|
+
GhostgetCatalogOutput,
|
|
8
|
+
} from "./catalog-cli";
|
|
9
|
+
|
|
10
|
+
type CliOutput = {
|
|
11
|
+
readonly stdout: GhostgetCatalogOutput["stdout"];
|
|
12
|
+
readonly stderr?: GhostgetCatalogOutput["stderr"];
|
|
13
|
+
};
|
|
14
|
+
|
|
15
|
+
type GhostgetProcessModule = {
|
|
16
|
+
readonly runGhostgetProcess: (overrides?: {
|
|
17
|
+
readonly rawArguments?: readonly string[];
|
|
18
|
+
readonly output?: Required<CliOutput>;
|
|
19
|
+
}) => Promise<void>;
|
|
20
|
+
};
|
|
21
|
+
|
|
22
|
+
type GhostgetCatalogModule = {
|
|
23
|
+
readonly runGhostgetCatalogCommand: (
|
|
24
|
+
command: GhostgetCatalogCommand,
|
|
25
|
+
environment: Readonly<Record<string, string | undefined>>,
|
|
26
|
+
output: GhostgetCatalogOutput,
|
|
27
|
+
) => Promise<number>;
|
|
28
|
+
};
|
|
29
|
+
|
|
30
|
+
type PublicKbCliModule = {
|
|
31
|
+
readonly main: (
|
|
32
|
+
rawArguments?: readonly string[],
|
|
33
|
+
output?: Required<CliOutput>,
|
|
34
|
+
) => Promise<number>;
|
|
35
|
+
};
|
|
36
|
+
|
|
37
|
+
const defaultOutput: GhostgetCatalogOutput = {
|
|
38
|
+
stdout: (value) => process.stdout.write(value),
|
|
39
|
+
stderr: (value) => process.stderr.write(value),
|
|
40
|
+
};
|
|
41
|
+
|
|
42
|
+
const loadGhostgetProcess = (): Promise<GhostgetProcessModule> => import("./ghostget");
|
|
43
|
+
const loadGhostgetCatalog = (): Promise<GhostgetCatalogModule> => import("./catalog-cli");
|
|
44
|
+
const loadPublicKbCli = (): Promise<PublicKbCliModule> => import("@hraness/kb/cli");
|
|
45
|
+
|
|
46
|
+
const publicGhostgetCommands = new Set([
|
|
47
|
+
"adapters",
|
|
48
|
+
"agents",
|
|
49
|
+
"backlinks",
|
|
50
|
+
"check",
|
|
51
|
+
"context",
|
|
52
|
+
"graph",
|
|
53
|
+
"index",
|
|
54
|
+
"init",
|
|
55
|
+
"links",
|
|
56
|
+
"list",
|
|
57
|
+
"notes",
|
|
58
|
+
"pdf",
|
|
59
|
+
"refresh",
|
|
60
|
+
"search",
|
|
61
|
+
"url-metadata",
|
|
62
|
+
]);
|
|
63
|
+
|
|
64
|
+
export function isPublicGhostgetCommand(rawArguments: readonly string[]): boolean {
|
|
65
|
+
const command = rawArguments[0];
|
|
66
|
+
return command !== undefined && publicGhostgetCommands.has(command);
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export function isImmediateGhostgetHelpRequest(
|
|
70
|
+
rawArguments: readonly string[],
|
|
71
|
+
): boolean {
|
|
72
|
+
return rawArguments.length === 0
|
|
73
|
+
|| (
|
|
74
|
+
rawArguments.length === 1
|
|
75
|
+
&& (
|
|
76
|
+
rawArguments[0] === "help"
|
|
77
|
+
|| rawArguments[0] === "--help"
|
|
78
|
+
|| rawArguments[0] === "-h"
|
|
79
|
+
)
|
|
80
|
+
);
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
export function isImmediateGhostgetVersionRequest(
|
|
84
|
+
rawArguments: readonly string[],
|
|
85
|
+
): boolean {
|
|
86
|
+
return rawArguments.length === 1 && rawArguments[0] === "--version";
|
|
87
|
+
}
|
|
88
|
+
|
|
89
|
+
function hasOnlyOptionalJson(
|
|
90
|
+
values: readonly string[],
|
|
91
|
+
): boolean {
|
|
92
|
+
return values.length <= 1
|
|
93
|
+
&& (values.length === 0 || values[0] === "--json");
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
function isProviderPluginId(value: string): boolean {
|
|
97
|
+
return value.length <= 63
|
|
98
|
+
&& /^[a-z][a-z0-9]*(?:-[a-z0-9]+)*$/u.test(value);
|
|
99
|
+
}
|
|
100
|
+
|
|
101
|
+
/**
|
|
102
|
+
* Recognize only complete catalog command shapes. Malformed or broader plugin
|
|
103
|
+
* commands retain the canonical parser and process boundary in ghostget.ts.
|
|
104
|
+
*/
|
|
105
|
+
export function routedGhostgetCatalogCommand(
|
|
106
|
+
rawArguments: readonly string[],
|
|
107
|
+
): GhostgetCatalogCommand | null {
|
|
108
|
+
const first = rawArguments[0];
|
|
109
|
+
if (first === "capabilities") {
|
|
110
|
+
const positional = rawArguments.slice(1).filter(
|
|
111
|
+
(argument) => !argument.startsWith("--"),
|
|
112
|
+
);
|
|
113
|
+
const options = rawArguments.slice(1).filter(
|
|
114
|
+
(argument) => argument.startsWith("--"),
|
|
115
|
+
);
|
|
116
|
+
if (positional.length > 1 || !hasOnlyOptionalJson(options)) return null;
|
|
117
|
+
return {
|
|
118
|
+
command: "capabilities",
|
|
119
|
+
...(positional[0] === undefined
|
|
120
|
+
? {}
|
|
121
|
+
: { adapterId: positional[0] }),
|
|
122
|
+
json: options.includes("--json"),
|
|
123
|
+
};
|
|
124
|
+
}
|
|
125
|
+
if (first !== "plugin" && first !== "plugins") return null;
|
|
126
|
+
const subcommand = rawArguments[1];
|
|
127
|
+
if (
|
|
128
|
+
subcommand === "list"
|
|
129
|
+
&& hasOnlyOptionalJson(rawArguments.slice(2))
|
|
130
|
+
) {
|
|
131
|
+
return {
|
|
132
|
+
command: "plugin-list",
|
|
133
|
+
json: rawArguments.includes("--json"),
|
|
134
|
+
};
|
|
135
|
+
}
|
|
136
|
+
const id = rawArguments[2];
|
|
137
|
+
if (
|
|
138
|
+
subcommand === "show"
|
|
139
|
+
&& id !== undefined
|
|
140
|
+
&& isProviderPluginId(id)
|
|
141
|
+
&& hasOnlyOptionalJson(rawArguments.slice(3))
|
|
142
|
+
) {
|
|
143
|
+
return {
|
|
144
|
+
command: "plugin-show",
|
|
145
|
+
id,
|
|
146
|
+
json: rawArguments.includes("--json"),
|
|
147
|
+
};
|
|
148
|
+
}
|
|
149
|
+
return null;
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
/**
|
|
153
|
+
* Render help, release identity, and catalog inspection without evaluating the
|
|
154
|
+
* full command graph.
|
|
155
|
+
*
|
|
156
|
+
* Every other invocation delegates to the existing process boundary, which
|
|
157
|
+
* retains its signal, exit-code, parsing, dependency, and error behavior.
|
|
158
|
+
*/
|
|
159
|
+
export async function runGhostgetCliProcess(
|
|
160
|
+
rawArguments: readonly string[] = process.argv.slice(2),
|
|
161
|
+
output: CliOutput = defaultOutput,
|
|
162
|
+
loadProcess: () => Promise<GhostgetProcessModule> = loadGhostgetProcess,
|
|
163
|
+
loadCatalog: () => Promise<GhostgetCatalogModule> = loadGhostgetCatalog,
|
|
164
|
+
loadKnowledgeCli: () => Promise<PublicKbCliModule> = loadPublicKbCli,
|
|
165
|
+
): Promise<void> {
|
|
166
|
+
if (isImmediateGhostgetHelpRequest(rawArguments)) {
|
|
167
|
+
output.stdout(ghostgetUsage);
|
|
168
|
+
process.exitCode = 0;
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
if (isImmediateGhostgetVersionRequest(rawArguments)) {
|
|
172
|
+
output.stdout(`${GHOSTGET_VERSION}\n`);
|
|
173
|
+
process.exitCode = 0;
|
|
174
|
+
return;
|
|
175
|
+
}
|
|
176
|
+
const providerArguments = rawArguments[0] === "operator"
|
|
177
|
+
&& rawArguments[1] === "doctor"
|
|
178
|
+
? ["doctor", ...rawArguments.slice(2)]
|
|
179
|
+
: rawArguments;
|
|
180
|
+
const resolvedOutput: Required<CliOutput> = {
|
|
181
|
+
stdout: output.stdout,
|
|
182
|
+
stderr: output.stderr ?? defaultOutput.stderr,
|
|
183
|
+
};
|
|
184
|
+
if (isPublicGhostgetCommand(rawArguments)) {
|
|
185
|
+
const knowledge = await loadKnowledgeCli();
|
|
186
|
+
process.exitCode = await knowledge.main(rawArguments, resolvedOutput);
|
|
187
|
+
return;
|
|
188
|
+
}
|
|
189
|
+
const catalogCommand = routedGhostgetCatalogCommand(providerArguments);
|
|
190
|
+
if (catalogCommand !== null) {
|
|
191
|
+
const catalog = await loadCatalog();
|
|
192
|
+
process.exitCode = await catalog.runGhostgetCatalogCommand(
|
|
193
|
+
catalogCommand,
|
|
194
|
+
process.env,
|
|
195
|
+
resolvedOutput,
|
|
196
|
+
);
|
|
197
|
+
return;
|
|
198
|
+
}
|
|
199
|
+
const runtime = await loadProcess();
|
|
200
|
+
await runtime.runGhostgetProcess({
|
|
201
|
+
rawArguments: providerArguments,
|
|
202
|
+
output: resolvedOutput,
|
|
203
|
+
});
|
|
204
|
+
}
|
|
205
|
+
|
|
206
|
+
if (import.meta.main) {
|
|
207
|
+
await runGhostgetCliProcess();
|
|
208
|
+
}
|
|
@@ -0,0 +1,301 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Self-contained data transfer types for the public Ghostget client.
|
|
3
|
+
*
|
|
4
|
+
* Keep this module free of runtime and provider-kernel imports so TypeScript
|
|
5
|
+
* consumers can inspect `@hraness/ghostget/client` without loading Ghostget's
|
|
6
|
+
* internal type graph.
|
|
7
|
+
*/
|
|
8
|
+
|
|
9
|
+
export type GhostgetClientEnvironment = Readonly<
|
|
10
|
+
Record<string, string | undefined>
|
|
11
|
+
>;
|
|
12
|
+
|
|
13
|
+
export type CapabilityReadRequest = {
|
|
14
|
+
readonly adapterId: string;
|
|
15
|
+
readonly operationId: string;
|
|
16
|
+
readonly input?: unknown;
|
|
17
|
+
readonly authId?: string;
|
|
18
|
+
};
|
|
19
|
+
|
|
20
|
+
export type ReadCapabilityOptions = {
|
|
21
|
+
readonly environment?: GhostgetClientEnvironment;
|
|
22
|
+
readonly freshForMs?: number;
|
|
23
|
+
readonly now?: Date;
|
|
24
|
+
};
|
|
25
|
+
|
|
26
|
+
export type RevalidateCapabilityOptions = ReadCapabilityOptions & {
|
|
27
|
+
readonly headed?: boolean;
|
|
28
|
+
readonly signal?: AbortSignal;
|
|
29
|
+
};
|
|
30
|
+
|
|
31
|
+
export type InvokeCapabilityOptions = Readonly<{
|
|
32
|
+
readonly environment?: GhostgetClientEnvironment;
|
|
33
|
+
readonly headed?: boolean;
|
|
34
|
+
readonly signal?: AbortSignal;
|
|
35
|
+
}>;
|
|
36
|
+
|
|
37
|
+
export type InvokeCapabilitySyncOptions = Readonly<{
|
|
38
|
+
readonly environment?: GhostgetClientEnvironment;
|
|
39
|
+
readonly headed?: boolean;
|
|
40
|
+
}>;
|
|
41
|
+
|
|
42
|
+
export type ReadProjectionCacheResult =
|
|
43
|
+
| {
|
|
44
|
+
readonly status: "miss";
|
|
45
|
+
readonly key: string;
|
|
46
|
+
}
|
|
47
|
+
| {
|
|
48
|
+
readonly status: "hit";
|
|
49
|
+
readonly source: "cache";
|
|
50
|
+
readonly key: string;
|
|
51
|
+
readonly output: unknown;
|
|
52
|
+
readonly dataRevision: string;
|
|
53
|
+
readonly createdAt: string;
|
|
54
|
+
readonly dataChangedAt: string;
|
|
55
|
+
readonly validatedAt: string;
|
|
56
|
+
readonly runId: string;
|
|
57
|
+
readonly ageMs: number;
|
|
58
|
+
readonly freshness: {
|
|
59
|
+
readonly state: "fresh" | "stale" | "unclassified";
|
|
60
|
+
readonly freshForMs: number | null;
|
|
61
|
+
};
|
|
62
|
+
};
|
|
63
|
+
|
|
64
|
+
export type ReadProjectionPublication = {
|
|
65
|
+
readonly key: string;
|
|
66
|
+
readonly dataRevision: string;
|
|
67
|
+
readonly validatedAt: string;
|
|
68
|
+
readonly dataChangedAt: string;
|
|
69
|
+
readonly disposition: "created" | "changed" | "unchanged" | "superseded";
|
|
70
|
+
readonly currentDataRevision?: string;
|
|
71
|
+
};
|
|
72
|
+
|
|
73
|
+
export type ReadProjectionCacheOutcome =
|
|
74
|
+
| {
|
|
75
|
+
readonly status: "stored";
|
|
76
|
+
readonly publication: ReadProjectionPublication;
|
|
77
|
+
}
|
|
78
|
+
| {
|
|
79
|
+
readonly status: "retained";
|
|
80
|
+
readonly reason: "live-read-failed";
|
|
81
|
+
}
|
|
82
|
+
| {
|
|
83
|
+
readonly status: "miss";
|
|
84
|
+
readonly reason: "no-cached-snapshot";
|
|
85
|
+
}
|
|
86
|
+
| {
|
|
87
|
+
readonly status: "skipped";
|
|
88
|
+
readonly reason: "auth-subject-unbound";
|
|
89
|
+
}
|
|
90
|
+
| {
|
|
91
|
+
readonly status: "error";
|
|
92
|
+
readonly message: string;
|
|
93
|
+
};
|
|
94
|
+
|
|
95
|
+
export type GhostgetClientPortableOperationIdentity = {
|
|
96
|
+
readonly pluginId: string;
|
|
97
|
+
readonly pluginVersion: string;
|
|
98
|
+
readonly hostApiVersion: 1;
|
|
99
|
+
readonly bundleSha256: string;
|
|
100
|
+
readonly manifestSha256: string;
|
|
101
|
+
readonly adapterId: string;
|
|
102
|
+
readonly transport: "linked-device" | "provider-api" | "web-session-api";
|
|
103
|
+
readonly surfaceId: string;
|
|
104
|
+
readonly operation: string;
|
|
105
|
+
readonly contractVersion: number;
|
|
106
|
+
readonly descriptorSha256: string;
|
|
107
|
+
};
|
|
108
|
+
|
|
109
|
+
export type GhostgetClientLocalCliToolArtifactIdentity = {
|
|
110
|
+
readonly platform: string;
|
|
111
|
+
readonly arch: string;
|
|
112
|
+
readonly executableSha256: string;
|
|
113
|
+
readonly archiveSha256?: string;
|
|
114
|
+
readonly downloadUrl?: string;
|
|
115
|
+
};
|
|
116
|
+
|
|
117
|
+
export type GhostgetClientLocalCliToolIdentity = {
|
|
118
|
+
readonly schemaVersion: 1;
|
|
119
|
+
readonly id: string;
|
|
120
|
+
readonly implementation: string;
|
|
121
|
+
readonly versionScheme: "semver" | "opaque";
|
|
122
|
+
readonly version: string;
|
|
123
|
+
readonly releaseCommit?: string;
|
|
124
|
+
readonly releaseManifestSha256?: string;
|
|
125
|
+
readonly releaseManifestUrl?: string;
|
|
126
|
+
readonly sourceUrl?: string;
|
|
127
|
+
readonly artifacts: readonly GhostgetClientLocalCliToolArtifactIdentity[];
|
|
128
|
+
};
|
|
129
|
+
|
|
130
|
+
export type GhostgetClientLocalCliContractIdentity = {
|
|
131
|
+
readonly surface: string;
|
|
132
|
+
readonly action: string;
|
|
133
|
+
readonly version: number;
|
|
134
|
+
readonly hash: string;
|
|
135
|
+
readonly tool: GhostgetClientLocalCliToolIdentity;
|
|
136
|
+
};
|
|
137
|
+
|
|
138
|
+
export type GhostgetClientRunReceiptCommon = {
|
|
139
|
+
readonly runId: string;
|
|
140
|
+
readonly planDigest: null;
|
|
141
|
+
readonly adapter: {
|
|
142
|
+
readonly id: string;
|
|
143
|
+
readonly version: string;
|
|
144
|
+
readonly hash: string;
|
|
145
|
+
};
|
|
146
|
+
readonly operation: string;
|
|
147
|
+
readonly risk: "R1";
|
|
148
|
+
readonly inputHash: string;
|
|
149
|
+
readonly auth: {
|
|
150
|
+
readonly id: string;
|
|
151
|
+
readonly hash: string;
|
|
152
|
+
readonly kind:
|
|
153
|
+
| "browser-profile"
|
|
154
|
+
| "cookie-source"
|
|
155
|
+
| "cookies-file"
|
|
156
|
+
| "linked-device-store"
|
|
157
|
+
| "oauth-token-file"
|
|
158
|
+
| "public-web-session";
|
|
159
|
+
};
|
|
160
|
+
readonly status: "succeeded" | "failed";
|
|
161
|
+
readonly dispatchStarted: false;
|
|
162
|
+
readonly dispatch: {
|
|
163
|
+
readonly planned: 0;
|
|
164
|
+
readonly started: 0;
|
|
165
|
+
readonly verified: 0;
|
|
166
|
+
};
|
|
167
|
+
readonly startedAt: string;
|
|
168
|
+
readonly finishedAt: string;
|
|
169
|
+
readonly finalOrigin: string | null;
|
|
170
|
+
readonly error: string | null;
|
|
171
|
+
};
|
|
172
|
+
|
|
173
|
+
export type GhostgetClientRunReceipt = GhostgetClientRunReceiptCommon & (
|
|
174
|
+
| {
|
|
175
|
+
readonly schemaVersion: 2;
|
|
176
|
+
readonly transport: "browser";
|
|
177
|
+
}
|
|
178
|
+
| {
|
|
179
|
+
readonly schemaVersion: 3;
|
|
180
|
+
readonly transport: "provider-api";
|
|
181
|
+
readonly providerContractHash: string;
|
|
182
|
+
}
|
|
183
|
+
| {
|
|
184
|
+
readonly schemaVersion: 4;
|
|
185
|
+
readonly transport: "web-session-api";
|
|
186
|
+
readonly webSessionContractHash: string;
|
|
187
|
+
}
|
|
188
|
+
| {
|
|
189
|
+
readonly schemaVersion: 5;
|
|
190
|
+
readonly transport: "reviewed-template-api";
|
|
191
|
+
readonly reviewedTemplateContractHash: string;
|
|
192
|
+
}
|
|
193
|
+
| {
|
|
194
|
+
readonly schemaVersion: 6;
|
|
195
|
+
readonly transport: "portable-provider-plugin";
|
|
196
|
+
readonly portablePluginContract: GhostgetClientPortableOperationIdentity;
|
|
197
|
+
}
|
|
198
|
+
| {
|
|
199
|
+
readonly schemaVersion: 7;
|
|
200
|
+
readonly transport: "local-cli";
|
|
201
|
+
readonly localCliContract: GhostgetClientLocalCliContractIdentity;
|
|
202
|
+
}
|
|
203
|
+
);
|
|
204
|
+
|
|
205
|
+
export type GhostgetClientReadFailure =
|
|
206
|
+
| {
|
|
207
|
+
readonly category: "target-unavailable";
|
|
208
|
+
readonly retryDisposition: "do-not-retry";
|
|
209
|
+
}
|
|
210
|
+
| {
|
|
211
|
+
readonly category: "auth-repair-required";
|
|
212
|
+
readonly retryDisposition: "repair-auth";
|
|
213
|
+
}
|
|
214
|
+
| {
|
|
215
|
+
readonly category:
|
|
216
|
+
| "account-mismatch"
|
|
217
|
+
| "contract-drift"
|
|
218
|
+
| "cleanup-required";
|
|
219
|
+
readonly retryDisposition: "do-not-retry";
|
|
220
|
+
}
|
|
221
|
+
| {
|
|
222
|
+
readonly category:
|
|
223
|
+
| "provider-throttled"
|
|
224
|
+
| "provider-temporary"
|
|
225
|
+
| "operation-timeout";
|
|
226
|
+
readonly retryDisposition: "retry-once-after-60s";
|
|
227
|
+
};
|
|
228
|
+
|
|
229
|
+
type GhostgetClientInvocationCommon = {
|
|
230
|
+
readonly replayed: boolean;
|
|
231
|
+
};
|
|
232
|
+
|
|
233
|
+
export type GhostgetClientInvocationResult = GhostgetClientInvocationCommon & (
|
|
234
|
+
| {
|
|
235
|
+
/** Receipt-bound top-level discriminant for ordinary control flow. */
|
|
236
|
+
readonly status: "succeeded";
|
|
237
|
+
readonly receipt: GhostgetClientRunReceipt & { readonly status: "succeeded" };
|
|
238
|
+
readonly output: unknown;
|
|
239
|
+
readonly readFailure?: never;
|
|
240
|
+
}
|
|
241
|
+
| {
|
|
242
|
+
/** Receipt-bound top-level discriminant for ordinary control flow. */
|
|
243
|
+
readonly status: "failed";
|
|
244
|
+
readonly receipt: GhostgetClientRunReceipt & { readonly status: "failed" };
|
|
245
|
+
readonly output: null;
|
|
246
|
+
readonly readFailure: GhostgetClientReadFailure;
|
|
247
|
+
}
|
|
248
|
+
);
|
|
249
|
+
|
|
250
|
+
export type RevalidatedCapabilityCurrent =
|
|
251
|
+
| Extract<ReadProjectionCacheResult, { readonly status: "hit" }>
|
|
252
|
+
| {
|
|
253
|
+
readonly source: "live";
|
|
254
|
+
readonly output: unknown;
|
|
255
|
+
}
|
|
256
|
+
| null;
|
|
257
|
+
|
|
258
|
+
export type RevalidatedCapability = {
|
|
259
|
+
readonly cachedBefore: ReadProjectionCacheResult | null;
|
|
260
|
+
readonly cachedAfter: ReadProjectionCacheResult | null;
|
|
261
|
+
readonly current: RevalidatedCapabilityCurrent;
|
|
262
|
+
readonly live: GhostgetClientInvocationResult;
|
|
263
|
+
readonly cache: ReadProjectionCacheOutcome;
|
|
264
|
+
};
|
|
265
|
+
|
|
266
|
+
export declare function readCachedCapability(
|
|
267
|
+
request: CapabilityReadRequest,
|
|
268
|
+
options?: ReadCapabilityOptions,
|
|
269
|
+
): ReadProjectionCacheResult;
|
|
270
|
+
|
|
271
|
+
export declare function revalidateCapability(
|
|
272
|
+
request: CapabilityReadRequest,
|
|
273
|
+
options?: RevalidateCapabilityOptions,
|
|
274
|
+
): Promise<RevalidatedCapability>;
|
|
275
|
+
|
|
276
|
+
/**
|
|
277
|
+
* Invoke one live R1 capability and return a discriminated result whose failed
|
|
278
|
+
* branch carries the closed read-failure category and retry disposition.
|
|
279
|
+
*/
|
|
280
|
+
export declare function invokeCapability(
|
|
281
|
+
request: CapabilityReadRequest,
|
|
282
|
+
options?: InvokeCapabilityOptions,
|
|
283
|
+
): Promise<GhostgetClientInvocationResult>;
|
|
284
|
+
|
|
285
|
+
/**
|
|
286
|
+
* Synchronous form for local CLI applications that cannot make their command
|
|
287
|
+
* surface asynchronous. It retains the same pre/post identity fences and
|
|
288
|
+
* discriminated failure policy.
|
|
289
|
+
*/
|
|
290
|
+
export declare function invokeCapabilitySync(
|
|
291
|
+
request: CapabilityReadRequest,
|
|
292
|
+
options?: InvokeCapabilitySyncOptions,
|
|
293
|
+
): GhostgetClientInvocationResult;
|
|
294
|
+
|
|
295
|
+
export declare function staleWhileRevalidateCapability(
|
|
296
|
+
request: CapabilityReadRequest,
|
|
297
|
+
options?: RevalidateCapabilityOptions,
|
|
298
|
+
): {
|
|
299
|
+
readonly cached: ReadProjectionCacheResult | null;
|
|
300
|
+
readonly revalidation: Promise<RevalidatedCapability>;
|
|
301
|
+
};
|