From ee293d7daf1e605755a3cd40ea4ed2d026827616 Mon Sep 17 00:00:00 2001 From: Myx Date: Fri, 5 Jun 2026 17:13:03 +0200 Subject: [PATCH] feat: Rename to Toju and add translation --- agents-docs/FEATURES.md | 1 + agents-docs/features/app-i18n.md | 62 + docs-site/CONTEXT.md | 2 +- docs-site/docs/desktop-and-local-api.md | 2 +- docs-site/docs/developer/contributing.md | 2 +- .../developer/llm-plugin-builder-guide.md | 14 +- docs-site/docs/developer/rest-api.md | 2 +- docs-site/docs/intro.md | 6 +- .../docs/plugin-development/api/commands.md | 6 +- docs-site/docs/plugin-development/api/ui.md | 2 +- .../plugin-development/create-a-plugin.md | 2 +- docs-site/docs/plugin-development/manifest.md | 2 +- docs-site/docs/user-guide/first-steps.md | 6 +- docs-site/docs/user-guide/plugins.md | 6 +- .../docs/user-guide/servers-and-channels.md | 2 +- docs-site/docs/user-guide/settings.md | 2 +- .../user-guide/text-and-direct-messages.md | 6 +- docs-site/docs/user-guide/voice-channels.md | 2 +- .../docs/{using-metoyou.md => using-toju.md} | 6 +- docs-site/docusaurus.config.ts | 6 +- docs-site/sidebars.ts | 2 +- electron/api/docs-html.ts | 2 +- electron/api/openapi.ts | 4 +- electron/app/auto-start.ts | 31 +- electron/app/desktop-branding-migration.ts | 88 + electron/app/desktop-branding.rules.spec.ts | 45 + electron/app/desktop-branding.rules.ts | 43 + electron/app/flags.ts | 2 + electron/app/launch-path.ts | 8 + electron/app/lifecycle.ts | 2 + electron/data-management.ts | 10 +- electron/game-detection/heuristics.ts | 1 + electron/update/desktop-updater.ts | 15 +- electron/window/create-window.ts | 8 +- package-lock.json | 14 + package.json | 7 +- server/src/routes/link-metadata.ts | 2 +- server/src/routes/openapi-docs.ts | 6 +- server/src/runtime-paths.ts | 2 +- toju-app/AGENTS.md | 7 + toju-app/CONTEXT.md | 2 + .../app/VoiceCallForegroundService.java | 2 +- .../app/src/main/res/values/strings.xml | 4 +- toju-app/capacitor.config.ts | 2 +- toju-app/ios/App/App/Info.plist | 2 +- .../ios/App/App/MetoyouMobilePlugin.swift | 2 +- toju-app/public/i18n/catalog/app.json | 20 + toju-app/public/i18n/catalog/attachment.json | 14 + toju-app/public/i18n/catalog/auth.json | 33 + toju-app/public/i18n/catalog/call.json | 48 + toju-app/public/i18n/catalog/chat.json | 178 ++ toju-app/public/i18n/catalog/common.json | 53 + toju-app/public/i18n/catalog/dashboard.json | 46 + toju-app/public/i18n/catalog/dm.json | 65 + toju-app/public/i18n/catalog/emoji.json | 22 + .../public/i18n/catalog/experimental.json | 10 + toju-app/public/i18n/catalog/mobile.json | 33 + .../public/i18n/catalog/notifications.json | 37 + toju-app/public/i18n/catalog/plugins.json | 161 ++ toju-app/public/i18n/catalog/profile.json | 42 + toju-app/public/i18n/catalog/room.json | 76 + toju-app/public/i18n/catalog/screenShare.json | 55 + .../public/i18n/catalog/servers-rail.json | 26 + toju-app/public/i18n/catalog/servers.json | 158 ++ toju-app/public/i18n/catalog/settings.json | 564 ++++ toju-app/public/i18n/catalog/shared.json | 192 ++ toju-app/public/i18n/catalog/shell.json | 40 + toju-app/public/i18n/catalog/theme.json | 136 + toju-app/public/i18n/catalog/voice.json | 87 + toju-app/public/i18n/en.json | 2344 +++++++++++++++++ toju-app/src/app/app.config.ts | 6 + toju-app/src/app/app.html | 32 +- toju-app/src/app/app.ts | 7 +- .../core/i18n/app-i18n-catalog.rules.spec.ts | 72 + .../app/core/i18n/app-i18n-catalog.rules.ts | 47 + .../src/app/core/i18n/app-i18n.rules.spec.ts | 29 + toju-app/src/app/core/i18n/app-i18n.rules.ts | 13 + .../app/core/i18n/app-i18n.service.spec.ts | 40 + .../src/app/core/i18n/app-i18n.service.ts | 22 + .../src/app/core/i18n/app-i18n.testing.ts | 19 + .../app/core/i18n/app-translate.imports.ts | 4 + toju-app/src/app/core/i18n/index.ts | 5 + .../domain/rules/role-assignment.rules.ts | 20 +- .../domain/rules/role-display.rules.spec.ts | 37 + .../domain/rules/role-display.rules.ts | 20 + .../src/app/domains/access-control/index.ts | 1 + .../services/attachment-transfer.service.ts | 29 +- .../attachment-transfer.constants.ts | 18 +- .../feature/login/login.component.html | 14 +- .../feature/login/login.component.ts | 7 +- .../feature/register/register.component.html | 16 +- .../feature/register/register.component.ts | 7 +- .../feature/user-bar/user-bar.component.html | 4 +- .../feature/user-bar/user-bar.component.ts | 4 +- toju-app/src/app/domains/chat/README.md | 18 +- .../application/services/klipy.service.ts | 52 +- .../services/link-metadata.service.ts | 7 +- .../domain/rules/auto-scroll.rules.spec.ts | 24 +- .../chat/domain/rules/auto-scroll.rules.ts | 5 +- .../chat/domain/rules/message-sync.rules.ts | 7 +- .../chat/domain/rules/message.rules.ts | 5 +- .../chat-messages.component.html | 2 +- .../chat-messages/chat-messages.component.ts | 8 +- .../chat-builtin-slash-commands.rules.spec.ts | 31 +- .../chat-builtin-slash-commands.rules.ts | 20 +- .../chat-message-composer.component.html | 64 +- .../chat-message-composer.component.ts | 40 +- .../chat-slash-command-menu.component.html | 4 +- .../chat-slash-command-menu.component.ts | 7 +- .../composer-media-menu.rules.spec.ts | 13 +- .../composer-media-menu.rules.ts | 13 +- .../chat-link-embed.component.html | 2 +- .../chat-link-embed.component.ts | 3 +- .../chat-message-item.component.html | 56 +- .../chat-message-item.component.scss | 25 +- .../chat-message-item.component.ts | 121 +- .../chat-message-markdown.component.html | 4 +- .../chat-message-markdown.component.ts | 7 +- .../chat-soundcloud-embed.component.html | 2 +- .../chat-soundcloud-embed.component.ts | 4 +- .../chat-spotify-embed.component.html | 2 +- .../chat-spotify-embed.component.ts | 2 + .../chat-youtube-embed.component.ts | 8 +- .../chat-message-list.component.html | 16 +- .../chat-message-list.component.ts | 9 +- .../chat-message-overlays.component.html | 34 +- .../chat-message-overlays.component.ts | 24 +- .../services/chat-markdown.service.ts | 56 +- .../klipy-gif-picker.component.html | 34 +- .../klipy-gif-picker.component.ts | 35 +- .../typing-indicator.component.html | 9 +- .../typing-indicator.component.ts | 43 +- .../user-list/user-list.component.html | 43 +- .../feature/user-list/user-list.component.ts | 17 +- .../custom-emoji-picker.component.html | 14 +- .../custom-emoji-picker.component.spec.ts | 3 + .../custom-emoji-picker.component.ts | 6 +- .../services/direct-call.service.spec.ts | 13 +- .../services/direct-call.service.ts | 8 +- .../incoming-call-modal.component.html | 8 +- .../incoming-call-modal.component.ts | 14 +- .../feature/dm-chat/dm-chat.component.html | 20 +- .../feature/dm-chat/dm-chat.component.ts | 25 +- .../feature/dm-rail/dm-rail.component.html | 4 +- .../feature/dm-rail/dm-rail.component.ts | 11 +- .../dm-conversation-item.component.html | 8 +- .../dm-conversation-item.component.ts | 33 +- .../dm-conversations-panel.component.html | 8 +- .../dm-conversations-panel.component.ts | 4 +- .../dm-workspace/dm-workspace.component.html | 8 +- .../dm-workspace/dm-workspace.component.ts | 4 +- .../find-people/find-people.component.html | 16 +- .../find-people/find-people.component.ts | 4 +- .../friend-button.component.html | 4 +- .../friend-button/friend-button.component.ts | 9 +- .../user-search-list.component.html | 24 +- .../user-search-list.component.ts | 13 +- .../experimental-vlc-player.component.html | 14 +- .../experimental-vlc-player.component.ts | 3 +- .../application/game-activity.service.spec.ts | 3 + .../application/game-activity.service.ts | 6 +- .../services/notifications.service.spec.ts | 4 + .../services/notifications.service.ts | 5 +- .../domain/logic/notification.logic.ts | 17 +- .../notifications-settings.component.html | 33 +- .../notifications-settings.component.ts | 3 +- .../services/plugin-store.service.spec.ts | 12 +- .../services/plugin-store.service.ts | 16 +- .../plugin-action-menu.component.html | 14 +- .../plugin-action-menu.component.ts | 4 +- .../plugin-manager.component.html | 81 +- .../plugin-manager.component.ts | 44 +- .../plugin-page-host.component.html | 6 +- .../plugin-page-host.component.ts | 4 +- .../plugin-store/plugin-store.component.html | 110 +- .../plugin-store/plugin-store.component.ts | 59 +- .../profile-avatar-editor.component.html | 8 +- .../profile-avatar-editor.component.ts | 10 +- .../screen-share-viewer.component.html | 14 +- .../screen-share-viewer.component.ts | 18 +- .../create-server-dialog.component.html | 48 +- .../create-server-dialog.component.ts | 4 +- .../create-server.component.html | 40 +- .../create-server/create-server.component.ts | 15 +- .../find-servers/find-servers.component.html | 12 +- .../find-servers.component.spec.ts | 5 +- .../find-servers/find-servers.component.ts | 23 +- .../feature/invite/invite.component.html | 38 +- .../feature/invite/invite.component.ts | 22 +- .../server-browser.component.html | 92 +- .../server-browser.component.spec.ts | 5 +- .../server-browser.component.ts | 83 +- .../services/theme.service.spec.ts | 7 +- .../application/services/theme.service.ts | 44 +- .../theme-json-code-editor.component.ts | 6 +- .../theme-settings.component.html | 158 +- .../theme-settings.component.ts | 93 +- .../theme-picker-overlay.component.html | 10 +- .../theme-picker-overlay.component.ts | 6 +- .../floating-voice-controls.component.html | 14 +- .../floating-voice-controls.component.ts | 11 +- .../voice-controls.component.html | 10 +- .../voice-controls.component.ts | 17 +- .../dashboard/dashboard.component.html | 76 +- .../dashboard/dashboard.component.spec.ts | 17 +- .../features/dashboard/dashboard.component.ts | 11 +- .../private-call-controls.component.html | 26 +- .../private-call-controls.component.ts | 4 +- .../direct-call/private-call.component.html | 26 +- .../direct-call/private-call.component.ts | 11 +- .../room/chat-room/chat-room.component.html | 24 +- .../room/chat-room/chat-room.component.ts | 4 +- .../rooms-side-panel.component.html | 138 +- .../rooms-side-panel.component.ts | 35 +- ...voice-workspace-stream-tile.component.html | 47 +- .../voice-workspace-stream-tile.component.ts | 72 +- .../voice-workspace.component.html | 44 +- .../voice-workspace.component.ts | 33 +- .../servers-rail/servers-rail.component.html | 36 +- .../servers-rail/servers-rail.component.ts | 16 +- .../bans-settings.component.html | 12 +- .../bans-settings/bans-settings.component.ts | 3 +- .../data-settings.component.html | 30 +- .../data-settings/data-settings.component.ts | 28 +- .../debugging-settings.component.html | 26 +- .../debugging-settings.component.ts | 6 +- .../general-settings.component.html | 49 +- .../general-settings.component.ts | 3 +- .../ice-server-settings.component.html | 27 +- .../ice-server-settings.component.ts | 19 +- .../local-api-settings.component.html | 43 +- .../local-api-settings.component.ts | 24 +- .../members-settings.component.html | 14 +- .../members-settings.component.ts | 7 +- .../network-settings.component.html | 36 +- .../network-settings.component.ts | 9 +- .../permissions-settings.component.html | 76 +- .../permissions-settings.component.ts | 19 +- .../server-settings.component.html | 76 +- .../server-settings.component.ts | 7 +- .../settings-modal.component.html | 108 +- .../settings-modal.component.ts | 43 +- .../updates-settings.component.html | 104 +- .../updates-settings.component.ts | 61 +- .../voice-settings.component.html | 64 +- .../voice-settings.component.ts | 19 +- .../features/settings/settings.component.html | 50 +- .../features/settings/settings.component.ts | 9 +- .../native-context-menu.component.html | 20 +- .../native-context-menu.component.ts | 3 +- .../shell/title-bar/title-bar.component.html | 60 +- .../shell/title-bar/title-bar.component.ts | 29 +- .../capacitor-mobile-notifications.adapter.ts | 29 +- .../logic/mobile-app-update.rules.spec.ts | 31 +- .../mobile/logic/mobile-app-update.rules.ts | 64 +- .../mobile-app-update.service.spec.ts | 4 + .../services/mobile-app-update.service.ts | 21 +- .../realtime/signaling/signaling.manager.ts | 18 +- .../realtime/state/webrtc-state-controller.ts | 2 +- .../app/shared-kernel/media-preferences.ts | 17 +- .../bottom-sheet/bottom-sheet.component.html | 2 +- .../bottom-sheet/bottom-sheet.component.ts | 3 +- .../chat-audio-player.component.html | 24 +- .../chat-audio-player.component.ts | 7 +- .../chat-video-player.component.html | 26 +- .../chat-video-player.component.ts | 7 +- .../confirm-dialog.component.html | 2 +- .../confirm-dialog.component.ts | 10 +- .../context-menu/context-menu.component.html | 4 +- .../context-menu/context-menu.component.ts | 3 +- .../debug-console-entry-list.component.html | 8 +- .../debug-console-entry-list.component.ts | 11 +- .../debug-console-network-map.component.html | 120 +- .../debug-console-network-map.component.ts | 34 +- .../debug-console-toolbar.component.html | 74 +- .../debug-console-toolbar.component.ts | 33 +- .../debug-console.component.html | 32 +- .../debug-console/debug-console.component.ts | 4 +- .../leave-server-dialog.component.html | 24 +- .../leave-server-dialog.component.ts | 16 +- .../modal-backdrop.component.spec.ts | 9 +- .../modal-backdrop.component.ts | 7 +- .../profile-card-mobile.component.html | 16 +- .../profile-card-mobile.component.ts | 34 +- .../profile-card/profile-card.component.html | 14 +- .../profile-card/profile-card.component.ts | 33 +- .../profile-signal-server-tag.component.html | 2 +- .../profile-signal-server-tag.component.ts | 8 + ...screen-share-quality-dialog.component.html | 16 +- .../screen-share-quality-dialog.component.ts | 17 +- .../screen-share-source-picker.component.html | 32 +- .../screen-share-source-picker.component.ts | 23 +- .../app/store/messages/messages.effects.ts | 20 +- toju-app/src/app/store/rooms/rooms.effects.ts | 14 +- toju-app/src/app/store/users/users.effects.ts | 10 +- toju-app/src/index.html | 2 +- toju-app/tsconfig.app.json | 3 +- toju-app/tsconfig.json | 2 + toju-app/vitest.config.ts | 2 +- tools/resolve-release-version.js | 2 +- tools/sync-app-i18n-catalog.mjs | 112 + 301 files changed, 8247 insertions(+), 2218 deletions(-) create mode 100644 agents-docs/features/app-i18n.md rename docs-site/docs/{using-metoyou.md => using-toju.md} (85%) create mode 100644 electron/app/desktop-branding-migration.ts create mode 100644 electron/app/desktop-branding.rules.spec.ts create mode 100644 electron/app/desktop-branding.rules.ts create mode 100644 electron/app/launch-path.ts create mode 100644 toju-app/public/i18n/catalog/app.json create mode 100644 toju-app/public/i18n/catalog/attachment.json create mode 100644 toju-app/public/i18n/catalog/auth.json create mode 100644 toju-app/public/i18n/catalog/call.json create mode 100644 toju-app/public/i18n/catalog/chat.json create mode 100644 toju-app/public/i18n/catalog/common.json create mode 100644 toju-app/public/i18n/catalog/dashboard.json create mode 100644 toju-app/public/i18n/catalog/dm.json create mode 100644 toju-app/public/i18n/catalog/emoji.json create mode 100644 toju-app/public/i18n/catalog/experimental.json create mode 100644 toju-app/public/i18n/catalog/mobile.json create mode 100644 toju-app/public/i18n/catalog/notifications.json create mode 100644 toju-app/public/i18n/catalog/plugins.json create mode 100644 toju-app/public/i18n/catalog/profile.json create mode 100644 toju-app/public/i18n/catalog/room.json create mode 100644 toju-app/public/i18n/catalog/screenShare.json create mode 100644 toju-app/public/i18n/catalog/servers-rail.json create mode 100644 toju-app/public/i18n/catalog/servers.json create mode 100644 toju-app/public/i18n/catalog/settings.json create mode 100644 toju-app/public/i18n/catalog/shared.json create mode 100644 toju-app/public/i18n/catalog/shell.json create mode 100644 toju-app/public/i18n/catalog/theme.json create mode 100644 toju-app/public/i18n/catalog/voice.json create mode 100644 toju-app/public/i18n/en.json create mode 100644 toju-app/src/app/core/i18n/app-i18n-catalog.rules.spec.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n-catalog.rules.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n.rules.spec.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n.rules.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n.service.spec.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n.service.ts create mode 100644 toju-app/src/app/core/i18n/app-i18n.testing.ts create mode 100644 toju-app/src/app/core/i18n/app-translate.imports.ts create mode 100644 toju-app/src/app/core/i18n/index.ts create mode 100644 toju-app/src/app/domains/access-control/domain/rules/role-display.rules.spec.ts create mode 100644 toju-app/src/app/domains/access-control/domain/rules/role-display.rules.ts create mode 100644 tools/sync-app-i18n-catalog.mjs diff --git a/agents-docs/FEATURES.md b/agents-docs/FEATURES.md index 67fa312..3fe2b18 100644 --- a/agents-docs/FEATURES.md +++ b/agents-docs/FEATURES.md @@ -8,6 +8,7 @@ It must stay accurate as new features are introduced, renamed, merged, or remove ## Feature list (alphabetical) +- [App i18n](features/app-i18n.md) — `@ngx-translate/core` localization for the product client; English-only catalog today, same stack as the marketing website. - [Custom Emoji](features/custom-emoji.md) — peer-synced user-created emoji assets, chat reaction shortcuts, and composer emoji insertion. - [Mobile Capacitor](features/mobile-capacitor.md) — Capacitor native shell, mobile infrastructure facades, and phone-specific call/chat/media integrations. - [Server Discovery](features/server-discovery.md) — featured/trending public-server REST endpoints (server) consumed by the `/dashboard` and `/servers` client pages. diff --git a/agents-docs/features/app-i18n.md b/agents-docs/features/app-i18n.md new file mode 100644 index 0000000..da1535d --- /dev/null +++ b/agents-docs/features/app-i18n.md @@ -0,0 +1,62 @@ +# App i18n + +Client-side UI string localization for the product client (`toju-app`), using the same `@ngx-translate/core` stack as the marketing website. + +## Responsibilities + +- Bundle locale JSON under `toju-app/public/i18n/`. +- Bootstrap translations at app startup via `AppI18nService` (root `App` constructor). +- Expose `APP_TRANSLATE_IMPORTS` for standalone components that use the `translate` pipe in templates. +- Resolve the active locale through `resolveAppLocale()` in `app-i18n.rules.ts`. + +## Boundaries + +- **In scope:** user-visible UI copy in the Angular product client. +- **Out of scope:** server error messages, plugin-authored strings, Electron IPC payloads, and marketing-site copy (`website/public/i18n/`). + +## Key files + +| Path | Role | +|------|------| +| `toju-app/public/i18n/en.json` | English translation catalog (only locale shipped today). | +| `toju-app/src/app/core/i18n/app-i18n.rules.ts` | Supported locales and locale resolution. | +| `toju-app/src/app/core/i18n/app-i18n.service.ts` | Loads bundled JSON into `TranslateService`. | +| `toju-app/src/app/core/i18n/app-translate.imports.ts` | `TranslateModule` import bundle for standalone components. | +| `toju-app/src/app/app.config.ts` | `provideTranslateService()` registration. | + +## Usage + +**Templates** — import `APP_TRANSLATE_IMPORTS` in the standalone component and use the pipe: + +```html +{{ 'common.brand' | translate }} +``` + +**TypeScript** — inject `AppI18nService` (or `TranslateService`) and call `instant()`: + +```ts +this.appI18n.instant('common.brand'); +``` + +## Catalog workflow + +User-visible strings live in fragment files under `toju-app/public/i18n/catalog/*.json`, merged into `toju-app/public/i18n/en.json` by: + +```bash +npm run i18n:sync +``` + +The sync script also extracts `theme.registry.*` labels/descriptions from `theme-registry.logic.ts` and `permissions.*` from `access-control.constants.ts` so those large registries stay DRY. Extracted prefixes use dotted paths and are merged as nested JSON (e.g. `theme.registry.appShell.label`, not a flat `"theme.registry"` root key). + +## Adding a locale later + +1. Add `toju-app/public/i18n/catalog/*.json` fragments for the new locale (or mirror `en.json` structure). +2. Register the locale in `SUPPORTED_APP_LOCALES`. +3. Import and `setTranslation()` in `AppI18nService`. +4. Wire user preference (e.g. general settings) to `AppI18nService.initialize(preferredLocale)`. + +## Tests + +- `toju-app/src/app/core/i18n/app-i18n.rules.spec.ts` +- `toju-app/src/app/core/i18n/app-i18n.service.spec.ts` +- `toju-app/src/app/core/i18n/app-i18n.testing.ts` — `provideAppI18nForTests()` / `initializeAppI18nForTests()` for Vitest injectors diff --git a/docs-site/CONTEXT.md b/docs-site/CONTEXT.md index 1ff81c5..f5855d0 100644 --- a/docs-site/CONTEXT.md +++ b/docs-site/CONTEXT.md @@ -15,7 +15,7 @@ Owns the Docusaurus-based application and plugin-author documentation. The build | Term | Definition | Aliases to avoid | |------|------------|------------------| -| **App docs** | End-user-facing documentation for the MetoYou desktop client. | "manual" | +| **App docs** | End-user-facing documentation for the Toju desktop client. | "manual" | | **Plugin docs** | Developer-facing reference for the plugin runtime — manifest format, lifecycle hooks, host APIs. Authoritative source for the plugin contract surface. | "API docs" | | **Local API server** | The Electron in-process HTTP server that mounts `docs-site/build/` so the renderer can browse docs offline. Defined under `electron/api/`. | "embedded server" | diff --git a/docs-site/docs/desktop-and-local-api.md b/docs-site/docs/desktop-and-local-api.md index f818099..e161b1f 100644 --- a/docs-site/docs/desktop-and-local-api.md +++ b/docs-site/docs/desktop-and-local-api.md @@ -48,7 +48,7 @@ This avoids: 1. Add trusted signaling server URLs in desktop settings. 2. Start the Local API server. 3. Call `POST /api/auth/login` with `username`, `password`, and `serverUrl`. -4. MetoYou validates credentials through the signaling server. +4. Toju validates credentials through the signaling server. 5. The desktop app issues an opaque local bearer token. 6. Use `Authorization: Bearer ` for protected routes. diff --git a/docs-site/docs/developer/contributing.md b/docs-site/docs/developer/contributing.md index 418bca4..4ebe42e 100644 --- a/docs-site/docs/developer/contributing.md +++ b/docs-site/docs/developer/contributing.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Contributing -MetoYou is an npm-managed monorepo. +Toju is an npm-managed monorepo. ## Packages diff --git a/docs-site/docs/developer/llm-plugin-builder-guide.md b/docs-site/docs/developer/llm-plugin-builder-guide.md index f423721..1ebf1dd 100644 --- a/docs-site/docs/developer/llm-plugin-builder-guide.md +++ b/docs-site/docs/developer/llm-plugin-builder-guide.md @@ -4,11 +4,11 @@ sidebar_position: 5 # LLM Plugin Builder Guide -Copy this page into an LLM prompt when you want it to build a MetoYou plugin. It is intentionally explicit about the app, communication model, visual structure, manifest format, runtime rules, API types, and examples so the model has fewer gaps to invent around. +Copy this page into an LLM prompt when you want it to build a Toju plugin. It is intentionally explicit about the app, communication model, visual structure, manifest format, runtime rules, API types, and examples so the model has fewer gaps to invent around. ## Task For The LLM -Build a MetoYou client plugin: a browser-safe JavaScript ES module with a `toju-plugin.json` manifest, loaded by the Angular renderer, running inside the user's local MetoYou app, using only browser APIs and the provided `TojuClientPluginApi`. +Build a Toju client plugin: a browser-safe JavaScript ES module with a `toju-plugin.json` manifest, loaded by the Angular renderer, running inside the user's local Toju app, using only browser APIs and the provided `TojuClientPluginApi`. Return a plugin folder like this: @@ -22,7 +22,7 @@ my-plugin/ ## Hard Rules -- Do not modify MetoYou core unless the user explicitly asks for a core code change. +- Do not modify Toju core unless the user explicitly asks for a core code change. - Use plain browser ESM in `main.js`. Do not use Node APIs, `require`, `fs`, `path`, `child_process`, or build tooling unless explicitly requested. - Use `toju-plugin.json` as the manifest name. - Put every disposable returned by plugin APIs in `context.subscriptions`. @@ -35,9 +35,9 @@ my-plugin/ - Server-installed plugins are requirement metadata plus local client downloads. The signaling server never executes plugin entrypoints. - Every event used with `api.events.*` must be declared in the manifest `events` array. -## What MetoYou Is +## What Toju Is -MetoYou is a Discord-like chat and voice app: +Toju is a Discord-like chat and voice app: - `toju-app/`: Angular renderer and plugin runtime. - `electron/`: Electron desktop shell, preload bridge, local database, local REST API, local docs host. @@ -178,7 +178,7 @@ Minimal manifest: "schemaVersion": 1, "id": "example.my-plugin", "title": "My Plugin", - "description": "Adds a focused MetoYou feature.", + "description": "Adds a focused Toju feature.", "version": "1.0.0", "kind": "client", "scope": "client", @@ -855,7 +855,7 @@ const currentUser = api.profile.getCurrent(); api.profile.update({ displayName: 'Ludde the Builder', - description: 'Building plugins for MetoYou.' + description: 'Building plugins for Toju.' }); api.profile.updateAvatar({ diff --git a/docs-site/docs/developer/rest-api.md b/docs-site/docs/developer/rest-api.md index a056ed0..450c791 100644 --- a/docs-site/docs/developer/rest-api.md +++ b/docs-site/docs/developer/rest-api.md @@ -4,7 +4,7 @@ sidebar_position: 4 # Local REST API -The MetoYou desktop app exposes an optional local HTTP API for scripts and tools. It is implemented in Electron and reads local desktop data. +The Toju desktop app exposes an optional local HTTP API for scripts and tools. It is implemented in Electron and reads local desktop data. ## Enable the API diff --git a/docs-site/docs/intro.md b/docs-site/docs/intro.md index de58d85..1e23986 100644 --- a/docs-site/docs/intro.md +++ b/docs-site/docs/intro.md @@ -3,9 +3,9 @@ slug: / sidebar_position: 1 --- -# MetoYou Documentation +# Toju Documentation -MetoYou is a desktop-first chat app with text channels, voice channels, direct messages, plugins, local desktop storage, a local REST API, and a Docusaurus documentation site bundled into the app. +Toju is a desktop-first chat app with text channels, voice channels, direct messages, plugins, local desktop storage, a local REST API, and a Docusaurus documentation site bundled into the app. This site is split into three paths: @@ -26,7 +26,7 @@ The Electron app can host this documentation locally. The docs endpoint is not a ## Runtime Boundaries -MetoYou keeps responsibilities split by package: +Toju keeps responsibilities split by package: - `toju-app/` is the Angular product client and plugin runtime. - `electron/` is the main process, preload bridge, IPC, local persistence, and local HTTP host. diff --git a/docs-site/docs/plugin-development/api/commands.md b/docs-site/docs/plugin-development/api/commands.md index 9ae77f5..d16f63a 100644 --- a/docs-site/docs/plugin-development/api/commands.md +++ b/docs-site/docs/plugin-development/api/commands.md @@ -4,7 +4,7 @@ sidebar_position: 12 # Slash Commands API -The Commands API lets plugins register `/` slash commands. When a user types `/` in the chat composer, MetoYou shows a Discord-style autocomplete menu of available commands. Selecting a command (click, `Enter`, or `Tab`) runs it — either immediately when it declares no options, or after the user types the requested arguments. +The Commands API lets plugins register `/` slash commands. When a user types `/` in the chat composer, Toju shows a Discord-style autocomplete menu of available commands. Selecting a command (click, `Enter`, or `Tab`) runs it — either immediately when it declares no options, or after the user types the requested arguments. ## Required Capabilities @@ -28,7 +28,7 @@ Use `global` for commands that work without a server context (e.g. `/help`, `/sh ## Options and Argument Parsing -Declare `options` to describe the arguments a command accepts. MetoYou parses what the user typed after the command name and passes the result to `run` as `context.args`, keyed by option name. +Declare `options` to describe the arguments a command accepts. Toju parses what the user typed after the command name and passes the result to `run` as `context.args`, keyed by option name. ```ts interface PluginApiSlashCommandOption { @@ -104,7 +104,7 @@ Returns every slash command currently registered across all active plugins, incl ## Built-in Commands -MetoYou ships first-party commands that are always available without any plugin, such as `/lenny` (posts `( ͡° ͜ʖ ͡°)`). They appear in the same autocomplete menu tagged as **Built-in**. Plugin commands are listed alongside them; if a plugin registers a command with the same name as a built-in, both appear and the user can pick either. +Toju ships first-party commands that are always available without any plugin, such as `/lenny` (posts `( ͡° ͜ʖ ͡°)`). They appear in the same autocomplete menu tagged as **Built-in**. Plugin commands are listed alongside them; if a plugin registers a command with the same name as a built-in, both appear and the user can pick either. ## How Input Is Handled diff --git a/docs-site/docs/plugin-development/api/ui.md b/docs-site/docs/plugin-development/api/ui.md index bf084e8..69e56b9 100644 --- a/docs-site/docs/plugin-development/api/ui.md +++ b/docs-site/docs/plugin-development/api/ui.md @@ -153,7 +153,7 @@ export function activate(context) { Toolbar actions are command-style plugin entries shown in the server side panel's View plugins menu. Use them for small actions that should be easy to launch from a server, such as opening a plugin page, sending a status message, starting a timer, or toggling a plugin feature. -The View plugins link appears in `[data-testid="plugin-room-side-panel"]` when the plugin side-panel area is rendered. Opening it shows an overlay menu, positioned like profile-card overlays, with registered actions laid out as plugin icon tiles. The `icon` field can be short text such as `RH`, an emoji, or an image URL; when omitted, MetoYou falls back to initials from the plugin/action labels. +The View plugins link appears in `[data-testid="plugin-room-side-panel"]` when the plugin side-panel area is rendered. Opening it shows an overlay menu, positioned like profile-card overlays, with registered actions laid out as plugin icon tiles. The `icon` field can be short text such as `RH`, an emoji, or an image URL; when omitted, Toju falls back to initials from the plugin/action labels. Toolbar action callbacks receive an action context with `source: 'toolbarAction'`, the current user, current server, active text channel, and current voice channel when available. diff --git a/docs-site/docs/plugin-development/create-a-plugin.md b/docs-site/docs/plugin-development/create-a-plugin.md index 1705b93..6e71663 100644 --- a/docs-site/docs/plugin-development/create-a-plugin.md +++ b/docs-site/docs/plugin-development/create-a-plugin.md @@ -4,7 +4,7 @@ sidebar_position: 1 # Create a Plugin -MetoYou plugins are browser-safe ES modules loaded by the Angular renderer. A plugin receives a frozen `TojuClientPluginApi`, declares every privileged capability in its manifest, and registers cleanup work through disposables. +Toju plugins are browser-safe ES modules loaded by the Angular renderer. A plugin receives a frozen `TojuClientPluginApi`, declares every privileged capability in its manifest, and registers cleanup work through disposables. ## Folder Layout diff --git a/docs-site/docs/plugin-development/manifest.md b/docs-site/docs/plugin-development/manifest.md index b9bfe7d..87a885c 100644 --- a/docs-site/docs/plugin-development/manifest.md +++ b/docs-site/docs/plugin-development/manifest.md @@ -132,7 +132,7 @@ interface TojuPluginManifest { `scope: "server"` marks a plugin as server-scoped. Server-scoped store entries can be installed to a chat server as requirements. Required server plugins are auto-installed for members when that server opens; optional requirements stay listed but do not auto-install. -When a user installs a server-scoped plugin into the server they are currently viewing, MetoYou enables that plugin id locally and activates the plugin immediately after the local manifest is registered. Installing a server-scoped plugin for another server records the activation preference so it activates when that server is opened. +When a user installs a server-scoped plugin into the server they are currently viewing, Toju enables that plugin id locally and activates the plugin immediately after the local manifest is registered. Installing a server-scoped plugin for another server records the activation preference so it activates when that server is opened. ## Entrypoint and Bundle diff --git a/docs-site/docs/user-guide/first-steps.md b/docs-site/docs/user-guide/first-steps.md index 519e861..bee961d 100644 --- a/docs-site/docs/user-guide/first-steps.md +++ b/docs-site/docs/user-guide/first-steps.md @@ -4,7 +4,7 @@ sidebar_position: 1 # First Steps -MetoYou is a chat app for servers, text conversations, direct messages, and live voice. You do not need to understand the technical parts to use it. +Toju is a chat app for servers, text conversations, direct messages, and live voice. You do not need to understand the technical parts to use it. ## Main Words @@ -18,11 +18,11 @@ MetoYou is a chat app for servers, text conversations, direct messages, and live ## Sign In -1. Open MetoYou. +1. Open Toju. 2. Sign in with your username and password. 3. If you use more than one signaling server, choose the server endpoint that owns your account. -A signaling server handles accounts, server discovery, membership, and connection setup. In normal use you can think of it as the place MetoYou checks when you log in and join servers. +A signaling server handles accounts, server discovery, membership, and connection setup. In normal use you can think of it as the place Toju checks when you log in and join servers. ## Find a Server diff --git a/docs-site/docs/user-guide/plugins.md b/docs-site/docs/user-guide/plugins.md index 36f29a2..992b256 100644 --- a/docs-site/docs/user-guide/plugins.md +++ b/docs-site/docs/user-guide/plugins.md @@ -4,7 +4,7 @@ sidebar_position: 5 # Plugins for Users -Plugins add features to MetoYou. They can add pages, buttons, panels, settings, sounds, message tools, custom embeds, or server-specific behavior. +Plugins add features to Toju. They can add pages, buttons, panels, settings, sounds, message tools, custom embeds, or server-specific behavior. ## Types of Plugins @@ -44,7 +44,7 @@ Desktop builds can discover local plugin folders from the app data plugins direc ## Server Plugin Prompts -When a server uses plugins, MetoYou may show a prompt. +When a server uses plugins, Toju may show a prompt. | Status | Meaning | | ------------ | --------------------------------------------------------------------------------- | @@ -85,4 +85,4 @@ The Plugin Manager lets you: ## Plugin Safety Notes -Plugins are browser-safe JavaScript modules loaded by the client. They do not run on the signaling server. A plugin can only call privileged MetoYou APIs when its manifest declares the capability and you grant it. +Plugins are browser-safe JavaScript modules loaded by the client. They do not run on the signaling server. A plugin can only call privileged Toju APIs when its manifest declares the capability and you grant it. diff --git a/docs-site/docs/user-guide/servers-and-channels.md b/docs-site/docs/user-guide/servers-and-channels.md index 0ba24b3..e616ebb 100644 --- a/docs-site/docs/user-guide/servers-and-channels.md +++ b/docs-site/docs/user-guide/servers-and-channels.md @@ -4,7 +4,7 @@ sidebar_position: 2 # Servers and Channels -A server is the main shared space in MetoYou. Servers contain members, channels, permissions, optional plugins, and server settings. +A server is the main shared space in Toju. Servers contain members, channels, permissions, optional plugins, and server settings. ## Server Rail diff --git a/docs-site/docs/user-guide/settings.md b/docs-site/docs/user-guide/settings.md index 70e21a9..a47bc83 100644 --- a/docs-site/docs/user-guide/settings.md +++ b/docs-site/docs/user-guide/settings.md @@ -20,7 +20,7 @@ Settings control the app, voice, plugins, servers, themes, updates, local APIs, ## Local Data -Desktop MetoYou stores local app data on your device. That can include rooms, messages, users, plugin data, settings, and metadata. The desktop settings include data import/export tools. +Desktop Toju stores local app data on your device. That can include rooms, messages, users, plugin data, settings, and metadata. The desktop settings include data import/export tools. ## Local API and Documentation Hosting diff --git a/docs-site/docs/user-guide/text-and-direct-messages.md b/docs-site/docs/user-guide/text-and-direct-messages.md index cc74aa3..40339c7 100644 --- a/docs-site/docs/user-guide/text-and-direct-messages.md +++ b/docs-site/docs/user-guide/text-and-direct-messages.md @@ -34,7 +34,7 @@ Type `/` at the start of the message box to open the slash command menu. It list - Press `Escape` to close the menu. - A command that needs extra text fills the box with `/name ` so you can type the rest, then send it. -MetoYou includes built-in commands such as `/lenny`, which posts `( ͡° ͜ʖ ͡°)`. Plugins can add their own commands, which appear in the same menu (tagged with the plugin name). Slash commands are available in both text channels and direct messages; some plugin commands only appear inside a server. Text that starts with `/` but matches no command is sent as a normal message. +Toju includes built-in commands such as `/lenny`, which posts `( ͡° ͜ʖ ͡°)`. Plugins can add their own commands, which appear in the same menu (tagged with the plugin name). Slash commands are available in both text channels and direct messages; some plugin commands only appear inside a server. Text that starts with `/` but matches no command is sent as a normal message. ## Attachments and Media @@ -42,8 +42,8 @@ Attachments can appear as files, images, audio, or video depending on the file t ## Message Sync -MetoYou stores messages locally and syncs recent messages with peers when connections are available. If you were offline, messages may appear after peers reconnect and exchange their recent message lists. +Toju stores messages locally and syncs recent messages with peers when connections are available. If you were offline, messages may appear after peers reconnect and exchange their recent message lists. ## Plugin Messages -Some plugins can send messages, create bot-style plugin users, render custom embeds, or add composer buttons. MetoYou asks for plugin capability grants before plugins can use privileged message features. \ No newline at end of file +Some plugins can send messages, create bot-style plugin users, render custom embeds, or add composer buttons. Toju asks for plugin capability grants before plugins can use privileged message features. \ No newline at end of file diff --git a/docs-site/docs/user-guide/voice-channels.md b/docs-site/docs/user-guide/voice-channels.md index 845b012..eb2022a 100644 --- a/docs-site/docs/user-guide/voice-channels.md +++ b/docs-site/docs/user-guide/voice-channels.md @@ -45,7 +45,7 @@ When someone shares camera or screen, the voice workspace can expand into a larg ## Floating Voice Controls -If you navigate away from the server while still connected to voice, MetoYou can show floating voice controls. Use them to return to the voice server or leave the call. +If you navigate away from the server while still connected to voice, Toju can show floating voice controls. Use them to return to the voice server or leave the call. ## Voice Settings diff --git a/docs-site/docs/using-metoyou.md b/docs-site/docs/using-toju.md similarity index 85% rename from docs-site/docs/using-metoyou.md rename to docs-site/docs/using-toju.md index a359391..97df9c4 100644 --- a/docs-site/docs/using-metoyou.md +++ b/docs-site/docs/using-toju.md @@ -2,11 +2,11 @@ sidebar_position: 2 --- -# Using MetoYou +# Using Toju ## Sign In -MetoYou signs in through a signaling server. The signaling server validates the user account, coordinates server membership, relays selected realtime messages, and helps peers establish WebRTC connections. +Toju signs in through a signaling server. The signaling server validates the user account, coordinates server membership, relays selected realtime messages, and helps peers establish WebRTC connections. For the desktop Local API, the same signaling server allow-list is used before local bearer tokens can be issued. This keeps local automation tied to servers you explicitly trust. @@ -39,7 +39,7 @@ Desktop builds include platform integrations such as Linux display-server detect Open the Plugin Store from the title bar package button or menu. The plugin manager separates global client plugins from server-scoped plugins. Installed plugins can be activated, reloaded, unloaded, disabled, inspected for logs, and granted capabilities. -Plugins are explicit runtime modules. MetoYou loads browser-safe ES modules, passes a frozen API object, and cleans up registered disposables when a plugin unloads. +Plugins are explicit runtime modules. Toju loads browser-safe ES modules, passes a frozen API object, and cleans up registered disposables when a plugin unloads. ## Desktop Settings diff --git a/docs-site/docusaurus.config.ts b/docs-site/docusaurus.config.ts index 386629d..ba76169 100644 --- a/docs-site/docusaurus.config.ts +++ b/docs-site/docusaurus.config.ts @@ -2,7 +2,7 @@ import type { Config } from '@docusaurus/types'; import type * as Preset from '@docusaurus/preset-classic'; const config: Config = { - title: 'MetoYou Docs', + title: 'Toju Docs', tagline: 'Desktop chat, local APIs, and plugin development', url: 'http://127.0.0.1', baseUrl: '/docusaurus/', @@ -31,7 +31,7 @@ const config: Config = { ], themeConfig: { navbar: { - title: 'MetoYou Docs', + title: 'Toju Docs', items: [ { type: 'docSidebar', sidebarId: 'mainSidebar', position: 'left', label: 'Guides' }, { to: '/user-guide/first-steps', label: 'User Guide', position: 'left' }, @@ -56,7 +56,7 @@ const config: Config = { ] } ], - copyright: 'MetoYou local documentation. Built with Docusaurus.' + copyright: 'Toju local documentation. Built with Docusaurus.' }, prism: { additionalLanguages: [ diff --git a/docs-site/sidebars.ts b/docs-site/sidebars.ts index cf95737..97fdf46 100644 --- a/docs-site/sidebars.ts +++ b/docs-site/sidebars.ts @@ -13,7 +13,7 @@ const sidebars: SidebarsConfig = { 'user-guide/voice-channels', 'user-guide/plugins', 'user-guide/settings', - 'using-metoyou' + 'using-toju' ] }, { diff --git a/electron/api/docs-html.ts b/electron/api/docs-html.ts index 405aa96..c206165 100644 --- a/electron/api/docs-html.ts +++ b/electron/api/docs-html.ts @@ -80,7 +80,7 @@ export function getDocsHtml(specUrl: string): string { http-equiv="Content-Security-Policy" content="${contentSecurityPolicy}" /> - MetoYou Local API + Toju Local API