42 lines
3.5 KiB
Markdown
42 lines
3.5 KiB
Markdown
# Hope — API, web, and native iOS monorepo
|
|
|
|
## Read first
|
|
|
|
- Current architecture and deployment: `IMPLEMENTATION_PLAN.md`, `control/README.md`, `QUALIFICATION.md`, and `tests/README.md`.
|
|
- Shared chat behavior: `docs/CHAT_CONTRACT.md` and `docs/CHAT_FEATURES_CONTRACT.md`. These current contracts supersede historical no-model-picker notes.
|
|
- Native work: `ios/AGENTS.md`, `ios/docs/PROJECT_STATUS.md`, and `ios/docs/ENGINEERING_LEARNINGS.md` before 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 source `project.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.md` or 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 scheme `Voice_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
|
|
|
|
- `master` of this repository is the single integration branch for API/web/iOS. The old `hope-voice-ios` repository 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.yml` before 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.md` for native changes and `QUALIFICATION.md` for backend/web qualification. A Git push is not proof of iPhone installation or physical audio success.
|