DeepSeek Harness Remote
DeepSeek Harness Remote 可将手机或另一台电脑与你运行 DeepSeek Harness 的电脑安全连接,随时随地继续你的工作,方便随时查看进度并继续工作。
AI 翻译
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证MORI — a pocket companion concept, interactive pet, and focus ritual for small wins.
翻译准备中
取自仓库 README
正在加载完整 README。
查看完整 README ↗The October 29 design revision gives Mori a quieter ivory/sage landing page, a softer desk-friendly silhouette, interactive shell previews, and a flat heel with rear USB-C in the hardware study. The page focuses on the working browser demo and prototype updates; speculative accessory pricing and unbuilt memory features have been removed.
See the current hardware build brief for the USB-first architecture, component candidates, controls, device-service work, mechanical checks, and prototype gates. The model is an illustrative concept, not fit-validated CAD or a production BOM. Battery, motion and haptics remain later-stage provisions in the explorer.
Live site · GitHub repository (private)
A quiet voice and text workspace for AI. One screen, one pixel Mori, three provider choices, and a place to talk or type. Warm ivory/forest by day, charcoal/lime by night. The detailed pocket-device design concept and local companion/focus ritual live in their own views, not below a long marketing page. The live URL above is the published site; local changes appear there only after an owner-authorized deployment.
AI needs owner unlock and a configured server route. The linked Vercel
project has verified OpenAI openai/gpt-5.4-nano through AI Gateway using its
OIDC identity, without an additional OpenAI API key. This does not establish
Claude/Gemini availability or verify native browser voice. Unconfigured routes
truthfully show “Needs setup”; configuration alone never proves a connection
healthy, and Mori does not generate demo replies or fabricate usage. See
AI connection setup and limitations.
Mori uses provider APIs, not ChatGPT/Claude/Gemini app subscriptions or their chat history. This first version supports three providers, not every AI agent. There are no email/calendar tools, arbitrary account integrations, payments, cloud transcript database, or manufactured device. It is not an installable/offline PWA.
Use Node 22.12+ (Node 22 LTS or newer) and npm. Run from this repository root:
npm ci
npm run dev -- --port 4175
Open http://127.0.0.1:4175. The server binds only to the local machine.
The Vite dev server includes same-origin /api middleware. An unconfigured
server is safe to explore: the console shows setup guidance, while the local
world, hardware studio, and themes work without secrets.
To enable AI, follow docs/AI_CONNECTIONS.md. The
one-time npm run setup:ai helper creates a private owner access code without
overwriting an existing private settings file. Keep the code server-side
and enter it only in Mori’s Settings dialog to unlock. Choose either route:
.env.ai.local and explicitly opt in:
MORI_GATEWAY_PROVIDERS=openai npm run dev -- --port 4175
The server uses the linked project's OIDC identity, loaded privately from
.env.local during local development and supplied by Vercel on deployment.
This route uses openai/gpt-5.4-nano; no additional OpenAI API key is needed.
OIDC presence alone does not opt a provider in. Local identity can expire;
follow the connection guide for authorized refresh rather than exposing tokens.Only the OpenAI nano Gateway route is verified for the current account. Claude and Gemini still need their own direct keys, unless the owner later obtains eligible Gateway access and explicitly enables those providers. Their Gateway models were denied by the current free-tier account. Gateway eligibility, credits, and budgets can change; Mori does not purchase credits or upgrade plans.
No provider key entry belongs in the webpage. Do not paste real codes, keys, or
OIDC tokens into chat, source control, or public logs, and do not prefix server
secrets with VITE_. Consumer chat subscriptions and history do not automatically
connect through either route.
npm run build # Production assets → website/dist/
npm run preview -- --port 4176 # Static build review only, NOT the local AI API
The package’s default dev/preview port is 4173; these explicit ports avoid
interrupting an unrelated project. Check listener ownership before reusing a port.
Use the dev server or the deployed serverless API for functional AI testing,
not Vite’s static preview.
Fonts are packaged and self-hosted, with no Google Fonts requests. Their OFL
copyright notices and license ship in website/public/font-licenses.txt.
The 3D studio uses exactly pinned Three.js 0.186.1 and GSAP 3.15.0
(including ScrollTrigger). Software notices ship in
website/public/software-licenses.txt; GSAP uses its standard no-charge license.
The shared palette uses warm ivory, muted sage, fine borders, and restrained shadows. Fredoka gives the landing headlines a friendly character; DM Sans keeps supporting copy and app controls clear. website/src/system.css maps legacy tokens to the shared palette, then website/src/refinement.css applies the current design to the landing, Talk, Play, Device and Settings. Both light and dark themes remain supported.
A fresh visit opens the landing page (/ or #home). The hero has pat, nap and play reactions, pointer-following eyes, and accessible sage/cream/lavender previews. Preview finishes do not overwrite the saved companion shell. Moods introduce the personality; the physical-controls section and #lineup explain the proposed device and USB-first prototype. The page ends with a working waitlist flow. No accessory prices, shipping dates, or unbuilt cloud-memory claims are presented.
Markup lives in website/index.html; behavior in website/src/landing.js; base layout in website/src/landing.css; current visual refinements in website/src/refinement.css. Fonts are self-hosted. The new browser regression checks finish previews, storage isolation, reactions and review screenshots alongside the existing responsive and accessibility checks.
The landing page ends with a first batch waitlist (#waitlist): an email
address plus which product the person is most excited about. It posts to
POST /api/waitlist, which needs no owner code and has its own per-client rate
limit (5 per 10 minutes). Each signup is one private Vercel Blob,
waitlist/<sha256 of the email>.json, holding the email, interest and join time.
A repeat signup keeps the first record and still reports success, so the form
never reveals who is already on the list. A hidden honeypot field drops bot
submissions without storing them.
The Blob store mori-waitlist is connected to the Vercel project, which supplies
BLOB_READ_WRITE_TOKEN. To read the list:
vercel env pull .env.local # once, from the linked project
npm run waitlist > waitlist.csv
Without the token the endpoint answers 503 SETUP_REQUIRED and the form says so.
#talk (or the legacy #top). The logo returns to the
landing page. Talk, the composer and Send fit the first screen, including
a compact 320×568 window; there is no empty transcript panel before a reply.#play,
with #wins for saved wins), Talk, the theme toggle, and Join waitlist.
The settings icon appears only on Talk; the footer's Help & privacy opens the
same dialog everywhere. Device (#inside) is linked from the landing page. These are same-document hash
views, not separate pages or a routing framework. Inactive views are natively
hidden and inert: no home-page height and no stray keyboard stops.mori-name value is migrated when available.The Hardware studio (#inside) is a design illustration, not manufactured
hardware, CAD, a production schematic, or a released BOM. Proposed parts are
grounded in the research document; fit, specifications, safety, and battery life
are not validated. Inspecting a proposed microphone or radio does not activate
anything; the independent web console can use browser voice only when invited.
AI conversations and drafts are kept separately per provider in page memory
only, with no persistence by default. A request sends that provider’s current
conversation to /api/chat, then to the selected provider from the server,
directly or through the explicitly enabled Vercel AI Gateway route. This app
does not store server transcripts; the provider and, when used, Gateway may
process or retain data under their own policies. No other model provider
silently receives a switched chat.
New conversation clears only the selected history and draft.
Browser recognition may send audio to the browser’s speech service. Read-aloud uses browser speech synthesis, whose implementation depends on the browser. Voice testing uses controlled fakes, never the user’s microphone.
mori-world-v1 in this origin’s localStorage contains only the companion name,
shell, interaction counts, bond, active session, and recent wins. Data is local
to this browser and this site origin: localhost, preview deployments, and
production are separate worlds. Nothing synchronizes between devices.
Local focus-task text is rendered with textContent and is never sent to AI.
mori-theme contains only the explicit light or dark appearance preference.
It is not part of mori-world-v1; blocked storage still permits a temporary
in-memory theme choice, and an unchosen theme is always light.
Storage is written only on user changes, startup/migration, and timer expiry, not on countdown ticks. Invalid records are normalized or discarded with a visible recovery message. When storage is blocked or full, the experience continues in memory with an explicit “only in this tab” notice; a reload may then lose unsaved changes. Clearing browser data also clears your world. The timer uses the device clock, not a server; manually changing that clock can change when a running timer ends. It does not send background notifications.
node --test tests/state.test.js # Pure local-companion domain checks
npm run test:api # Server API tests; no paid inference
npm test # Both Node suites
npx playwright install chromium # One-time browser setup, if needed
npm run test:browser # Starts an owned dev server on 4175 by default
npm run check # Node tests + build + browser checks
git diff --check
If Chrome is already installed, use it instead of downloading Chromium:
PLAYWRIGHT_CHANNEL=chrome npm run test:browser
# Or use a dev server you have already started and verified:
MORI_BASE_URL=http://127.0.0.1:4175 PLAYWRIGHT_CHANNEL=chrome npm run test:browser -- --workers=2
MORI_BASE_URL skips Playwright’s server startup, so the caller is responsible
for the specified server. The asset check compares the exact selected origin;
it does not allow third-party assets.
The browser spec adds mocked API-contract checks for missing setup, unlock success/failure/expiry/lock, mode payloads, provider-isolated histories, plain-text replies, real-response metrics, unknown/partial usage, new chat, limits, retry, network errors, and cancellation even when a stale transport ignores abort. Injected Web Speech fakes verify explicit start, one-turn final transcripts, read-aloud, stop/switch/view-exit/pagehide cleanup, unsupported browsers, and permission/no-speech/network errors. These do not verify actual provider inference, model availability, real microphone permissions, or device audio. A separate, bounded owner-approved UI integration check verified unlock, one real OpenAI nano Gateway reply with positive reported usage/timing, and provider-isolated history when switching to unavailable Claude and back. It used the linked project's OIDC identity, not an additional OpenAI API key. That evidence is specific to this route and account, not all providers or future availability. Native microphone permissions and device audio still need a separate explicit real-device check; no paid provider request is needed for the automated suite.
Retained tests cover adoption, text-injection safety, distinct
interactions, preview/reload, pause/resume, confirmed real wins, cancellation,
forget/reset, storage failures, keyboard dialogs, self-hosted assets, and
320 / 390 / 768 / 1440px layouts in both themes (including 320×568 first-screen
controls). View checks cover hidden content/tab order, progressive disclosure,
deep links landing on Talk, reload/back/forward, retained drafts and cancelled hidden voice.
Hardware checks exercise actual WebGL draws and
mesh transforms (including identical closed renders and reverse scroll), all
16 selectors, isolated close-ups, short mobile windows, live reduced-motion
cleanup, theme/shell sync, AA UI text contrast, system/blocked-storage preferences,
and import/context-loss/unsupported-WebGL fallbacks. A Playwright-controlled
clock tests full 5-minute sessions without waiting in real time.
For resource-constrained machines, append -- --workers=2 to the browser command.
Optional review screenshots (the directory must already exist):
mkdir -p /tmp/mori-simple-review
MORI_SCREENSHOTS=1 PLAYWRIGHT_CHANNEL=chrome npm run test:browser
These write /tmp/mori-simple-review/mori-desktop.png and
/tmp/mori-simple-review/mori-mobile.png. Test reports and screenshots are not source.
website/index.html Semantic page, forms, and native dialogs
website/src/landing.js Landing page creatures, hero interactions, reveals
website/src/landing.css Landing page sections
website/src/system.css Shared tokens and components for every view
website/src/main.js DOM/controller and explicit user actions
website/src/navigation.js Hidden hash views, anchors, disclosure focus handling
website/src/assistant.js Provider-isolated chat, connection gate, metrics
website/src/voice.js Cancellable one-turn native browser speech
website/src/assistant.css Quiet workspace, responsive controls, Settings/Activity
website/src/state.js Pure normalization, focus/reward, and bond model
website/src/storage.js Optional local storage and truthful save status
website/src/device.js Original interactive device, now disclosed in Device
website/src/hardware.js Lazy studio controller, GSAP timeline, inspector
website/src/hardware-model.js Procedural Three.js parts, lighting, disposal
website/src/hardware-fallback.js Detailed local SVG alternative
website/src/hardware-parts.js Shared proposed-component descriptions
website/src/hardware.css Responsive sticky studio and static alternatives
website/src/theme.js Persisted light/dark theme controller
website/src/theme.css Full light/dark palettes and component overrides
website/public/theme-init.js Blocking pre-paint appearance bootstrap
website/src/creature.js Original pixel art and authored reactions
website/src/styles.css Responsive design and reduced-motion behavior
website/public/favicon.svg Local artwork
tests/state.test.js Pure behavior tests
tests/browser.spec.js UI/voice contract tests + hardware/theme/local world
server/ Server-only configuration, sessions, provider adapters
server/waitlist.js Waitlist validation and private Blob storage
scripts/waitlist-export.mjs Waitlist CSV export for the owner
api/[route].js Serverless API entry
scripts/dev-api.mjs Same-origin Vite dev API middleware
docs/AI_CONNECTIONS.md Private owner setup, API behavior, limitations
MORI-product-hardware-and-YC-research.md and MORI-hardware-concept.svg
are original planning references, not shipped product promises. The current
voice-first mission supersedes their older focus-first recommendation without
rewriting the original research. They can stay in a
private source repository, but are excluded from Vercel uploads and builds.
The original website/.git was promoted to the repository root, preserving
commit 0a9b100. The old built page remains available in that history.
mori.tar.gz and website/.openai/hosting.json remain on disk as historical
artifacts, but are excluded from new source commits and deployment uploads.
Never commit archives, .openai, .vercel, .env*, node_modules, build
output, or test artifacts.
The root vercel.json explicitly selects Vite, npm ci, npm run build, and
website/dist as the output directory. Use this repository’s root, not
website, as the Vercel project root. The deployed same-origin /api routes
are also required for AI. Navigation uses section anchors.
The generated web assets and API routes are public endpoints; provider secrets
remain server-only and AI requests require the owner’s configured access gate.
.vercelignore also excludes
private research, old hosting metadata, archives, local configuration, and
test artifacts from deployment uploads. Security headers allow microphone use
only for this origin and disable camera/geolocation. A successful static build
is not evidence that AI credentials are configured or that inference works.
The Vercel project hohjds-projects/mori is connected to HohJD/mori.
Pushes to main deploy to production at https://mori-drab.vercel.app.