release: v1.0.0-beta

This commit is contained in:
coso
2026-03-31 02:18:13 +08:00
parent 5398aa0ca3
commit 732cf9b390
389 changed files with 7739 additions and 31331 deletions
+3
View File
@@ -221,6 +221,9 @@ npm run verify:local
- **旧 `chat_*` 命令**:已停止注册,不应重新回到 `commands::mod` 或 `generate_handler!`
- **旧 `general_chat_*` 边界**:前端 compat 网关与 Rust 命令都已移除,不应重新接入
- **记忆系统**:统一沉淀优先走 `unified_memory_*`,runtime / 上下文视图优先走 `memory_runtime_*`
- **旧项目风格命令**:`style_guide_get` / `style_guide_update` 已下线,不应再从前端网关、Rust 注册或 mock 中接回
- **旧项目模板命令**:`create_template` / `list_templates` / `get_template` / `update_template` / `delete_template` / `set_default_template` / `get_default_template` 已下线,不应再从前端网关、Rust 注册或 mock 中接回
- **旧品牌人设扩展命令**:`get_brand_persona` / `get_brand_extension` / `save_brand_extension` / `update_brand_extension` / `delete_brand_extension` / `list_brand_persona_templates` 已下线,不应再从前端网关、Rust 注册或 mock 中接回
这些示例的意义不是列清单,而是提醒:
+69 -88
View File
@@ -2,12 +2,19 @@
## 概述
内容创作系统支持多种主题(社媒内容、图文海报、歌词曲谱等),通过 `<write_file>` 标签实现 AI 响应与右侧画布的联动。
内容创作系统支持多种主题(社媒内容、图文海报、歌词曲谱等),通过 `<write_file>` 标签与结构化 A2UI 产物实现 Agent 响应、版本链与右侧画布的联动。
当前治理结论:
- `src/components/content-creator/**` 仍是现役 `current` runtime,本轮不应直接拆除
- 工作台外层主链应统一经 `src/lib/workspace/*` 网关访问共享能力
- 已删除的根级旧入口如 `src/hooks/usePosterWorkflow.ts`、`src/hooks/useMultiPlatformExport.ts` 不应回流
- 已删除的海报 workflow 孤岛 `src/components/content-creator/workflows/poster/**`、`src/lib/workspace/workbenchPoster.ts` 不应回流
## 核心架构
```
用户选择主题 → AgentChatPage 生成 systemPrompt
用户选择主题 → AgentChatWorkspace 生成 systemPrompt
↓
用户发送消息 → useAgentChatUnified.sendMessage()
↓
@@ -17,9 +24,9 @@
↓
AI 返回带 <write_file> 标签的响应
↓
StreamingRenderer 解析标签 → 调用 onWriteFile
StreamingRenderer / stream processor 解析标签 → 调用 onWriteFile
↓
AgentChatPage.handleWriteFile → 映射为社媒 harness 产物 / 版本链
useWorkspaceWriteFileAction → 映射为社媒 harness 产物 / 版本链
↓
右侧画布自动打开,显示文档内容
```
@@ -27,52 +34,45 @@ AgentChatPage.handleWriteFile → 映射为社媒 harness 产物 / 版本链
## 目录结构
```
src/components/
├── content-creator/
│ ├── canvas/ # 画布组件
│ │ ├── CanvasFactory.tsx # 画布工厂
│ │ ├── canvasUtils.ts # 画布工具
│ │ ├── document/ # 文档画布
│ │ └── music/ # 音乐画布
│ ├── utils/
│ │ └── systemPrompt.ts # 系统提示词生成
│ └── a2ui/
│ └── parser.ts # A2UI 和 write_file 解析器
├── agent/chat/
│ ├── hooks/
│ │ ├── index.ts # Agent chat hooks 导出入口
│ │ └── useAsterAgentChat.ts # Agent 聊天主 Hook
│ ├── components/
│ │ ├── StreamingRenderer.tsx # 流式渲染(解析 write_file)
│ │ └── MessageList.tsx # 消息列表
│ └── index.tsx # AgentChatPage
└── general-chat/
├── bridge.ts # 兼容桥接层
├── canvas/
│ └── CanvasPanel.tsx # 复用画布面板
└── types.ts # CanvasState / DEFAULT_CANVAS_STATE
src/
├── components/
│ ├── content-creator/
│ │ ├── canvas/ # 现役画布 runtime
│ │ ├── a2ui/ # A2UI 结构与解析实现
│ │ ├── utils/ # prompt / harness / activity 等内部实现
│ │ └── hooks/ # 模块内 Hook(仅保留现役实现)
│ └── agent/chat/
│ ├── hooks/
│ │ ├── index.ts # useAgentChatUnified 统一入口
│ │ └── useAsterAgentChat.ts # 现役 Aster 聊天主 Hook
│ ├── components/
│ │ └── StreamingRenderer.tsx # 流式渲染与标签解析
│ ├── workspace/
│ │ └── useWorkspaceWriteFileAction.ts
│ └── AgentChatWorkspace.tsx # 工作台主入口
└── lib/
└── workspace/
├── a2ui.ts # A2UI 外层共享网关
├── workbenchPrompt.ts # prompt 外层共享网关
├── workbenchCanvas.ts # canvas 外层共享网关
├── workbenchRuntime.ts # runtime helper 外层共享网关
├── workbenchUi.ts # 共享 UI 网关
└── workbenchWorkflow.ts # 工作流 Hook 网关
```
## 核心组件
### 1. systemPrompt.ts - 系统提示词生成
### 1. workbenchPrompt.ts / systemPrompt.ts - 系统提示词生成
根据主题和创作模式生成 AI 系统提示词。
根据主题和创作模式生成 AI 系统提示词。外层主链统一经 `src/lib/workspace/workbenchPrompt.ts` 访问,底层实现仍位于 `content-creator` 模块内部。
```typescript
// src/components/content-creator/utils/systemPrompt.ts
// src/lib/workspace/workbenchPrompt.ts
// 主题类型
type ThemeType = "general" | "social-media" | "poster" | "music" | ...;
// 创作模式
type CreationMode = "guided" | "fast" | "hybrid" | "framework";
// 生成系统提示词
export function generateContentCreationPrompt(
theme: ThemeType,
mode: CreationMode
): string;
export {
generateSystemPrompt,
generateProjectMemoryPrompt,
} from "@/components/content-creator/utils/*";
```
**关键指令**:系统提示词要求 AI 使用 `<write_file>` 标签输出内容:
@@ -93,12 +93,12 @@ export function generateContentCreationPrompt(
- 标签内的内容会实时流式显示在右侧画布
```
### 2. parser.ts - write_file 标签解析
### 2. a2ui.ts / parser.ts - write_file 标签解析
解析 AI 响应中的 `<write_file>` 标签。
解析 AI 响应中的 `<write_file>` 标签。外层统一从 `src/lib/workspace/a2ui.ts` 读取解析器与结构类型。
```typescript
// src/components/content-creator/a2ui/parser.ts
// src/lib/workspace/a2ui.ts
interface ParseResult {
parts: ParsedMessageContent[];
@@ -119,39 +119,29 @@ export function parseAIResponse(
- `write_file` - 完整的文件写入
- `pending_write_file` - 流式传输中的文件写入
### 3. useAsterAgentChat - systemPrompt 注入
### 3. useAgentChatUnified / useAsterAgentChat - systemPrompt 注入
在发送第一条消息时注入 systemPrompt,并通过现役 runtime adapter 提交到 `agent_runtime_*`。
```typescript
// src/components/agent/chat/hooks/useAsterAgentChat.ts
// src/components/agent/chat/hooks/index.ts
interface UseAgentChatOptions {
systemPrompt?: string;
onWriteFile?: (content: string, fileName: string) => void;
}
// 关键逻辑:第一条消息注入 systemPrompt
const sendMessage = async (content: string, ...) => {
let messageToSend = content;
const isFirstMessage = messages.filter(m => m.role === "user").length === 0;
if (systemPrompt && isFirstMessage) {
messageToSend = `${systemPrompt}\n\n---\n\n用户请求:${content}`;
}
await runtime.submitOp({
type: "user_input",
text: messageToSend,
sessionId,
eventName,
workspaceId,
systemPrompt,
preferences: {},
});
};
export function useAgentChatUnified(options: UseAgentChatUnifiedOptions) {
return useAsterAgentChat(options);
}
```
现役事实源:
- 统一入口:`src/components/agent/chat/hooks/index.ts`
- 底层实现:`src/components/agent/chat/hooks/useAsterAgentChat.ts`
- 首条 system prompt 拼装:`buildUserInputSubmitOp.ts` / `agentStream*`
### 4. StreamingRenderer.tsx - 流式渲染
解析 AI 响应并触发文件写入回调。
@@ -180,31 +170,19 @@ useEffect(() => {
### 5. AgentChatPage - 画布联动
处理文件写入,更新画布状态。
处理文件写入,更新画布状态。当前主入口已是 `AgentChatWorkspace` 与 `useWorkspaceWriteFileAction`,不再以旧 `general-chat` 兼容层作为事实源。
```typescript
// src/components/agent/chat/index.tsx
// src/components/agent/chat/AgentChatWorkspace.tsx
// src/components/agent/chat/workspace/useWorkspaceWriteFileAction.ts
const handleWriteFile = useCallback(
(content: string, fileName: string) => {
// General 主题使用专门的画布
if (activeTheme === "general") {
setGeneralCanvasState({
isOpen: true,
contentType: "markdown",
content,
filename: fileName,
});
setLayoutMode("chat-canvas");
return;
}
const { sendMessage } = useAgentChatUnified({
systemPrompt,
onWriteFile: handleWriteFile,
workspaceId,
});
// 其他主题使用 CanvasFactory
setCanvasState(createInitialDocumentState(content));
setLayoutMode("chat-canvas");
},
[activeTheme],
);
const handleWriteFile = useWorkspaceWriteFileAction(...);
```
## 主题类型
@@ -233,6 +211,9 @@ const handleWriteFile = useCallback(
- 社媒主题已不再把 `write_file` 仅视为“文件覆盖”,而是映射为带阶段语义的版本链产物
- `brief / draft / polished / platform variant / publish package` 应分别作为不同产物语义处理
- 日志、运行轨迹、正文产物三层分离:`harness` 产生命名事件,日志只做投影,正文仍由画布/产物承载
- 外层主链不要再直接 import `@/components/content-creator/**`,统一走 `src/lib/workspace/*`
- 根级旧 Hook `src/hooks/usePosterWorkflow.ts`、`src/hooks/useMultiPlatformExport.ts` 已删除,不应回流
- 海报 workflow 孤岛 `src/components/content-creator/workflows/poster/**` 与 `src/lib/workspace/workbenchPoster.ts` 已删除,不应回流
### Aster 框架限制
@@ -246,7 +227,7 @@ Aster 框架的 `SessionConfig` 不支持 session 级别的 system prompt,因
1. AI 响应包含 `<write_file>` 标签
2. `StreamingRenderer` 解析到标签
3. 调用 `onWriteFile` 回调
4. `AgentChatPage` 更新画布状态
4. `useWorkspaceWriteFileAction` 更新版本链 / 画布状态
5. `layoutMode` 切换为 `chat-canvas`
## 相关文档
+1 -1
View File
@@ -63,7 +63,7 @@ lime/
| `components/content-creator/` | 主题化创作工作台与画布联动 |
| `skills/` | 技能加载、标准校验与经验编排能力;统一遵循 `skill-standard.md` |
| `lib/artifact/` | Artifact 解析、状态与轻量渲染器 |
| `memory / style / personas` | 项目记忆、风格策略与人设沉淀 |
| `memory / personas` | 项目记忆与人设沉淀 |
### 能力层
+2
View File
@@ -27,6 +27,7 @@
- 能走真实后端就走真实后端;浏览器模式暂不支持或尚未桥接的能力,允许走 mock
- `verify:gui-smoke` 内部的 browser runtime 校验默认走无界面浏览器会话;它只证明主链可启动,不替代后续真实页面交互验证
- 共享网关控制页已下线,托盘也不再展示网关状态或地址;共享网关 `/v1/routes` 与 selector HTTP 路由也已下线,不再对“启动/停止网关、复制网关地址、路由/curl 示例、selector 路由、托盘运行态文案”做 GUI 续测;server 验证只关注标准 `/v1/messages` 与 `/v1/chat/completions` 主链,如需看运行时状态,走开发者页或实验页的诊断面板
- 项目排版模板与品牌人设扩展旧链路已下线,不再对相关弹窗、模板列表、默认模板、人设扩展表单做 GUI 续测;项目与工作台回归只围绕当前 `Claw` / `workspace` / 现役 `persona` 主链
- 如果只是模块级代码修改、并不需要真实页面交互,优先跑最小单测或 `verify:local`
## 进入前的最低准备
@@ -132,6 +133,7 @@ npm run test:contracts
7. 验证页面出现 `Theme Workbench` 或相关工作台内容
8. 再次检查控制台 error
9. 如能查看运行时摘要,继续确认当前 gate 与任务标题恢复自该话题最近一次 `execution_runtime.recent_gate_key / recent_run_title`
10. 当前项目管理与工作台侧已下线“项目风格 / 风格策略”旧入口,不再对其做存在性验证;如页面仍出现相关入口,应判定为回流
### 浏览器工作台站点采集验证
+4
View File
@@ -66,6 +66,10 @@
如果本轮是在下线共享网关控制面,`start_server`、`stop_server`、`get_server_status`、`get_available_routes`、`get_route_curl_examples`、`test_api`、`get_network_info`,以及托盘残留 `sync_tray_state`、`update_tray_server_status`、`update_tray_credential_status`、`get_tray_state`、`refresh_tray_menu`、`refresh_tray_with_stats` 必须同步从前端网关、Rust 注册、DevBridge 和 mock 中撤掉;server 兼容面 `/v1/routes`、`/{selector}/v1/messages`、`/{selector}/v1/chat/completions` 也必须同步从 server 路由表与 services/core 模型中撤掉;开发者诊断只保留 `get_server_diagnostics`,托盘只保留 `sync_tray_model_shortcuts`,server 只保留标准 `/v1/messages` 与 `/v1/chat/completions`。
如果本轮是在下线项目默认风格旧链路,`style_guide_get` / `style_guide_update` 与 `ProjectMemory.style_guide` 也必须同步从前端 API、Rust 注册、数据库 schema、默认 mock 和 GUI 入口中撤掉。
如果本轮是在下线项目模板或品牌人设扩展旧链路,`create_template` / `list_templates` / `get_template` / `update_template` / `delete_template` / `set_default_template` / `get_default_template`,以及 `get_brand_persona` / `get_brand_extension` / `save_brand_extension` / `update_brand_extension` / `delete_brand_extension` / `list_brand_persona_templates` 也必须同步从前端 API、Rust 注册、services/core 模型、默认 mock 和 GUI 入口中撤掉。
### 3. 用户可见 UI 改动必须补稳定回归
- 优先补现有 `*.test.tsx` 的关键文案、状态与交互断言