Update: 将子项目从 submodule 转为完整内容
- 移除 GovAI, nomifun-tauri, 算力盒子 的 submodule 引用 - 添加所有子项目的完整源代码 - 保留原始 .git 为 .git.bak 备份
@@ -0,0 +1,125 @@
|
||||
# Screenshot Manifest
|
||||
|
||||
This file tracks every screenshot referenced by the documentation. All images
|
||||
are captured from the **real running NomiFun app** (not mockups) and saved into
|
||||
this `docs/images/` directory.
|
||||
|
||||
## Naming scheme
|
||||
|
||||
```
|
||||
<module-prefix>-<NN>-<slug>.png
|
||||
```
|
||||
|
||||
- `module-prefix` — namespace owned by one doc area (see table below).
|
||||
- `NN` — two-digit sequence within that module (`01`, `02`, …).
|
||||
- `slug` — short kebab-case description.
|
||||
|
||||
## How to capture (current process)
|
||||
|
||||
The desktop app and the `nomifun-web` host render the **same** production SPA
|
||||
(`ui/dist`), so in-app screens are pixel-identical between them. Capture in-app
|
||||
screens from the web host (scriptable, no native window needed); capture native
|
||||
window chrome from the installed app.
|
||||
|
||||
1. **Build the SPA** (if changed): `bun run build:ui`.
|
||||
2. **Run a throwaway, no-auth host on an isolated data dir** (so it never
|
||||
touches your real data or collides with the desktop app's database):
|
||||
|
||||
```bash
|
||||
target/debug/nomifun-web --insecure-no-auth --port 8799 \
|
||||
--dist ui/dist --data-dir /tmp/nomifun-shots
|
||||
```
|
||||
|
||||
3. **Seed synthetic demo data** through the local API (no real credentials),
|
||||
e.g. companions, requirements, a knowledge base, a terminal session — see
|
||||
`docs/images` git history for the exact `curl` payloads used.
|
||||
4. **Drive a headless browser** (Python Playwright 1.51, already installed) at
|
||||
dark theme, `1440×900`, `device_scale_factor=2`:
|
||||
|
||||
```python
|
||||
ctx = browser.new_context(viewport={"width":1440,"height":900},
|
||||
color_scheme="dark", device_scale_factor=2)
|
||||
ctx.add_init_script("localStorage.setItem('__nomifun_theme','dark')")
|
||||
page.goto("http://127.0.0.1:8799/#/<route>")
|
||||
```
|
||||
|
||||
5. **Auth-mode screens** (login / first-run setup): run the host **without**
|
||||
`--insecure-no-auth`. No admin yet → first-run setup; pass
|
||||
`--admin-user/--admin-password` → login screen.
|
||||
6. **Native window** (titlebar / tray): capture from the installed
|
||||
`/Applications/NomiFun.app` with macOS window capture. Requires Screen
|
||||
Recording permission for the capturing process.
|
||||
|
||||
## Module prefixes
|
||||
|
||||
| Prefix | Owner doc area |
|
||||
| --- | --- |
|
||||
| `gs-` | getting-started/ |
|
||||
| `desktop-` | guides/desktop-app |
|
||||
| `webserver-` | guides/web-server-deployment |
|
||||
| `webui-` | guides/webui-remote-access |
|
||||
| `terminal-` | guides/terminal |
|
||||
| `autowork-` | guides/autowork-requirements |
|
||||
| `cron-` | guides/scheduled-tasks |
|
||||
| `channels-` | guides/channels |
|
||||
| `mcp-` | guides/mcp-and-skills |
|
||||
| `assistants-` | guides/assistants |
|
||||
| `readme-` | root README showcase |
|
||||
|
||||
## Manifest
|
||||
|
||||
Routes use the `#/…` hash-router scheme. **Status** is `live` (captured from the
|
||||
current app) or `pending` (needs an environment this machine can't provide —
|
||||
see notes).
|
||||
|
||||
| Id | Route / screen | Host | Caption | Used in | Status |
|
||||
| --- | --- | --- | --- | --- | --- |
|
||||
| `readme-01-workbench-overview.png` | desktop app / conversation workbench | desktop | Main desktop workbench with conversation, companion, and live metrics | README / README.zh-CN | live |
|
||||
| `gs-01-introduction-hero.png` | `#/guid` | web | Home / new-session page | getting-started/introduction | live |
|
||||
| `gs-02-desktop-dev.png` | `#/guid` | web (interim) | Desktop app home — app content; native window chrome pending | getting-started/introduction | live\* |
|
||||
| `gs-03-web-first-run-setup.png` | `#/login` (no admin) | web (auth) | First-run admin setup | getting-started/installation | live |
|
||||
| `gs-04-quickstart-login.png` | `#/login` (admin exists) | web (auth) | Login screen | getting-started/quick-start | live |
|
||||
| `gs-05-quickstart-guid.png` | `#/guid` | web | Home page (agent bar + input) | getting-started/quick-start | live |
|
||||
| `gs-06-quickstart-model-settings.png` | `#/models` | web | Model & Agent settings | getting-started/quick-start | live || `desktop-01-main-window.png` | `#/guid` | web (interim) | Desktop main window content; native chrome pending | guides/desktop-app | live\* |
|
||||
| `webui-01-settings-overview.png` | `#/open-capabilities` | web | Open Capabilities panel | guides/webui-remote-access | live || `webui-03-login-screen.png` | `#/login` | web (auth) | Login screen on a remote browser | guides/webui-remote-access | live |
|
||||
| `webui-04-qr-login-phone.png` | `#/login` @ 390px | web (phone) | Login on a phone-width viewport | guides/webui-remote-access | live |
|
||||
| `terminal-01-session.png` | `#/terminal/:id` | web | In-app terminal session | guides/terminal | live |
|
||||
| `terminal-02-create-page.png` | `#/terminal-new` | web | Terminal create page | guides/terminal | live |
|
||||
| `terminal-03-driving-session.png` | `#/terminal/:id` | web | Driving a terminal (live output) | guides/terminal | live || `autowork-01-tag-sessions.png` | `#/requirements/extensions?tab=autowork` | web | AutoWork tag-sessions overview | guides/autowork-requirements | live |
|
||||
| `autowork-02-list.png` | `#/requirements` | web | Requirements list | guides/autowork-requirements | live |
|
||||
| `autowork-03-kanban.png` | `#/requirements?view=board` | web | Requirements board (pending/in-progress/done/…) | guides/autowork-requirements | live |
|
||||
| `autowork-04-tag-sessions.png` | `#/requirements/extensions?tab=autowork` | web | Tag-sessions table | guides/autowork-requirements | live |
|
||||
| `autowork-05-webhook-binding.png` | `#/requirements/extensions?tab=notify` | web | Notify / webhook tab | guides/autowork-requirements | live |
|
||||
| `cron-01-list.png` | `#/scheduled` | web | Scheduled Tasks list + keep-awake banner | guides/scheduled-tasks | live |
|
||||
| `cron-02-create-dialog.png` | `#/scheduled` (New task) | web | Create scheduled task dialog | guides/scheduled-tasks | live |
|
||||
| `cron-03-detail.png` | `#/scheduled/:job_id` | web | Job detail: schedule, Run now, history | guides/scheduled-tasks | live || `channels-01-overview.png` | `#/nomi?tab=remote` | web | Companion Remote tab — channel overview | guides/channels | live |
|
||||
| `channels-02-pairing.png` | `#/nomi?tab=remote` (connect) | web | Channel connect / settings dialog | guides/channels | live || `mcp-01-capabilities.png` | `#/mcp` | web | MCP page | guides/mcp-and-skills | live |
|
||||
| `mcp-03-skills.png` | `#/assistants?tab=skills` | web | Skills tab | guides/mcp-and-skills | live |
|
||||
| `assistants-01-list.png` | `#/assistants?tab=assistants` | web | Assistants list (builtin library) | guides/assistants | live |
|
||||
| `assistants-02-editor.png` | `#/assistants?tab=assistants` (edit) | web | Assistant editor drawer | guides/assistants | live |
|
||||
| `webserver-02-first-run-setup.png` | `#/login` (no admin) | web (auth) | First-run admin setup | guides/web-server-deployment | live |
|
||||
|
||||
## Not screenshots (rendered as commands / diagrams)
|
||||
|
||||
These were intentionally **not** captured as screenshots — they read better as
|
||||
copy-pasteable commands or an ASCII diagram, and several are platform-specific
|
||||
(Linux/Windows) and not reproducible on a macOS dev machine:
|
||||
|
||||
- `web-server-deployment`: high-level architecture (ASCII diagram), `docker
|
||||
compose up` output, `systemctl status` output.
|
||||
- `desktop-app`: `bun run build` output, the per-OS titlebar note, and the data
|
||||
directory layout (shown as a directory tree).
|
||||
|
||||
## Pending screenshots
|
||||
|
||||
`gs-02` and `desktop-01` are marked `live\*`: they currently show the **real
|
||||
current app content** captured from the web host, but **without the native
|
||||
window chrome** (titlebar / traffic-lights / tray). Replace them with a true
|
||||
native capture from the installed `/Applications/NomiFun.app` (needs Screen
|
||||
Recording permission, or a manual `Cmd+Shift+4` window capture) when convenient.
|
||||
|
||||
A few data-heavy views are intentionally **not** screenshotted — a live
|
||||
conversation reply, the per-job cron skill editor, the channel model selector,
|
||||
an AutoWork-bound terminal, and the desktop-only WebUI-enabled state. They need
|
||||
a configured LLM provider, a live IM bot, or the desktop LAN feature; the
|
||||
surrounding guide prose covers them instead.
|
||||
|
After Width: | Height: | Size: 376 KiB |
|
After Width: | Height: | Size: 404 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 342 KiB |
|
After Width: | Height: | Size: 230 KiB |
|
After Width: | Height: | Size: 158 KiB |
|
After Width: | Height: | Size: 228 KiB |
@@ -0,0 +1,12 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 80 80" fill="none" role="img" aria-label="NomiFun">
|
||||
<defs>
|
||||
<linearGradient id="logo-bg" x1="0" y1="0" x2="0" y2="80" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#1B1822"/><stop offset="1" stop-color="#0B0A10"/></linearGradient>
|
||||
<linearGradient id="logo-bowl" x1="15" y1="49" x2="65" y2="69" gradientUnits="userSpaceOnUse"><stop offset="0" stop-color="#FF9FB4"/><stop offset="1" stop-color="#FF6F91"/></linearGradient>
|
||||
</defs>
|
||||
<rect width="80" height="80" rx="18" fill="url(#logo-bg)"/>
|
||||
<path d="M33 17 q-4.5 -4 0 -8.5" stroke="#FF8FA8" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M40 15 q-4.5 -4 0 -8.5" stroke="#FFB3C4" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M47 17 q-4.5 -4 0 -8.5" stroke="#FF8FA8" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M22 46 Q22 27 40 27 Q58 27 58 46 Z" fill="#FFFFFF"/>
|
||||
<path d="M14 49 H66 Q61.5 70 40 70 Q18.5 70 14 49 Z" fill="url(#logo-bowl)"/>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 1.0 KiB |
@@ -0,0 +1,51 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 630" width="1200" height="630" fill="none" role="img" aria-label="NomiFun">
|
||||
<defs>
|
||||
<linearGradient id="bg" x1="0" y1="0" x2="1200" y2="630" gradientUnits="userSpaceOnUse">
|
||||
<stop offset="0" stop-color="#131019"/>
|
||||
<stop offset="1" stop-color="#07060B"/>
|
||||
</linearGradient>
|
||||
<radialGradient id="glow" cx="0.28" cy="0.1" r="0.7">
|
||||
<stop offset="0" stop-color="#FF6F91" stop-opacity="0.22"/>
|
||||
<stop offset="1" stop-color="#FF6F91" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<radialGradient id="glow2" cx="0.9" cy="0.95" r="0.6">
|
||||
<stop offset="0" stop-color="#7583B2" stop-opacity="0.20"/>
|
||||
<stop offset="1" stop-color="#7583B2" stop-opacity="0"/>
|
||||
</radialGradient>
|
||||
<linearGradient id="bowl" x1="0" y1="0" x2="0" y2="1">
|
||||
<stop offset="0" stop-color="#FF9FB4"/>
|
||||
<stop offset="1" stop-color="#FF6F91"/>
|
||||
</linearGradient>
|
||||
<linearGradient id="pinktext" x1="0" y1="0" x2="1" y2="0">
|
||||
<stop offset="0" stop-color="#FFB3C4"/>
|
||||
<stop offset="1" stop-color="#FF6F91"/>
|
||||
</linearGradient>
|
||||
</defs>
|
||||
|
||||
<rect width="1200" height="630" fill="url(#bg)"/>
|
||||
<rect width="1200" height="630" fill="url(#glow)"/>
|
||||
<rect width="1200" height="630" fill="url(#glow2)"/>
|
||||
|
||||
<!-- Logo mark, scaled -->
|
||||
<g transform="translate(110,150) scale(3.2)">
|
||||
<rect width="80" height="80" rx="18" fill="#1B1822"/>
|
||||
<path d="M33 17 q-4.5 -4 0 -8.5" stroke="#FF8FA8" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M40 15 q-4.5 -4 0 -8.5" stroke="#FFB3C4" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M47 17 q-4.5 -4 0 -8.5" stroke="#FF8FA8" stroke-width="3" fill="none" stroke-linecap="round"/>
|
||||
<path d="M22 46 Q22 27 40 27 Q58 27 58 46 Z" fill="#FFFFFF"/>
|
||||
<path d="M14 49 H66 Q61.5 70 40 70 Q18.5 70 14 49 Z" fill="url(#bowl)"/>
|
||||
</g>
|
||||
|
||||
<text x="430" y="250" font-family="Inter, 'PingFang SC', sans-serif" font-size="86" font-weight="800" fill="#F5F3F7">NomiFun</text>
|
||||
<text x="432" y="320" font-family="Inter, 'PingFang SC', sans-serif" font-size="34" font-weight="600" fill="url(#pinktext)">完全开源 · 本地优先的超级 AI 工作站</text>
|
||||
<text x="432" y="378" font-family="Inter, 'PingFang SC', sans-serif" font-size="26" font-weight="400" fill="#B8B3C4">Fully open-source, local-first super AI workstation</text>
|
||||
|
||||
<g font-family="Inter, 'PingFang SC', sans-serif" font-size="22" font-weight="500" fill="#B8B3C4">
|
||||
<rect x="432" y="430" width="190" height="46" rx="23" fill="#1B1822" stroke="#322E3C"/>
|
||||
<text x="458" y="460">数据全在本地</text>
|
||||
<rect x="640" y="430" width="160" height="46" rx="23" fill="#1B1822" stroke="#322E3C"/>
|
||||
<text x="666" y="460">免费商用</text>
|
||||
<rect x="818" y="430" width="190" height="46" rx="23" fill="#1B1822" stroke="#322E3C"/>
|
||||
<text x="844" y="460">Apache-2.0</text>
|
||||
</g>
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 2.9 KiB |
|
After Width: | Height: | Size: 337 KiB |
|
After Width: | Height: | Size: 294 KiB |
|
After Width: | Height: | Size: 812 KiB |
|
After Width: | Height: | Size: 362 KiB |
|
After Width: | Height: | Size: 178 KiB |
|
After Width: | Height: | Size: 203 KiB |
|
After Width: | Height: | Size: 248 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 238 KiB |
|
After Width: | Height: | Size: 202 KiB |
|
After Width: | Height: | Size: 968 KiB |
|
After Width: | Height: | Size: 981 KiB |
|
After Width: | Height: | Size: 237 KiB |
|
After Width: | Height: | Size: 294 KiB |
|
After Width: | Height: | Size: 179 KiB |
|
After Width: | Height: | Size: 385 KiB |
|
After Width: | Height: | Size: 1.3 MiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 200 KiB |
|
After Width: | Height: | Size: 485 KiB |
|
After Width: | Height: | Size: 967 KiB |
|
After Width: | Height: | Size: 270 KiB |
|
After Width: | Height: | Size: 981 KiB |
|
After Width: | Height: | Size: 358 KiB |