From b096e87a5961a0de5652e0a73b5fff5dc957dc66 Mon Sep 17 00:00:00 2001 From: Alex Godo Date: Mon, 6 Jul 2026 14:36:57 -0700 Subject: [PATCH] catalogue: add io.pilot.orthogonal v0.1.0 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Managed meta-API app (Orthogonal: one key fronting 58 APIs / 851 endpoints). 4 signed platform bundles on R2, publisher ed25519:8zcp…, vendor Orthogonal. catalogue.json re-signed. Co-Authored-By: Claude Opus 4.8 (1M context) --- .../apps/io.pilot.orthogonal/metadata.json | 106 ++++++++++++++++++ catalogue/catalogue.json | 68 ++++++++--- catalogue/catalogue.json.sig | 2 +- 3 files changed, 161 insertions(+), 15 deletions(-) create mode 100644 catalogue/apps/io.pilot.orthogonal/metadata.json diff --git a/catalogue/apps/io.pilot.orthogonal/metadata.json b/catalogue/apps/io.pilot.orthogonal/metadata.json new file mode 100644 index 00000000..2482f43f --- /dev/null +++ b/catalogue/apps/io.pilot.orthogonal/metadata.json @@ -0,0 +1,106 @@ +{ + "schema_version": 1, + "id": "io.pilot.orthogonal", + "display_name": "Orthogonal", + "tagline": "One key, 851 paid APIs — described in English, metered per user", + "description_md": "# Orthogonal — a catalog of paid tools and APIs, for your agent\n\nOrthogonal is an **API marketplace / meta-API**: a single key fronts **58\nthird-party APIs across 851 endpoints** — lead \u0026 contact enrichment, work-email\nand phone finding, web \u0026 social scraping, AI web search, company / people /\njobs data, weather, voice/phone, email inboxes, and more. You never sign up for\nthe underlying providers and you never juggle their keys — you describe what you\nneed, and pay Orthogonal per call. This Pilot app wraps Orthogonal's control\nplane behind the managed-key broker, so **your agent gets one metered, keyless\nsurface** and a **per-user $5 budget**.\n\n## The workflow: discover → price → execute\n\n1. **Discover — `orthogonal.search`** (the natural-language router ⭐).\n Describe the task in plain English, e.g. *\"find the work email and phone for\n a person given their name and company\"*, and get back the ranked APIs and\n endpoints that can do it, grouped by API with a relevance score. This is the\n \"which API do I need?\" endpoint — you don't have to know the catalog.\n2. **Price — `orthogonal.details`.** Pass an `{api, path}` and get the full\n request schema (every path/query/body param, with types and required flags)\n **and the exact price in dollars**. This is the authoritative price source —\n search and list return `null` prices.\n3. **Execute — `orthogonal.run`.** Call `{api, path, body?, query?}` and\n Orthogonal dispatches to the provider, returns the provider's data, and\n reports the exact `priceCents` charged. This is the **only call that costs\n money**.\n\n`orthogonal.integrate` and `orthogonal.list` round out discovery (code snippets\nand full-catalog browse), and `orthogonal.balance` / `.usage` / `.transactions`\n/ `.check` expose the account ledger — all free.\n\n## What you can do (representative)\n\n- **Contact \u0026 lead enrichment** — apollo, contactout, company-enrich,\n peopledatalabs, coresignal, aviato, crustdata, ocean-io, influencers-club.\n- **Work-email \u0026 phone finding** — tomba, icypeas, contactout, company-enrich.\n- **Web \u0026 AI search** — serper, linkup, tavily, exa/perplexity (unverified set).\n- **Web \u0026 social scraping** — olostep, serper-scrape, scrapecreators (107\n endpoints), scrapegraphai, fiber (92 endpoints).\n- **Company / firmographic / jobs data** — predictleads, fantastic-jobs,\n openfunnel, edges, context-dev, brand-dev.\n- **Weather, voice/phone, email inboxes** — precip, agentphone, agentmail.\n\nRun `orthogonal.search` (or `orthogonal.list`) for the live, complete set.\n\n## Pricing — how you're billed (true to real usage)\n\n- **Only `orthogonal.run` costs money.** Every discovery, pricing, and account\n call is **free**.\n- Each run is billed the **target endpoint's real price**, debited from your\n **$5 per-user budget** in micro-dollars. The `priceCents` in the run response\n is the exact amount charged (real cents); `X-Pilot-Credits-Remaining` on every\n response is your remaining budget in micro-dollars ($5 = 5000000).\n- Prices span **$0.001 – $3.50**. Distribution across the 851 endpoints: **11\n free, ~612 fixed-price, 104 \"dynamic\"** (priced only after the call). Common\n tiers: Basic $0.001–0.01, Standard $0.01–0.10, Premium $0.10–1.00. Cheap\n endpoints to start with: serper ($0.002), olostep / tomba / linkup ($0.01).\n- For a **known** cost up front, call `orthogonal.details` first. For\n **\"dynamic\"** endpoints the price is only knowable from the run response — so\n metering is done on the actual charged amount, and a single call may spend the\n last of your budget; after that, `orthogonal.run` returns **402** (the free\n discovery calls keep working).\n\n## Per-user budget \u0026 fair use\n\nEach Pilot user is seeded **$5 of credit** on first use, metered by the broker\nagainst their signed pilot identity. When the budget is exhausted, billable runs\nreturn 402. To keep the shared master account fair, the broker also enforces a\n**per-IP identity cap**: a small number of distinct pilot identities may claim a\nfresh $5 from any one network, so a depleted user can't farm new budgets by\nminting new identities. The Orthogonal account itself is the ultimate backstop —\nif it runs dry, runs return 402 until it's topped up.\n\n## Good to know\n\n- **Auth is fully managed.** The `orth_live_` master key lives only in the\n broker; the installed adapter is keyless and signs each request with your\n pilot identity. Nothing to configure.\n- **The account is shared** across Pilot users (no per-user sub-accounts on\n Orthogonal), so `orthogonal.balance` / `.usage` / `.transactions` report the\n **account-wide** figures — your **personal** remaining budget is the\n `X-Pilot-Credits-Remaining` header.\n- Errors surface verbatim: 402 insufficient credit, 404 unknown api/path, 5xx\n upstream provider error, 429 rate-limited (back off).\n- `orthogonal.help` is the self-describing discovery contract: it lists every\n method with params, cost note, and latency class.\n", + "vendor": { + "name": "Orthogonal", + "url": "https://orthogonal.com", + "contact": "apps@pilotprotocol.network", + "publisher_pubkey": "ed25519:8zcpGtp5sUw3sjLptDR9W/btumEaOv3DO3tTWN/+PCk=" + }, + "homepage": "https://orthogonal.com", + "source_url": "https://github.com/pilot-protocol/app-template", + "license": "MIT", + "categories": [ + "data", + "search", + "enrichment", + "scraping", + "ai" + ], + "keywords": [ + "orthogonal", + "api-marketplace", + "enrichment", + "lead-enrichment", + "email-finder", + "scraping", + "web-search", + "people-data", + "company-data", + "meta-api", + "natural-language" + ], + "size": { + "bundle_bytes": 5076601, + "installed_bytes": 9137279 + }, + "compat": { + "min_pilot_version": "1.10.0", + "runtimes": [ + "go" + ] + }, + "methods": [ + { + "name": "orthogonal.search", + "summary": "★ Natural-language API router. Describe a task in plain English (prompt) and get back the ranked Orthogonal APIs + endpoints that can do it — grouped by API, each with slug, path, method and a 0–1 relevance score. FREE. Start here when you don't know which of the 851 endpoints to use, then price it with orthogonal.details and execute with orthogonal.run." + }, + { + "name": "orthogonal.details", + "summary": "Full request schema (path/query/body params with types + required flags) AND the exact price in dollars for one endpoint. FREE. Call this before orthogonal.run to know the cost — it is the authoritative price source (prices are null in search/list). Price may be the string 'dynamic' for endpoints priced only after the call." + }, + { + "name": "orthogonal.integrate", + "summary": "Ready-to-paste code snippets for one endpoint. FREE. format ∈ orth-sdk (default) | run-api | curl | x402-fetch | x402-python | all." + }, + { + "name": "orthogonal.list", + "summary": "Browse the whole catalog — 58 APIs / 851 endpoints with descriptions and param schemas, paginated by limit/offset. FREE. Prices are null here; use orthogonal.details for the price of a specific endpoint." + }, + { + "name": "orthogonal.run", + "summary": "★ Execute any of the 851 provider endpoints via {api, path, body?, query?} (the HTTP method is chosen automatically). THIS IS THE ONLY CALL THAT COSTS MONEY: you are billed the target endpoint's real price and it is debited from your $5 Pilot budget. The response returns priceCents (cents actually charged) alongside the provider data, and X-Pilot-Credits-Remaining shows your budget. Once your $5 is spent, run returns 402 while the free discovery calls keep working. Prices range $0.001–$3.50; 104 endpoints are 'dynamic' (priced only from the response) — check orthogonal.details first when you need the cost up front." + }, + { + "name": "orthogonal.balance", + "summary": "Orthogonal account credit balance (string '$X.XX'). FREE, read-only. Note: your per-user $5 Pilot budget is metered separately by the broker and is surfaced in the X-Pilot-Credits-Remaining header on every call — that header, not this account balance, is your personal remaining budget." + }, + { + "name": "orthogonal.check", + "summary": "Preflight the shared account: does it hold ≥ amountCents credits? (amountCents is in Orthogonal credit units = dollars × 100000, so $5 = 500000). FREE." + }, + { + "name": "orthogonal.transactions", + "summary": "Account transaction ledger — purchases, API charges, bonuses, refunds — with amounts, direction and timestamps, paginated. FREE, read-only. Amounts are in the credits unit (dollars × 100000)." + }, + { + "name": "orthogonal.usage", + "summary": "Per-call spend history plus totalSpent over a window (dollar strings), for the shared account. FREE, read-only." + }, + { + "name": "orthogonal.help", + "summary": "Discovery: every method with params, kind, and latency class." + } + ], + "changelog": [ + { + "version": "0.1.0", + "notes": [ + "Released v0.1.0" + ] + } + ], + "links": [ + { + "label": "Source", + "url": "https://github.com/pilot-protocol/app-template" + }, + { + "label": "Website", + "url": "https://orthogonal.com" + } + ] +} diff --git a/catalogue/catalogue.json b/catalogue/catalogue.json index ec2cdcdc..35930abb 100644 --- a/catalogue/catalogue.json +++ b/catalogue/catalogue.json @@ -1,11 +1,11 @@ { "version": 2, - "updated_at": "2026-07-03T00:00:00Z", + "updated_at": "2026-07-06T21:36:22Z", "apps": [ { "id": "io.pilot.wallet", "version": "0.3.3", - "description": "On-overlay USDC payments — multichain (Base + Ethereum + Polygon).", + "description": "On-overlay USDC payments \u2014 multichain (Base + Ethereum + Polygon).", "bundle_url": "https://github.com/pilot-protocol/pilotprotocol/releases/download/wallet-v0.3.3/io.pilot.wallet-0.3.3.tar.gz", "bundle_sha256": "8d30b4331bc025c327dd2d8610362984cc9365843176e21b96a2637d8e18ff54", "display_name": "Wallet", @@ -83,7 +83,7 @@ { "id": "io.pilot.smolmachines", "version": "1.2.0", - "description": "Smol Machines — spin up fast, hardware-isolated Linux microVMs on demand (sub-second boot, real hypervisor isolation) to safely run untrusted code, GPU tasks, or headless browser automation in a disposable sandbox.", + "description": "Smol Machines \u2014 spin up fast, hardware-isolated Linux microVMs on demand (sub-second boot, real hypervisor isolation) to safely run untrusted code, GPU tasks, or headless browser automation in a disposable sandbox.", "display_name": "Smol Machines", "vendor": "smol machines", "license": "Apache-2.0", @@ -115,7 +115,7 @@ { "id": "io.telepat.ideon-free", "version": "0.3.1", - "description": "Free article generation for agents: ideon-free.generate(idea) returns a jobId; ideon-free.poll(jobId) returns the finished markdown article. Thin adapter over Ideon's ideon_write — no payment.", + "description": "Free article generation for agents: ideon-free.generate(idea) returns a jobId; ideon-free.poll(jobId) returns the finished markdown article. Thin adapter over Ideon's ideon_write \u2014 no payment.", "bundle_url": "https://github.com/pilot-protocol/catalog/releases/download/ideon-free-v0.3.1/io.telepat.ideon-free-0.3.1.tar.gz", "bundle_sha256": "dd8e37057f33eadefff6b7ff5fc99130667076ea398c10a154c345fd87dd1ad6", "publisher": "ed25519:5cqj+zTVecj8r0YRUShpgFi/g7TxDg1lkDKQzfNyDyc=" @@ -123,7 +123,7 @@ { "id": "io.pilot.slipstream", "version": "1.0.0", - "description": "SLIPSTREAM — Polymarket smart-money leaderboard, signals, tape & opportunities (Ed25519-signed API).", + "description": "SLIPSTREAM \u2014 Polymarket smart-money leaderboard, signals, tape & opportunities (Ed25519-signed API).", "bundle_url": "https://github.com/pilot-protocol/catalog/releases/download/slipstream-v1.0.0/io.pilot.slipstream-1.0.0.tar.gz", "bundle_sha256": "8f19c06c886b97abb1272e8f657773950bee747c58dab8493d454742313ef2f5", "display_name": "Slipstream", @@ -151,7 +151,7 @@ { "id": "io.pilot.miren", "version": "0.1.0", - "description": "Operate the Miren PaaS from an agent: deploy and roll back apps; inspect status, logs, and history; run the server; and diagnose connectivity — plus a passthrough exec for any miren subcommand.", + "description": "Operate the Miren PaaS from an agent: deploy and roll back apps; inspect status, logs, and history; run the server; and diagnose connectivity \u2014 plus a passthrough exec for any miren subcommand.", "display_name": "Miren", "vendor": "Miren", "license": "Proprietary", @@ -183,7 +183,7 @@ { "id": "io.pilot.otto", "version": "0.20.0", - "description": "Drive real Chrome tabs from an agent: extract page content as markdown or HTML, run site commands (Reddit, LinkedIn, Hacker News, Google), screenshot pages, and inspect relay and node status — over a relay to a browser extension, no headless farm. Plus a passthrough exec for any otto subcommand.", + "description": "Drive real Chrome tabs from an agent: extract page content as markdown or HTML, run site commands (Reddit, LinkedIn, Hacker News, Google), screenshot pages, and inspect relay and node status \u2014 over a relay to a browser extension, no headless farm. Plus a passthrough exec for any otto subcommand.", "display_name": "Otto", "vendor": "Telepat", "license": "MIT", @@ -247,7 +247,7 @@ { "id": "io.pilot.postgres", "version": "17.5.0", - "description": "PostgreSQL 17.5.0 as a native CLI for agents: stand up and manage a local Postgres server (initdb / start / stop / createdb) and run SQL with psql — aligned-table or CSV results, backslash schema introspection, database listing, and the full client/server toolchain (pg_dump, pg_restore, pg_isready, ...) via a verbatim-argv passthrough. Connects to a local or remote server via a libpq connection string or PG* env.", + "description": "PostgreSQL 17.5.0 as a native CLI for agents: stand up and manage a local Postgres server (initdb / start / stop / createdb) and run SQL with psql \u2014 aligned-table or CSV results, backslash schema introspection, database listing, and the full client/server toolchain (pg_dump, pg_restore, pg_isready, ...) via a verbatim-argv passthrough. Connects to a local or remote server via a libpq connection string or PG* env.", "display_name": "PostgreSQL", "vendor": "Pilot Protocol", "license": "PostgreSQL", @@ -279,7 +279,7 @@ { "id": "io.pilot.duckdb", "version": "1.5.4", - "description": "DuckDB 1.5.4 as a native CLI for agents: an in-process analytical SQL database (think \"SQLite for analytics\") with zero server and zero provisioning. Run SQL in-memory or against a DuckDB file and query CSV, Parquet, and JSON files directly with no import step — results as an aligned table, CSV, JSON, or Markdown. Schema/table introspection, run a .sql script, and the full CLI surface (every flag + dot-command) via a verbatim-argv passthrough. Ideal for sandboxed agents that need real SQL locally without an AWS/GCP account.", + "description": "DuckDB 1.5.4 as a native CLI for agents: an in-process analytical SQL database (think \"SQLite for analytics\") with zero server and zero provisioning. Run SQL in-memory or against a DuckDB file and query CSV, Parquet, and JSON files directly with no import step \u2014 results as an aligned table, CSV, JSON, or Markdown. Schema/table introspection, run a .sql script, and the full CLI surface (every flag + dot-command) via a verbatim-argv passthrough. Ideal for sandboxed agents that need real SQL locally without an AWS/GCP account.", "display_name": "DuckDB", "vendor": "Pilot Protocol", "license": "MIT", @@ -318,7 +318,7 @@ { "id": "io.pilot.docker", "version": "29.6.1", - "description": "Docker 29.6.1 as a native CLI for agents (Linux): delivers the Docker Engine (dockerd + containerd + runc) and the docker CLI, sha-pinned. Start a local engine (docker.engine_start), then pull images and run containers — run/ps/images/pull/logs, plus build, exec, networks, volumes, and any docker command via a verbatim-argv passthrough. Real containers on a real Linux host, no Docker Desktop.", + "description": "Docker 29.6.1 as a native CLI for agents (Linux): delivers the Docker Engine (dockerd + containerd + runc) and the docker CLI, sha-pinned. Start a local engine (docker.engine_start), then pull images and run containers \u2014 run/ps/images/pull/logs, plus build, exec, networks, volumes, and any docker command via a verbatim-argv passthrough. Real containers on a real Linux host, no Docker Desktop.", "display_name": "Docker", "vendor": "Pilot Protocol", "license": "Apache-2.0", @@ -349,7 +349,7 @@ { "id": "io.pilot.redis", "version": "8.6.2", - "description": "Redis 8.6.2 as a native CLI for agents: stand up a local in-memory data store (redis.start) and talk to it with redis-cli — SET/GET, PING, INFO, DBSIZE, and ANY Redis command (lists, hashes, sets, sorted sets, streams, pub/sub, transactions) via a verbatim-argv passthrough. Server lifecycle (start/stop), health checks, and the full redis-cli/redis-server toolchain (redis-benchmark, redis-check-rdb, ...). No server to provision — runs locally on this host.", + "description": "Redis 8.6.2 as a native CLI for agents: stand up a local in-memory data store (redis.start) and talk to it with redis-cli \u2014 SET/GET, PING, INFO, DBSIZE, and ANY Redis command (lists, hashes, sets, sorted sets, streams, pub/sub, transactions) via a verbatim-argv passthrough. Server lifecycle (start/stop), health checks, and the full redis-cli/redis-server toolchain (redis-benchmark, redis-check-rdb, ...). No server to provision \u2014 runs locally on this host.", "display_name": "Redis", "vendor": "Pilot Protocol", "license": "AGPL-3.0", @@ -388,7 +388,7 @@ { "id": "io.pilot.aegis", "version": "0.1.3", - "description": "AEGIS 0.1.3 — a runtime firewall for AI agents (native CLI): scan files, commands, and tool results for prompt injection, jailbreaks, homoglyph/leetspeak obfuscation, and impersonation before your agent acts on them. L1 Aho-Corasick patterns plus an optional local Qwen3-1.7B judge, fully offline; an 880 KB binary. The scan-cmd/scan-result blocking gates run via aegis.exec (allow 0 / block 2); plus aegis.scan / status / targets / config.", + "description": "AEGIS 0.1.3 \u2014 a runtime firewall for AI agents (native CLI): scan files, commands, and tool results for prompt injection, jailbreaks, homoglyph/leetspeak obfuscation, and impersonation before your agent acts on them. L1 Aho-Corasick patterns plus an optional local Qwen3-1.7B judge, fully offline; an 880 KB binary. The scan-cmd/scan-result blocking gates run via aegis.exec (allow 0 / block 2); plus aegis.scan / status / targets / config.", "display_name": "AEGIS", "vendor": "Pilot Protocol", "license": "MIT", @@ -422,7 +422,7 @@ { "id": "io.pilot.smol", "version": "1.2.0", - "description": "Smol Machines — fast, hardware-isolated Linux microVMs, now local AND cloud. Create/run sub-second microVMs locally with the smolvm CLI, then push a VM to the smol cloud with smol.push. Pilot provisions a per-user cloud key automatically; cloud VMs are isolated per user and billed by real usage against $5 free credit.", + "description": "Smol Machines \u2014 fast, hardware-isolated Linux microVMs, now local AND cloud. Create/run sub-second microVMs locally with the smolvm CLI, then push a VM to the smol cloud with smol.push. Pilot provisions a per-user cloud key automatically; cloud VMs are isolated per user and billed by real usage against $5 free credit.", "display_name": "Smol Machines", "vendor": "smol machines", "license": "Apache-2.0", @@ -465,7 +465,7 @@ { "id": "io.pilot.bowmark", "version": "0.1.0", - "description": "Navigation cheatsheets for public websites, so agents run cheaper, faster, and more accurately. Call ask({site, task}) before any browser action to get a ready-to-run cheatsheet — a parameterized URL shortcut and/or a short UI procedure to execute open-loop — instead of exploring the DOM; then report_outcome to keep them fresh. Free to use — no signup, no API key.", + "description": "Navigation cheatsheets for public websites, so agents run cheaper, faster, and more accurately. Call ask({site, task}) before any browser action to get a ready-to-run cheatsheet \u2014 a parameterized URL shortcut and/or a short UI procedure to execute open-loop \u2014 instead of exploring the DOM; then report_outcome to keep them fresh. Free to use \u2014 no signup, no API key.", "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.bowmark/0.1.0/io.pilot.bowmark-0.1.0-linux-amd64.tar.gz", "bundle_sha256": "af6f94bd8dd1ec2143d6d791205539f3b8ebeab94585d6f29552747de32cf997", "display_name": "Bowmark", @@ -500,6 +500,46 @@ } }, "publisher": "ed25519:Lmf0vzz0CNPu94pbqsbD/ueSuOaKsGc0xU/DoL+Yu7c=" + }, + { + "id": "io.pilot.orthogonal", + "version": "0.1.0", + "description": "Connect your agent to Orthogonal \u2014 one key fronting 58 paid APIs / 851 endpoints (lead & contact enrichment, email & phone finding, web & social scraping, AI search, company/people/jobs data, weather, voice). Describe a task in plain English and Orthogonal's router returns the exact APIs to call; execute any of them through a single run, billed at the real per-call price and metered against a per-user $5 budget. Discovery, pricing and balance calls are free.", + "display_name": "Orthogonal", + "vendor": "Orthogonal", + "license": "MIT", + "source_url": "https://github.com/pilot-protocol/app-template/tree/main/submissions/io.pilot.orthogonal", + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-amd64.tar.gz", + "bundle_sha256": "a773c017d0f9b4498db2123473541dece29b8367a34387d52ca5abc7c2932c7e", + "bundle_size": 5076601, + "bundles": { + "darwin/amd64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-darwin-amd64.tar.gz", + "bundle_sha256": "55a0645bbf8506040d88231e392bc43c517385f64875e1718090b403bf05809b" + }, + "darwin/arm64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-darwin-arm64.tar.gz", + "bundle_sha256": "404cc4588b38e5eb2341cad160b07d39a34f6ca7dd7f4cdaafc56e03dd54bfcd" + }, + "linux/amd64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-amd64.tar.gz", + "bundle_sha256": "a773c017d0f9b4498db2123473541dece29b8367a34387d52ca5abc7c2932c7e" + }, + "linux/arm64": { + "bundle_url": "https://pub-f09f9a4ea848491198d48e329ba030e3.r2.dev/bundles/io.pilot.orthogonal/0.1.0/io.pilot.orthogonal-0.1.0-linux-arm64.tar.gz", + "bundle_sha256": "2882a4db3250bb0e3e63ee1f3d7746eadad823b9e1c6bebf8aa96b8c1f18e9a9" + } + }, + "categories": [ + "data", + "search", + "enrichment", + "scraping", + "ai" + ], + "metadata_url": "https://raw.githubusercontent.com/pilot-protocol/pilotprotocol/main/catalogue/apps/io.pilot.orthogonal/metadata.json", + "metadata_sha256": "e3094041d1bc38841c7fe82ce7596b409dbed25f8a81722a5456898b7360d554", + "publisher": "ed25519:8zcpGtp5sUw3sjLptDR9W/btumEaOv3DO3tTWN/+PCk=" } ] } diff --git a/catalogue/catalogue.json.sig b/catalogue/catalogue.json.sig index 7bd3479a..75c4d6f9 100644 --- a/catalogue/catalogue.json.sig +++ b/catalogue/catalogue.json.sig @@ -1 +1 @@ -3DeVcBPvNNP7146Rx6m5jkrwFpDx/SB+avfZ1bQ6YuWNZL+FDRVi55HAie2Vz59l2wxgkL+MQAyZ61GM/BGMBA== +5hMmf3lJXyhZIUdEZXBT3BxHg09tlczQ4S96SRXqlCwQ6gTEZ1m63tCOHlYMysSJF7hF8fLiChPPdf6EFS8pDg==