|
|
@@ -1,67 +1,57 @@
|
|
|
-# Script Build Execution Observer
|
|
|
+# Script Build Journey
|
|
|
|
|
|
-脚本构建系统的只读真实运行观察器。它不再用 Fake Graph 模拟一条固定流水线,而是直接投影 Host 持久化的 TaskLedger、全局 Planner Trace 和 Worker Attempt Trace。
|
|
|
+这是面向非技术人员的“智能创作旅程”:用真实运行数据解释系统为什么规划、如何执行、怎样验收,以及失败后如何返工。
|
|
|
|
|
|
-主界面严格对应当前代码的四层结构:
|
|
|
+## 三层视图
|
|
|
|
|
|
-1. 一个围绕创作总目标持续运行的全局 Planner;
|
|
|
-2. Planner 逐步创建、派发和调整的一棵动态 Task 树;
|
|
|
-3. 每个 Task 的 `创建 → Attempt → Validation → Decision` 受控生命周期;
|
|
|
-4. 每个 Attempt 内部的 Worker `说明 → 工具调用 → 工具结果 → 提交` 循环。
|
|
|
+- **全局**:按 Task 展示一次次“规划 → 执行 → 验收 → 决定”创作回合。
|
|
|
+- **步骤**:展开真实 JourneyStep,显示 reasoning、process、input data、output data、并行和 loop back。
|
|
|
+- **证据**:按需查看安全 TaskContract、Tool Call、Artifact、Validation 和 PlannerDecision 原始证据。
|
|
|
|
|
|
-界面中的 Reasoning 只指模型主动输出的说明、工具参数、工具结果、Validation 理由和 Planner Decision,不声称展示隐藏思维链。
|
|
|
-
|
|
|
-## 数据源
|
|
|
-
|
|
|
-默认只读同仓库下的:
|
|
|
-
|
|
|
-```text
|
|
|
-script_build_host/.local/agent-data/
|
|
|
-├── task-ledger/<root_trace_id>/orchestration/ledger.json
|
|
|
-├── traces/<root_trace_id>/meta.json
|
|
|
-├── traces/<trace_id>/messages/*.json
|
|
|
-└── script-task-contracts/<root_trace_id>/sha256/*
|
|
|
-```
|
|
|
-
|
|
|
-可用环境变量覆盖数据根目录:
|
|
|
-
|
|
|
-```bash
|
|
|
-export SCRIPT_BUILD_AGENT_DATA_ROOT=/absolute/path/to/agent-data
|
|
|
-```
|
|
|
-
|
|
|
-观察器不再绑定固定的历史 Build ID。它从 TaskLedger 发现 Root Trace,并优先从
|
|
|
-Root `meta.json` 的受保护上下文读取 `script_build_id`;`goal.json` 和早期消息只作为旧运行的兼容回退。
|
|
|
-新的真实 E2E 持久化后会自动出现在列表中。前端每 15 秒重新读取快照,不修改 ledger、trace 或数据库。
|
|
|
+可视化后端只调用 Host 的只读 API,不读取数据库,也不了解 `.local`、Trace 或合同文件的磁盘布局。没有模型说明文字时,界面只用冻结的 TaskContract 做确定性讲解,并明确标记来源,不冒充隐藏思维链。
|
|
|
|
|
|
## 启动
|
|
|
|
|
|
+先启动 Script Build Host。Host 默认地址是 `http://127.0.0.1:8080`。然后分别启动可视化后端和前端:
|
|
|
+
|
|
|
```bash
|
|
|
-cd visualization/backend
|
|
|
+cd backend
|
|
|
python -m venv .venv
|
|
|
.venv/bin/pip install -r requirements.txt
|
|
|
-.venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8788
|
|
|
+SCRIPT_BUILD_HOST_API_BASE=http://127.0.0.1:8080 \
|
|
|
+ .venv/bin/uvicorn app.main:app --host 127.0.0.1 --port 8788
|
|
|
```
|
|
|
|
|
|
```bash
|
|
|
-cd visualization/frontend
|
|
|
+cd frontend
|
|
|
npm install
|
|
|
NEXT_PUBLIC_API_BASE=http://127.0.0.1:8788 npm run dev
|
|
|
```
|
|
|
|
|
|
-访问 `http://127.0.0.1:3008`。
|
|
|
+默认前端为 `http://127.0.0.1:3008`,可视化后端为 `http://127.0.0.1:8788`。浏览器带上的 Host 登录 Cookie 或 Authorization 会由后端按白名单转发。
|
|
|
+
|
|
|
+## 数据边界
|
|
|
+
|
|
|
+- Host 是 Mission、TaskContract、InputSnapshot 和 Artifact 的唯一权威来源。
|
|
|
+- 可视化只做只读投影,不改变 Agent、TaskLedger、Phase 状态机或发布逻辑。
|
|
|
+- `JourneyEdge` 是步骤关系的唯一权威来源;Step 不重复保存返工目标。
|
|
|
+- Input Summary 只返回主题、Persona/Strategy 摘要和快照标识,不返回 Prompt、密钥、数据库信息或 Strategy 原文。
|
|
|
+- Artifact 内容只在用户打开证据层时按需读取。
|
|
|
+
|
|
|
+可视化后端复用一个 Host HTTP 连接池。Input Summary 和同一 Spec 的 TaskContract 会缓存;Orchestration Event 和 Trace Message 按 cursor/sequence 增量追加。前端只轮询运行中的 Build,完成态停止自动刷新。
|
|
|
|
|
|
## API
|
|
|
|
|
|
- `GET /api/health`
|
|
|
- `GET /api/runs`
|
|
|
-- `GET /api/runs/{script_build_id}/execution`
|
|
|
-- `GET /api/runs/{script_build_id}/tasks/{task_id}`
|
|
|
+- `GET /api/runs/{script_build_id}/journey`
|
|
|
+- `GET /api/runs/{script_build_id}/artifacts/{artifact_version_id}`
|
|
|
|
|
|
## 验证
|
|
|
|
|
|
```bash
|
|
|
-cd visualization/backend && .venv/bin/python -m pytest -q
|
|
|
-cd visualization/frontend && npm test && npm run typecheck && npm run build
|
|
|
+cd backend && .venv/bin/python -m pytest -q && .venv/bin/ruff check app tests
|
|
|
+cd frontend && npm test && npm run typecheck && npm run build
|
|
|
```
|
|
|
|
|
|
-真实数据的投影边界与证据等级见 [DATA_CONTRACT.md](./DATA_CONTRACT.md)。
|
|
|
+生成目录不属于源码。`.next`、测试报告、截图、`__pycache__` 和工具缓存都在 `.gitignore` 中;`node_modules`、后端 `.venv` 与 Playwright 浏览器属于可重建依赖,不提交到 Git。
|