feat: add React UI and AI page sharing tools
Move HTTP page rendering to the React app, fix multi-tool-call message handling, add API docs lookup, web page lookup, and Markdown preview page sharing.
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.9',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'HTTP 页面迁移至 Askama 模板引擎',
|
||||
'更新日志页面和 Web 内容页面从手写字符串拼接改为 Askama 编译期模板渲染,提升可维护性。',
|
||||
'[
|
||||
"HTTP 页面迁移至 Askama 模板引擎:更新日志页面(/updates)和 Web 内容页面(/web/{type}/{slug}、/mail/{slug})从手写 format!() 字符串拼接改为 Askama 编译期模板渲染。",
|
||||
"新增 ias-http/templates/ 目录,包含 base.html(共享布局)、error.html(错误页)、updates/ 和 pages/ 模板,支持模板继承和自动 HTML 转义。",
|
||||
"ias-http 新增 askama 依赖;shell.rs 新增 ErrorPage Askama 模板,保留 html_shell() 和 escape_html() 供 ias-mail、ias-service 兼容使用。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.0",
|
||||
"ias-ai": "0.1.2",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.1",
|
||||
"ias-http": "0.1.5",
|
||||
"ias-mail": "0.1.13",
|
||||
"ias-service": "0.1.7",
|
||||
"ias-main": "0.2.9"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
@@ -0,0 +1,34 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.10',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'修复邮件已读状态和详情页返回上下文',
|
||||
'修复邮件详情页自动标记已读后可能被后续轮询回滚的问题,并保留邮件详情页的列表查询上下文。',
|
||||
'[
|
||||
"修复邮件详情页自动标记已读后,下一轮 IMAP 轮询可能把本地已读状态回滚为未读的问题;本地已读状态现在不会被远端未读标记降级。",
|
||||
"修复从筛选后的邮件列表进入详情页时丢失搜索、已读筛选和分页参数的问题;详情页返回列表、上一封和下一封会保留当前查询上下文。",
|
||||
"说明:SMTP 只负责发信,不能设置收件箱邮件已读状态;已读同步需要 IMAP \\Seen 标记或服务端本地状态维护。",
|
||||
"无数据库结构变化;ias-mail 升级至 0.1.14。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.0",
|
||||
"ias-ai": "0.1.2",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.1",
|
||||
"ias-http": "0.1.5",
|
||||
"ias-mail": "0.1.14",
|
||||
"ias-service": "0.1.7",
|
||||
"ias-main": "0.2.10"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
@@ -0,0 +1,36 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.11',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'新增上下文组装模拟器页面',
|
||||
'新增 /context 页面,可查询指定 scope 下的会话、消息、长期记忆、摘要和工具,便于分析排错。',
|
||||
'[
|
||||
"新增上下文组装模拟器页面(/context),支持按 scope(channel + account_id + from_user_id)查询。",
|
||||
"页面展示:活跃会话详情及消息列表、组装后的系统上下文预览、历史会话表、长期记忆、会话摘要(上次会话/近一周)和可用工具列表。",
|
||||
"导航栏新增「上下文」入口链接。",
|
||||
"ias-service 新增 context_simulator 和 context_simulator_data 模块,升级至 0.1.8。",
|
||||
"ias-http 更新 shell.rs 和 base.html 导航栏,升级至 0.1.6。",
|
||||
"无数据库结构变化。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.0",
|
||||
"ias-ai": "0.1.2",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.1",
|
||||
"ias-http": "0.1.6",
|
||||
"ias-mail": "0.1.14",
|
||||
"ias-service": "0.1.8",
|
||||
"ias-main": "0.2.11"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
@@ -0,0 +1,59 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.12',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'修复 React 页面路由与静态资源托管安全问题',
|
||||
'修复 SPA 静态资源路径安全、动态内容页路由、HTML 邮件展示和上下文模拟器查询参数问题,并保持 ias-http 只负责 API 与静态资源托管。',
|
||||
'[
|
||||
"修复 React SPA 静态资源托管的路径安全问题,改用 tower-http 静态文件服务,避免手写路径拼接读取 web/dist 之外的文件。",
|
||||
"React 新增动态内容页路由 /web/{page_type}/{slug} 与 /mail/{slug},通过 /v1/web/... API 拉取数据并渲染,保持 ias-http 只负责 API 与静态资源托管的边界。",
|
||||
"邮件详情页恢复 HTML 邮件的沙箱 iframe 渲染,纯文本邮件继续按文本展示。",
|
||||
"修复上下文组装模拟器提交表单后首次查询仍使用旧 URL 参数的问题。",
|
||||
"邮件详情 API 在自动标记已读成功后,会在响应中同步返回 seen=true。",
|
||||
"无数据库结构变化;ias-http 升级至 0.1.7,ias-mail 升级至 0.1.15,ias-service 升级至 0.1.9。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.0",
|
||||
"ias-ai": "0.1.2",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.1",
|
||||
"ias-http": "0.1.7",
|
||||
"ias-mail": "0.1.15",
|
||||
"ias-service": "0.1.9",
|
||||
"ias-main": "0.2.12"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
|
||||
UPDATE ias_upgrade_logs
|
||||
SET
|
||||
title = 'HTTP 页面职责迁移到 React SPA',
|
||||
description = 'HTTP 模块保留 JSON API 与静态资源托管,页面渲染职责迁移到 React 前端。',
|
||||
changes = '[
|
||||
"HTTP 页面职责迁移到 React SPA:ias-http 保留 /v1/updates、/v1/web/... 等 JSON API,页面渲染由 web/ 前端负责。",
|
||||
"新增 React 前端工程,提供更新日志、邮件、工具、配置等页面入口。",
|
||||
"ias-http 删除旧的服务端 HTML shell 与字符串拼接页面渲染代码,新增 React 静态资源托管入口。"
|
||||
]'::jsonb
|
||||
WHERE version = '0.2.9';
|
||||
|
||||
UPDATE ias_upgrade_logs
|
||||
SET
|
||||
changes = '[
|
||||
"新增上下文组装模拟器页面(/context),支持按 scope(channel + account_id + from_user_id)查询。",
|
||||
"页面展示:活跃会话详情及消息列表、组装后的系统上下文预览、历史会话表、长期记忆、会话摘要(上次会话/近一周)和可用工具列表。",
|
||||
"导航栏新增「上下文」入口链接。",
|
||||
"ias-service 新增 context_simulator 和 context_simulator_data 模块,升级至 0.1.8。",
|
||||
"React 导航栏新增上下文入口;ias-http 升级至 0.1.6。",
|
||||
"无数据库结构变化。"
|
||||
]'::jsonb
|
||||
WHERE version = '0.2.11';
|
||||
@@ -0,0 +1,35 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.13',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'修复多工具调用上下文消息序列',
|
||||
'修复模型返回多个 tool_calls 时上下文中缺少部分 tool 消息导致 LLM 请求 400 的问题,并过滤历史不完整工具调用片段。',
|
||||
'[
|
||||
"修复模型返回多个 tool_calls 时只执行第一个工具导致后续请求缺少 tool 消息的问题;现在会为每个 tool_call_id 生成对应工具结果。",
|
||||
"服务队列新增批量工具结果处理,所有 tool 消息都写入上下文后才触发下一次 LLM 请求,避免中间态消息序列发送给模型。",
|
||||
"上下文快照会过滤历史中不完整的 assistant/tool 调用片段,防止已存在的坏数据继续触发 insufficient tool messages following tool_calls message。",
|
||||
"新增单元测试覆盖完整多工具调用保留、缺失工具结果过滤,以及 /v1 API catch-all 路由构建。",
|
||||
"无数据库结构变化;ias-common 升级至 0.1.1,ias-ai 升级至 0.1.3,ias-context 升级至 0.1.2,ias-service 升级至 0.1.10。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.1",
|
||||
"ias-ai": "0.1.3",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.2",
|
||||
"ias-http": "0.1.7",
|
||||
"ias-mail": "0.1.15",
|
||||
"ias-service": "0.1.10",
|
||||
"ias-main": "0.2.13"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
@@ -0,0 +1,36 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.14',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'新增 API 文档查询能力',
|
||||
'新增结构化 HTTP API 文档接口和 AI 查询工具,使模型可以查询当前服务 API 的路径、参数、请求体、响应示例和备注后回复用户。',
|
||||
'[
|
||||
"新增 HTTP API 文档接口 /v1/api-docs 与 /v1/api-docs/{id},支持按关键词、分组和接口 id 查询当前服务的结构化 API 文档。",
|
||||
"新增内置 AI 工具 query_api_docs,模型可查询 API 路径、参数、请求体、响应示例和备注,并据此用中文回复用户。",
|
||||
"新增内置 AI 工具 query_web_pages,模型可按页面类型和关键词查询已创建的动态页面,并把相关 /web/... 或 /mail/... 链接发给用户。",
|
||||
"动态页面列表 API GET /v1/web/pages 新增 q 关键词搜索,可匹配标题、摘要、正文、来源和 metadata,便于查找已创建页面。",
|
||||
"API 文档覆盖健康检查、升级日志、动态页面、邮件、控制台工具、用户配置、长期记忆和上下文模拟器接口;HTTP 模块继续只负责 JSON API 与静态资源托管,页面展示仍由 React 前端负责。",
|
||||
"无数据库结构变化;ias-ai 升级至 0.1.4,ias-http 升级至 0.1.8,ias-service 升级至 0.1.11。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.1",
|
||||
"ias-ai": "0.1.4",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.2",
|
||||
"ias-http": "0.1.8",
|
||||
"ias-mail": "0.1.15",
|
||||
"ias-service": "0.1.11",
|
||||
"ias-main": "0.2.14"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
@@ -0,0 +1,35 @@
|
||||
INSERT INTO ias_upgrade_logs (
|
||||
version,
|
||||
released_at,
|
||||
title,
|
||||
description,
|
||||
changes,
|
||||
modules
|
||||
) VALUES (
|
||||
'0.2.15',
|
||||
'2026-07-07T00:00:00+08:00',
|
||||
'新增 Markdown 预览页面能力',
|
||||
'新增 Markdown 预览页面和 AI 创建工具,使模型可以把长篇 Markdown 内容生成可分享链接,避免聊天平台消息长度限制。',
|
||||
'[
|
||||
"新增 Markdown 预览页面能力:page_type=markdown 的动态页面公开路径为 /md/{slug},React 前端按 Markdown/GFM 渲染标题、列表、表格、引用、链接和代码块。",
|
||||
"新增内置 AI 工具 create_markdown_preview,模型可把长篇 Markdown、报告、代码说明或结构化答复创建成预览页,并只在聊天中发送简短摘要和链接,避免平台消息长度限制。",
|
||||
"query_web_pages 支持查询 markdown 页面类型,并会返回 /md/{slug} 链接;普通动态页面和邮件页面路径保持不变。",
|
||||
"API 文档补充 Markdown 动态页面说明;HTTP 模块仍只负责 JSON API 与静态资源托管,Markdown 渲染由 React 前端负责。",
|
||||
"无数据库结构变化;ias-ai 升级至 0.1.5,ias-http 升级至 0.1.9,ias-service 升级至 0.1.12。"
|
||||
]'::jsonb,
|
||||
'{
|
||||
"ias-common": "0.1.1",
|
||||
"ias-ai": "0.1.5",
|
||||
"ias-wechat": "0.1.0",
|
||||
"ias-context": "0.1.2",
|
||||
"ias-http": "0.1.9",
|
||||
"ias-mail": "0.1.15",
|
||||
"ias-service": "0.1.12",
|
||||
"ias-main": "0.2.15"
|
||||
}'::jsonb
|
||||
) ON CONFLICT (version) DO UPDATE SET
|
||||
released_at = EXCLUDED.released_at,
|
||||
title = EXCLUDED.title,
|
||||
description = EXCLUDED.description,
|
||||
changes = EXCLUDED.changes,
|
||||
modules = EXCLUDED.modules;
|
||||
Reference in New Issue
Block a user