Files
hope-voice-api/AGENTS.md
T
2026-10-04 07:23:49 -04:00

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.