Scope: Dependencies that the Oshun V1 launch relies on — third-party APIs,
SDKs, infrastructure services, language runtimes, and internal packages that
sit on the V1 critical path. Out-of-scope domains (Yemaya, Maya, Iris coding
assistant, Maat, Cybele, Saraswati, Brigid, etc.) are cataloged in the
whole-monorepo /DEPENDENCIES.md. Companion docs:V1/features.md, V1/TODOS.md,
V1/ARCHITECTURE.md. Date: 2026-05-11
This file is the V1-scoped dependency contract. For each dependency it answers
three questions a reviewer needs before launch:
What is it — one sentence on the dependency itself.
Where does V1 use it — the V1 features or TODOS sections that need it.
How is it wired — env vars, package paths, ports, version source.
Pinned versions live in pnpm-workspace.yaml (TypeScript), each service's
pyproject.toml (Python), and docker/docker-compose.dev.yml plus the
per-domain compose files (containers). This document references those sources of
truth rather than duplicating them.
Concordia (cross-tenant federation) integration adapter where required.
Not on the V1 critical path but used by Isis post-processing (image/video
generation): @oshun/color-science (libs/oshun/color-science/) provides
color-science foundations for OSHUN imaging workflows. V1 consumes it
transitively through the Isis generation pipelines rather than from any
customer/admin surface.
BFF data fetching, optimistic updates, offline caches.
Design system grounding: cream-paper + terracotta canonical, with the Lilith
register variants applied at the persona-policy boundary
(@oshun/persona-policy-lilith). Routes referenced in V1 features include /,
/landing, /tara…/nisaba, /operator/*, /system.
Lighthouse budgets live at apps/oshun/web/lighthouse-budget.json (LCP ≤ 2.5s,
INP ≤ 200ms, CLS ≤ 0.1).
Hosting: all Next.js front-ends
(apps/oshun/{web,admin,tenant-admin,telegram-miniapp},
apps/metis/{web,admin}) run as containers on the single Hetzner box (SSR
standalone + static, both via docker/Dockerfile.web) behind the Caddy TLS
edge, host-routed on <prefix>.<platform_domain> — the same single hosting
plane as every backend service. Defined by
deploy/v1/hetzner/docker-compose.yml and released by
.github/workflows/deploy-hetzner.yml. History: Vercel → Amplify → Fargate
(2026-07-04 single-plane consolidation,
V1/planning/IAC_CICD_AUDIT_2026-07-04.md) → Hetzner single box (2026-07-09,
V1/planning/HETZNER_SINGLE_BOX_2026-07-09.md).
Admin mobile (apps/oshun/admin-mobile) shares the same Expo/RN baseline.
Launch-readiness gap: V1 features.md calls for push routing
(domain/persona/quiet-hours/sensitivity), audio playback for Tara meditations
and Living Scenes narration, offline media caching, and camera/microphone
capture. The mobile package.json does not yet pin expo-notifications,
expo-av, expo-image, expo-camera, or expo-file-system. Either these must
be added before launch or the supporting Expo plugins / native modules must be
declared in the prebuild config.
V1 generation surfaces fan out behind @oshun/generation-control-isis. Raw
provider access is operator-only (TODOS § 24, features.md § Generation
Audience Tiers).
Provider
What it is
V1 use
RunPod
GPU cloud (A100/H100/RTX 4090).
Hosts ComfyUI, SDXL, Flux, and custom inference endpoints. RUNPOD_API_KEY in Secrets Manager; endpoint IDs per generation surface. Compose blueprints at docker/runpod/.
ComfyUI
Node-based workflow runtime.
Image/video generation pipelines wrapped in libs/isis/workflows/. Custom nodes in libs/isis/comfyui-nodes/.
Civitai
External model intake.
Operator-only intake review queue (civitai-intake-spec.ts, civitai-review-pipeline.ts). Customer/studio surfaces never see raw Civitai listings.
Stable Diffusion (SDXL)
Image generation model.
Backing model for Living Scenes visual outputs, explanatory visuals.
Flux
Image generation model.
Alternate image model where tone/style favors Flux over SDXL.
ElevenLabs (voice)
Voice synthesis provider.
Voice generation for Tara teachers, Metis tutors, Living Scenes narration. Provider adapter at libs/isis/ai-providers/src/providers/tts/elevenlabs-provider.ts; audio-side client at libs/isis/audio-generation/src/voice/elevenlabs-client.ts. Voice-provider abstraction (libs/oshun/persona-registry/src/voice-provider-abstraction.ts) keeps additional providers swappable. Strict voice-quality and voice-abuse policy (Lilith). Decision (2026-07-06, closes TODOS §35): the direct HTTP client IS the supported V1 path — it is a deep, tested integration (~5.1k-line client with spec + ~1.4k-line provider adapter), and pinning the official elevenlabs SDK would duplicate it for no capability gain. Revisit only if ElevenLabs ships an API surface the direct client cannot reach.
Suno (music)
Music generation provider.
Music beds for Living Scenes Domain Templates. Adapter at libs/isis/audio-generation/src/generation/suno-provider.ts.
Udio (music)
Alternate music generation provider.
Music beds where Udio tonality fits a domain template. Adapter at libs/isis/audio-generation/src/generation/udio-provider.ts.
Self-hosted audio
In-house music/SFX runtime.
Fallback music + sound-effects path under sanction. Adapter at libs/isis/audio-generation/src/generation/self-hosted.ts; SFX at libs/isis/audio-generation/src/generation/sfx-provider.ts.
3D generation
Gaussian splatting and adjacent pipelines (libs/isis/gaussian-splatting, libs/isis/3d-generation).
Optional 3D outputs in operator/creator surfaces.
Every generation produces a ProvenanceBundle (consent ID, prompt, model,
watermark hash, timestamp, invoking user, tenant) recorded against the audit
platform and used by takedown cascades.
All inbound integrations are implemented by @oshun/inbound-integrations
(libs/shared/inbound-integrations/src/). Each module exposes a connector
framework with health probes, circuit breakers, version pinning, and upgrade
pathways (TODOS § 1.10).
Mailpit in dev (docker-compose.dev.yml); SES/Postmark-class in prod.
Push (FCM/APNs)
Per-domain/persona/quiet-hours/sensitivity push routing for customer + admin mobile.
Firebase Admin (firebase-admin: ^13.0.0); APNs cert in Secrets Manager.
SMS
Optional V1 channel for re-engagement and high-priority alerts (where consented).
Provider adapter (Twilio-class).
Telegram Bot
Delivery and light assistant; entitlement-aware command routing.
Bot token; webhook endpoint behind BFF.
Telegram Mini Apps
Curated Studio surfaces in chat.
initData signature verification at BFF.
Telegram Channels
Editorial publishing target with provenance preserved.
Channel admin token.
Telegram Inline
Save, share, attribution.
Bot token.
Telegram Payments
V1.x optional fiat rail. Bot may also surface a crypto invoice (BOLT11 / Monero subaddress / Solana Pay URL / TON @wallet deep link) from the V1 primary rail.
Provider tokens; payment connector framework; @aje/payments + libs/oshun/payments-bridge/ for the crypto surface.
WhatsApp Business
Transactional template messaging.
Cloud API or BSP integration.
Discord
Community surface.
Bot + webhook integrations.
Slack
Institutional notification sink; tenant ops.
Slack app + webhook integrations.
Boundary, residency, retention, consent, and audit are enforced uniformly
through @oshun/audit-platform and Iris consent records.
V1 settlement is non-custodial crypto-first. The primary rail uses
self-hosted nodes, watch-only or view-only wallets on the application server,
and an air-gapped signing station for refunds and sweeps. Fiat (Stripe-class) is
V1.x optional and slots into the same entitlement, receipt, and dunning
machinery.
V1 settlement consumes the Aje domain (Yoruba orisha of wealth and commerce)
— the monorepo's existing library-only blockchain and Web3 infrastructure. Aje
contributes the chain modules, wallet management, merchant payments,
stablecoins, oracles, and nodes. V1 adds five new chain modules to Aje (Monero,
Litecoin, TON, Ergo, Tron) plus a thin bridge library
(libs/oshun/payments-bridge/) that maps Aje's invoice contracts onto the V1
entitlement event bus. The combined rail covers the top-10 payment cryptos by
real-world volume plus Cardano and Ergo. Per-chain decentralization tier (A / B
/ C) and per-asset issuer-trust class are documented in features.md § Crypto
Payments — Non-Custodial Entitlement Settlement and enforced at the
invoice-disclosure layer.
Each follows Aje's existing @aje/chains/<chain>/ module pattern and preserves
the "TypeScript throughout" design principle by isolating non-TS cryptography to
upstream node processes (the TypeScript module owns only the JSON-RPC client;
the wallet daemon is a separate process; spend keys live on the air-gapped
signing station behind @aje/wallets/hardware-wallet).
Tier A — credibly decentralized, self-hosted full node mandatory#
Tier C — centralized trust required; accepted with explicit invoice disclosure#
Asset / rail
Catalog version / tooling
V1 use
Tron
java-tron: ^4.7 (self-hosted) plus multi-RPC consensus across TronGrid + GetBlock; tronweb: ^6.0.0
USDT-TRC20 only at V1 (the dominant USDT rail by global volume). 19-block confirmation policy (≈1 min). Per-invoice address derivation; Tier-C disclosure mandatory on every invoice.
TON
mytonctrl (self-hosted) + ton-http-api: ^4.4 plus multi-RPC consensus across tonapi.io + toncenter.com; @ton/ton: ^15.0.0; @ton/crypto: ^3.3.0
Trezor Suite Lite / Ledger Live / Coldcard Q via PSBT (BTC + LTC); Safe {Core,Wallet} (every EVM chain); Monero CLI multisig MMS; Solana SPL multisig; TON multisig contract; Cardano Plutus-script multisig; Ergo P2S multisig; Tron multisig contract
Air-gapped signing station for refunds and sweeps; 2-of-3 multisig vault per chain family above sweep threshold.
Price oracle
Kraken REST + CoinGecko REST + Uniswap v3 TWAP (@uniswap/v3-sdk: ^3.13.0); Tor egress via socks-proxy-agent: ^8.0.0
Fiat-rate aggregation with median selection; invoice-time rate lock; spread captured for fraud analysis. Non-EVM natives (XMR, ADA, ERG, SOL, TON, LTC, TRX) use Kraken + CoinGecko only.
Test substrate
bitcoind -regtest; litecoind -regtest; Anvil (foundry: ^1.0) per EVM chain; monero-stagenet Docker image; Solana solana-test-validator; TON sandbox via @ton/sandbox: ^0.27.0; Cardano preview testnet; Ergo testnet; Tron Nile testnet
End-to-end test substrate including induced reorgs and outage simulation.
Aje libraries run inside libs/aje/ and the V1 bridge runs inside
libs/oshun/payments-bridge/. The bridge emits entitlement-grant and refund
events through libs/shared/event-bus topics shared with the fiat adapter,
keeping downstream consumers rail-agnostic.
Subscriptions, entitlement upgrades, billing portal entry from profile/settings.
Telegram Payments
(V1.x optional)
Entitlement upgrade flows in Telegram channel; gated by @oshun/inbound-integrations/payment. May also surface a crypto invoice via bot.
Payment connector framework
libs/shared/inbound-integrations/src/payment.ts
Tenant-provided fiat processors.
Billing-action reversal, entitlement suspension, trial-expiry behavior,
payment-method update reminders (fiat), and renewal-invoice reminders (crypto)
are all documented in features.md § Support, Entitlements, Billing and § Crypto
Payments — Non-Custodial Entitlement Settlement, and tracked in TODOS § 23 and §
23.1. Aje's own feature catalog lives in
DOMAINS/aje/features.md and
architecture in
DOMAINS/aje/architecture.md.
All sources are declared in the PredictionSourceRef contract so customers
inspecting a sky event see exactly which external authority predicted it. No
NYX-specific HTTP base URLs are pinned in .env.example yet; pre-launch work
should add NYX_*_URL entries alongside the per-source API keys.
External feeds are operator-curated (peer-reviewed databases, retraction watch
sources, fact-check syndications). Veritas requires a SourceKind declaration
on every source and a per-source reviewer attestation.
19. Provenance and Synthetic-Content Verification#
Standard / library
V1 use
C2PA
Contract-level fields (c2paManifestPresent, c2paManifestIssuedAtUnixSeconds) on watermark/provenance bundles in libs/oshun/persona-registry/src/watermark-provenance.ts, plus a shipped mint/verify path (2026-07-06, closes the §19 launch gap): c2pa-node ^0.5.26 is pinned in the pnpm catalog and wrapped by @oshun/c2pa-export (libs/oshun/c2pa-export) — fail-loud signer resolution from OSHUN_C2PA_EXPORT_* env, standards-compliant JUMBF/COSE embed, typed verify — wired into the Living Scene share/export route with production fail-closed behavior. SDK quirk to know: the 0.5.x native binding timestamps every signature, so signing requires egress to the configured TSA (default DigiCert). References: https://opensource.contentauthenticity.org/docs/durable-content-credentials (cited in libs/calliope/compliance/src/services/deepfake-prevention-guard.ts).
Watermarking
Per-render watermark hash recorded in ProvenanceBundle; visual + audio watermarks on customer-tier outputs. Realism / impersonation thresholds at libs/oshun/persona-registry/src/realism-impersonation-thresholds.ts evaluate requireC2paManifest at release-gate time.
Audit platform
@oshun/audit-platform records every consent change, deletion, persona publish, generation bundle.
(Production deployment; dev runs entirely in compose.)
Provider
V1 role
Hetzner
Primary hosting: the entire V1 platform runs on ONE Hetzner Cloud box (CCX23) as docker-compose stacks — Oshun + Metis + Psyche backends AND the Next.js front-ends behind a Caddy TLS edge (host-routed on <prefix>.<platform_domain>), with on-box Postgres (pgvector/pg16), Redis 7, and MinIO (S3 API at s3.<domain>, presigned-URL compatible via OSHUN_ASSET_STORE_ENDPOINT path-style). Images on GHCR (ghcr.io/greychimp/oshun/<service>). One deploy path: .github/workflows/deploy-hetzner.yml (build → SSH → deploy/v1/hetzner/scripts/deploy.sh: pull, Prisma schema apply, roll, health-gate, smoke). Staging auto-deploys from main (affected services only); production deploys from v* tags/releases behind the production-approval environment gate. Runbook: deploy/v1/hetzner/README.md; decision record: V1/planning/HETZNER_SINGLE_BOX_2026-07-09.md.
AWS
Dormant/standby since 2026-07-09 (superseded by the Hetzner single box). The full ECS Fargate stack remains applyable — infrastructure/terraform/ (single root module: Fargate cluster + shared ALB + Cloud Map, RDS pgvector, ElastiCache, S3, ECR) and the dispatch-only .github/workflows/deploy-ecs.yml — for a deliberate return to AWS at scale. The pnpm catalog still pins the S3-family SDKs (@aws-sdk/client-s3, @aws-sdk/lib-storage, @aws-sdk/s3-request-presigner^3.600.0) and @aws-sdk/client-cloudwatch ^3.600.0; the S3 clients now speak to MinIO through the same interface. Cost model of the retired stack: V1/planning/IAC_CICD_AUDIT_2026-07-04.md.
RunPod
GPU cloud for Isis/ComfyUI/SDXL/Flux/custom inference endpoints. RUNPOD_API_KEY in Secrets Manager; endpoint IDs stored alongside.
GCP
Firebase Cloud Messaging (push), Vertex AI (supplemental models).
Azure
Optional Azure OpenAI endpoint (swap-in for the OpenAI SDK).
V1 domain databases pinned in .env.example today: TARA_DATABASE_URL,
TARA_REDIS_PREFIX, TARA_CONTENT_BUCKET, TARA_CDN_URL,
NISABA_DATABASE_URL, NISABA_REDIS_PREFIX, plus the shared oshun_dev
database used by services without a dedicated per-domain database. Gap:ARETE_DATABASE_URL, VERITAS_DATABASE_URL, NYX_DATABASE_URL, and
METIS_DATABASE_URL are not yet documented in .env.example. Either: (a)
those domains run against the shared oshun_dev database for V1 launch, in
which case .env.example should declare that explicitly, or (b) they need
per-domain database URLs added before launch. Metis runs inside
apps/metis/{web,admin,api-gateway,worker} against its own per-service database
URLs.