# ai-html
**Repository Path**: ijinma/ai-html
## Basic Information
- **Project Name**: ai-html
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-10-03
- **Last Updated**: 2026-10-08
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# 织页
织页,将想法与对话织成网页。自托管的多用户 AI 网页创作系统。提供多轮对话、图片与文档输入、实时预览、发布时提示词优化、固定网址、私有权限、定时更新、历史恢复,以及完整管理后台。
## 启动
需要 Node.js **22.13+**,默认 AI 需要已安装、登录的 Qoder CLI。
```bash
npm ci
./ai-html start
./ai-html status
```
打开 **http://localhost:9093**。用户名为 `admin`,默认密码为 `admin123`。
```bash
./ai-html stop
./ai-html restart
./ai-html logs
```
也可以前台运行 `npm start`。管理端默认端口 **9093**,生成网页独立渲染端口 **9094**。预设 AI 基础命令为 **`qoder -m Qwen3.8-Max`**,后台可以添加命令行或兼容 Chat Completions 的 API 配置。Codex exec 协议适配保留管理员配置的基础命令,附加图片及最终回复文件参数,避免代理/工具日志混入网页和优化提示词。
默认可以直接通过服务器IP或主机名访问9093,渲染地址自动使用相同主机的9094端口,请开放这两个端口。使用反向代理或独立渲染域名时,复制 `.env.example` 为 `.env` 并配置两个完整地址。不同端口的渲染地址隔离生成网页与管理系统。
`./ai-html`(不带参数)等同于 `./ai-html start`,无需创建 `.env` 即使用默认9093/9094;Docker Compose也使用这两个默认端口。已有 `.env` 中的 `AI_HTML_PORT`、`AI_HTML_RENDER_PORT` 会覆盖默认值,修改仓库默认值不会改变已有实例配置。当前测试服务器保留12020/12021,新部署服务器使用9093/9094。直接运行脚本的终端也需要使用Node.js 22.13+,可用 `node --version` 检查。
已为当前目录安装 `ai-html.service` 用户服务时,脚本的启动、停止和重启会通过systemd执行,保留服务托管及开机自启动。没有安装用户服务的实例仍直接启动。
## 功能
- 账号:首次默认管理员 `admin/admin123`;密码 4—20 位,输入旁提供显示/隐藏按钮。头像菜单提供设置、退出登录和授权账号的管理员面板;设置以弹窗打开,左侧可切换“账户信息”和“偏好设置”,不重建原工作台。账户信息可修改显示名称及密码,管理员还可修改自己的登录账号。
- 头像:点击账户信息右侧的头像,可选择五款预置头像、上传图片或恢复默认头像;切换预置头像保留上次上传图片,可随时切回。JPG/PNG/WebP,每张最多2 MiB。服务器验证实际图片并裁剪为256px头像,按账户保存,刷新、换设备和服务重启后保留,包含在完整系统备份中。
- 主题:参考见微预置经典墨绿、清爽蓝、柔和粉、淡雅紫、暖杏色、经典黑白,在“设置 → 偏好设置”中实时预览与保存,配色按账号跨设备同步。
- 用户:管理员创建、配置密码;普通用户首次登录及密码重置后强制改密;支持禁用。
- 创作:文字、图片与文档、多轮对话、消息即时显示、处理转圈、流式预览、手机预览、停止任务、草稿持久化;每轮携带网站托管契约,生成后台在独立预览空间试运行,格式或运行错误反馈 AI 校正,仍失败保留线上版本。
- 发布:根据全部历史与最终网页优化提示词,默认由AI按主题生成网址与图标;首次发布也可指定网址名称,图标可上传PNG/JPG/WebP(≤2 MiB),发布成功后生效。已发布网址保持固定,图标可保留、更换或切回自动;复制提示词、导出素材包、根据提示词复制创作。
- 访问:首次发布确定固定 `/p/<主题名称>`,旧 `/p/<网页ID>` 继续可用;线上只展示生成内容;默认公开。私有网页入口检查当前设备的平台登录;未登录先进入平台登录页,成功后返回原网址,已登录可直接访问。网页管理仍限作者或平台管理员。
- 更新:每天、每周、每月、固定间隔和单次计划;生成后自动更新固定入口,保留旧版本与对应提示词,可恢复。
- 独立网站:网站自己决定登录、注册、管理员、匿名写入权限和业务数据结构;平台不注入登录或数据 SDK。模型可生成网站自己的 JavaScript 后台,使用独立 SQLite 数据库、持久文件或外部 HTTP 数据服务。网站账户与平台账户互不继承。
- 数据:跨设备保存须由网站后台写入服务器数据库或文件;原生 localStorage/IndexedDB 仅是浏览器本地存储。发布、定时更新和历史恢复保留线上数据库与文件;草稿/历史预览使用独立数据副本。旧网页可重新生成,不做旧 SDK 兼容。
- 统计:生成与访问明细的 IP、时间、归属地、设备;趋势、筛选,生成、访问和每日明细每页 10 条;每页空间、更新与访问详情。
- 管理:用户、统一 AI 配置及连接测试(所有用户使用后台选定的同一种 AI,创作界面不显示模型)、左侧管理导航、小时运行时长、网页下架、详细任务过程与重试、计划管理、系统配置、完整备份与恢复;支持每天、每周和固定间隔自动备份,可配置保留份数。
- 附件:每个 ≤ **2 MiB(2,097,152 字节)**,每轮最多 10 个;支持 PNG/JPEG/WebP/TXT/MD/CSV/JSON/PDF/DOCX/XLSX,服务端验证真实内容。
## 验证
```bash
npm run check
npm run test:all
npm test
npm run test:e2e
npm run test:live
npm run test:live:browser
node scripts/live-publication.mjs
node scripts/live-independent-sites.mjs
```
常规测试使用可复现的模型替身,覆盖真实 HTTP、数据库、文件解析、任务队列和 Chromium 操作。`test:live` 会实际调用 Qoder,消耗模型额度,用于检查图片生成、提示词优化与重新生成。`test:live:browser` 在运行中的9093服务上实际执行5轮对话生成、定时更新、历史恢复与提示词发布,并保留一个公开验收网页。`scripts/live-publication.mjs` 使用独立测试数据执行真实两轮生成、两次主题网址/图标发布、私有登录和定时任务,不修改当前服务账号。浏览器测试需要 Chromium,通常先运行 `npx playwright install chromium`;旧系统可设置 `PLAYWRIGHT_CHROMIUM_EXECUTABLE` 指向已有浏览器。
`scripts/live-independent-sites.mjs` 使用独立临时服务和预设 Qoder,执行五轮真实对话、网站自身登录与数据库、匿名留言、文件上传/生成/下载、优化提示词复制、真实定时生成、再次发布、移动设备访问与历史恢复;不使用生产账号。证据保存在 `test-results/independent-sites-20261004/real-ai/`。该脚本实际调用模型。
网站运行规则及开发契约:[网站数据与运行](doc/page-data.md)。此前日期标记的测试报告记录当时实现,当前规则以本说明和源码为准。
操作与部署:[使用说明](doc/user-guide.md)。实现与边界:[实现说明](doc/implementation.md)。测试结果:[测试报告](doc/test-report.md)。原始方案:[系统设计](doc/design.md)、[界面设计](doc/ui-design.md)。
所有运行数据在 `workspace/`,已排除 Git。仓库已初始化,origin 为 `git@gitee.com:ijinma/ai-html.git`。