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

3.5 KiB

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.