3.5 KiB
3.5 KiB
Hope — API, web, and native iOS monorepo
Read first
- Current architecture and deployment:
IMPLEMENTATION_PLAN.md,control/README.md,QUALIFICATION.md, andtests/README.md. - Shared chat behavior:
docs/CHAT_CONTRACT.mdanddocs/CHAT_FEATURES_CONTRACT.md. These current contracts supersede historical no-model-picker notes. - Native work:
ios/AGENTS.md,ios/docs/PROJECT_STATUS.md, andios/docs/ENGINEERING_LEARNINGS.mdbefore changing native code, tests, signing, or lifecycle. - Migration/history:
docs/IOS_MONOREPO_MIGRATION.md.
Layout and boundaries
control/: trusted multi-user account service and private per-account Hermes provisioning.agent/and root container configuration: Azure STT → authenticated dedicated Hermes → Azure TTS over LiveKit.web/: browser client, HTTPS proxy bootstrap, and web assets.ios/: SwiftUI app, XcodeGen sourceproject.yml, generated shared Xcode project, native tests and device guidance.docs/,tests/,scripts/: shared contracts, offline qualification, and protected deployment tooling.- Hope Music is external. Do not embed its player or restore its dependencies into this app/container.
Invariants
- No anonymous bootstrap, direct upstream provider credentials, shared account memory, trust-all TLS, plaintext fallback, or fabricated integrations.
- Text chat uses authenticated HTTP/SSE and does not start a microphone/LiveKit session. Voice retains its separate explicit session lifecycle.
- Model/thinking preferences are server-owned via the current settings contract; do not restore removed legacy OpenWebUI/MCP dispatch paths.
- Preserve account scoping, logout/server-change teardown, TLS pinning, revision checks, durable conversations and SSE replay semantics across both clients.
- Never expose credentials or private payloads in logs, tests, artifacts, or commits. Keep runtime data and certificates outside CI checkouts.
- Use current contracts as the authority; historical iOS plans/deployment receipts are evidence, not instructions to redeploy obsolete images.
Verification
- Use the offline commands in
tests/README.mdor the explicit offline selection in.gitea/workflows/rebuild.yml; never invoke the legacy live-default suite by accident. - Run theme generator checks after shared theme changes. Native generated theme lives at
ios/Sources/Chat/HopeTheme.generated.swift. - From
ios/, use XcodeGen when adding/removing sources/resources, and run simulator tests with schemeVoice_iOS. Opt-in live tests stay off unless explicitly authorized. - Date qualification records and distinguish unit/simulator/build evidence from production API, installation, and physical microphone/TTS evidence.
Git and deployment
masterof this repository is the single integration branch for API/web/iOS. The oldhope-voice-iosrepository is a read-only archive after migration.- Preserve original iOS ancestry; do not squash away the imported history. See the migration record for original tips and lookup commands.
- Use conventional commits and explicitly stage intended files; leave unrelated local design artifacts untouched.
- Inspect
.gitea/workflows/rebuild.ymlbefore pushing: root backend changes can deploy to Unraid; iOS-only and documentation changes are excluded. Do not disable backend qualification or mutate protected runtime configuration. - Maintain
ios/docs/PROJECT_STATUS.mdfor native changes andQUALIFICATION.mdfor backend/web qualification. A Git push is not proof of iPhone installation or physical audio success.