167 lines
3.8 KiB
Markdown
167 lines
3.8 KiB
Markdown
# Proposed Project Structure
|
|
|
|
```text
|
|
hermes-mobile/
|
|
README.md
|
|
PROJECT_STRUCTURE.md
|
|
LICENSE
|
|
.gitignore
|
|
.editorconfig
|
|
package.json # pnpm workspace root, later
|
|
pnpm-workspace.yaml
|
|
tsconfig.base.json
|
|
install.sh # one-liner installer entrypoint, later
|
|
docs/
|
|
PRODUCT_PLAN.md
|
|
ARCHITECTURE.md
|
|
DESIGN_SYSTEM.md
|
|
COMPANION_SERVER.md
|
|
MOBILE_APP.md
|
|
INSTALL.md
|
|
TESTING.md
|
|
ROADMAP.md
|
|
apps/
|
|
mobile/ # Android-first PWA
|
|
package.json
|
|
vite.config.ts
|
|
index.html
|
|
public/
|
|
manifest.webmanifest
|
|
icons/
|
|
src/
|
|
app/
|
|
App.tsx
|
|
router.tsx
|
|
providers.tsx
|
|
screens/
|
|
AskScreen/
|
|
ActivityScreen/
|
|
CronScreen/
|
|
FilesScreen/
|
|
SettingsScreen/
|
|
components/
|
|
agent-status-orb/
|
|
composer/
|
|
tool-card/
|
|
event-timeline/
|
|
upload-tray/
|
|
voice-recorder/
|
|
cron-job-card/
|
|
approval-card/
|
|
bottom-nav/
|
|
app-shell/
|
|
features/
|
|
tasks/
|
|
sessions/
|
|
cron/
|
|
files/
|
|
approvals/
|
|
notifications/
|
|
pairing/
|
|
settings/
|
|
lib/
|
|
api-client.ts
|
|
realtime.ts
|
|
push.ts
|
|
audio.ts
|
|
file-utils.ts
|
|
format.ts
|
|
styles/
|
|
globals.css
|
|
tokens.css
|
|
main.tsx
|
|
companion/ # local server installed beside Hermes Agent
|
|
package.json
|
|
src/
|
|
app.ts
|
|
config/
|
|
index.ts
|
|
schema.ts
|
|
auth/
|
|
pairing.ts
|
|
sessions.ts
|
|
middleware.ts
|
|
db/
|
|
client.ts
|
|
migrations/
|
|
repositories/
|
|
events/
|
|
bus.ts
|
|
types.ts
|
|
websocket.ts
|
|
sse.ts
|
|
hermes/
|
|
HermesAdapter.ts
|
|
CliHermesAdapter.ts
|
|
ApiHermesAdapter.ts
|
|
PythonHermesAdapter.ts
|
|
promptFormatting.ts
|
|
tasks/
|
|
TaskManager.ts
|
|
TaskQueue.ts
|
|
taskTypes.ts
|
|
uploads/
|
|
uploadRoutes.ts
|
|
UploadStore.ts
|
|
fileValidation.ts
|
|
notifications/
|
|
NotificationProvider.ts
|
|
WebPushProvider.ts
|
|
NtfyProvider.ts
|
|
GotifyProvider.ts
|
|
NoopProvider.ts
|
|
cron/
|
|
CronService.ts
|
|
HermesCronAdapter.ts
|
|
approvals/
|
|
ApprovalService.ts
|
|
routes/
|
|
health.ts
|
|
tasks.ts
|
|
uploads.ts
|
|
sessions.ts
|
|
cron.ts
|
|
approvals.ts
|
|
settings.ts
|
|
system/
|
|
hermesHealth.ts
|
|
logs.ts
|
|
index.ts
|
|
scripts/
|
|
hermes_worker.py # direct Python bridge later
|
|
packages/
|
|
shared/ # shared TS types/schemas
|
|
package.json
|
|
src/
|
|
events.ts
|
|
api.ts
|
|
tasks.ts
|
|
cron.ts
|
|
files.ts
|
|
notifications.ts
|
|
ui/ # optional shared UI primitives later
|
|
package.json
|
|
src/
|
|
scripts/
|
|
install.sh
|
|
uninstall.sh
|
|
dev-hermes-smoke.sh
|
|
build-release.sh
|
|
deploy/
|
|
systemd/
|
|
hermes-mobile-companion.service
|
|
nginx/
|
|
hermes-mobile.conf
|
|
caddy/
|
|
Caddyfile.example
|
|
```
|
|
|
|
## Modularity Notes
|
|
|
|
- `apps/mobile` should never import Hermes-specific server internals directly. It uses `packages/shared` schemas and API client only.
|
|
- `apps/companion/src/hermes` is the only layer that knows how to talk to Hermes Agent.
|
|
- `apps/companion/src/notifications` is provider-swappable.
|
|
- `apps/companion/src/cron` wraps Hermes cron rather than replacing it.
|
|
- `packages/shared` defines stable event types used by both app and server.
|
|
- `scripts/` and `deploy/` stay boring and auditable.
|