diff --git a/package.json b/package.json index cfcf53c..baed7f7 100644 --- a/package.json +++ b/package.json @@ -5,6 +5,7 @@ "type": "module", "scripts": { "dev": "vite", + "dev:app": "VITE_ENABLE_APP_ROUTES_IN_BROWSER=true vite", "build:web": "tsc && vite build", "build": "bun run build:web", "preview": "vite preview", diff --git a/playwright.config.ts b/playwright.config.ts index ed87abd..3537198 100644 --- a/playwright.config.ts +++ b/playwright.config.ts @@ -18,7 +18,8 @@ export default defineConfig({ }, ], webServer: { - command: "npm run dev -- --host 127.0.0.1 --port 1420", + command: + "VITE_ENABLE_APP_ROUTES_IN_BROWSER=true npm run dev -- --host 127.0.0.1 --port 1420", url: "http://127.0.0.1:1420", reuseExistingServer: !process.env.CI, timeout: 120000, diff --git a/src/App.tsx b/src/App.tsx index 68db654..e07d4d0 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -2,6 +2,7 @@ import { lazy, Suspense, useEffect, useRef, useState } from "react"; import { Navigate, Route, Routes, useNavigate } from "react-router-dom"; import { getPengineHealth } from "./modules/bot/api"; import { useAppSessionStore } from "./modules/bot/store/appSessionStore"; +import { isMarketingWebsite } from "./shared/runtimeTarget"; const LandingPage = lazy(() => import("./pages/LandingPage").then((m) => ({ default: m.LandingPage })), @@ -70,6 +71,7 @@ function StartupDashboardRedirect() { function App() { const [sessionReady, setSessionReady] = useState(false); + const marketingSite = isMarketingWebsite(); useEffect(() => { if (useAppSessionStore.persist.hasHydrated()) { @@ -94,13 +96,17 @@ function App() { return (
About
++ Links and compliance information for the open source app. +
+Contact info
-- Project links and maintainer contact on social platforms. -
-Privacy info
-- Pengine is a{" "} - desktop app that - runs an agent loop on your machine. There is no Pengine-hosted account or - cloud database for your chats: ordinary use keeps configuration and skills on - your device, while the bot and tools you enable determine what leaves it. -
-- The app does not include first-party analytics or behavioral tracking, and it - does not phone home to a Pengine telemetry service. The dashboard may{" "} - - check GitHub’s public API - {" "} - for new releases (version metadata only), which is subject to GitHub’s own - policies and your network path. -
-- Pengine stores app data under your OS app-data location: connection metadata, - skills, MCP configuration, and UI-related settings files. Sensitive values - such as your{" "} - Telegram bot token{" "} - and MCP secrets you configure are kept in the{" "} - - platform secure store - {" "} - (for example Keychain on macOS), not in a Pengine cloud. -
-- When your bot is connected, message traffic uses{" "} - Telegram’s services{" "} - per Telegram’s terms. The app sends prompts and tool activity to{" "} - - Ollama (or another endpoint you configure) - - — typically on your LAN or localhost, but cloud or remote models are possible - if you point the stack there. Any{" "} - - MCP servers, containers, or custom tools - {" "} - you add can read or forward data according to their own configuration; treat - them like any other software you install. -
-- You choose the bot, models, skills, and tools. This policy describes how - Pengine is designed to run locally; it does not replace Telegram’s, your host - OS’s, or your inference provider’s policies. For exact storage and startup - behavior, see the project documentation in the repository. -
-About the app
-- Pengine is a local AI agent runtime: it connects your Telegram bot to Ollama (or - compatible inference) so conversations and tools run on your hardware. The project - is open source; see the GitHub repository above for license and source code. -
- {appVersion && ( -- Reported app version: v{appVersion} -
- )} -Contact info
++ Project links and maintainer contact on social platforms. +
+Privacy info
++ Pengine is a desktop app{" "} + that runs an agent loop on your machine. There is no Pengine-hosted account or cloud + database for your chats: ordinary use keeps configuration and skills on your device, + while the bot and tools you enable determine what leaves it. +
++ The app does not include first-party analytics or behavioral tracking, and it does not + phone home to a Pengine telemetry service. The dashboard may{" "} + check GitHub’s public API{" "} + for new releases (version metadata only), which is subject to GitHub’s own policies + and your network path. +
++ Pengine stores app data under your OS app-data location: connection metadata, skills, + MCP configuration, and UI-related settings files. Sensitive values such as your{" "} + Telegram bot token and MCP + secrets you configure are kept in the{" "} + platform secure store (for + example Keychain on macOS), not in a Pengine cloud. +
++ When your bot is connected, message traffic uses{" "} + Telegram’s services per + Telegram’s terms. The app sends prompts and tool activity to{" "} + + Ollama (or another endpoint you configure) + + — typically on your LAN or localhost, but cloud or remote models are possible if you + point the stack there. Any{" "} + + MCP servers, containers, or custom tools + {" "} + you add can read or forward data according to their own configuration; treat them like + any other software you install. +
++ You choose the bot, models, skills, and tools. This policy describes how Pengine is + designed to run locally; it does not replace Telegram’s, your host OS’s, or your + inference provider’s policies. For exact storage and startup behavior, see the project + documentation in the repository. +
+About the app
++ Pengine is a local AI agent runtime: it connects your Telegram bot to Ollama (or + compatible inference) so conversations and tools run on your hardware. The project is open + source; see the GitHub repository above for license and source code. +
+ {appVersion ? ( ++ Reported app version: v{appVersion} +
+ ) : null} +- {isOnSetup ? "Setup in progress" : "Runtime dashboard"} -
+ {!marketingSite && ( ++ {isOnSetup ? "Setup in progress" : "Runtime dashboard"} +
+ )}