@tea-agent/loop-agent 0.40.0 → 0.41.0-next.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +17 -7
- package/dist/build-stamp.json +3 -3
- package/dist/task/config-types.js +2 -0
- package/dist/worker/console/chat/pi-runtime.js +3 -2
- package/dist/worker/console/chat/semantic-activity.js +12 -11
- package/dist/worker/console/chat/turn-process.js +18 -2
- package/dist/worker/console/static/assets/{abnfDiagram-N423BO3Z-Dy71QJp3.js → abnfDiagram-N423BO3Z-CV1qyRbn.js} +1 -1
- package/dist/worker/console/static/assets/{arc-M25fNMTE.js → arc-B_ljC4ma.js} +1 -1
- package/dist/worker/console/static/assets/{architectureDiagram-T3A2C74G-CUWlVl1a.js → architectureDiagram-T3A2C74G-DTBqsauL.js} +1 -1
- package/dist/worker/console/static/assets/{blockDiagram-VBNYF7ZC-Dd0Whpx2.js → blockDiagram-VBNYF7ZC-CMZj6nYE.js} +1 -1
- package/dist/worker/console/static/assets/{c4Diagram-5PPSVZJV-BdfeCkI5.js → c4Diagram-5PPSVZJV-C4ey_S7v.js} +1 -1
- package/dist/worker/console/static/assets/channel-BvYm_83n.js +1 -0
- package/dist/worker/console/static/assets/{chunk-2GRJ4B5K-D_1sUkyD.js → chunk-2GRJ4B5K-CGcAlY6Z.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-2Q5K7J3B-Cxnxf36E.js → chunk-2Q5K7J3B-XRSM64J1.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5RXB4S5H-D9RG3G_x.js → chunk-5RXB4S5H-COSIFYbz.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-5VM5RSS4-Zz9jgjLX.js → chunk-5VM5RSS4-BwuaXiOK.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-6Q2QTUOP-BCggDRCH.js → chunk-6Q2QTUOP-DNbFuVlv.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-GF5L2VYU-CFg-5iAS.js → chunk-GF5L2VYU-C4DZKffE.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-JWPE2WC7-DRQTE8x_.js → chunk-JWPE2WC7-M3A6iczx.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-KBJHAD2P-C_Dw7uZ8.js → chunk-KBJHAD2P-C5zDzQEM.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-RYQCIY6F-BjIiApsk.js → chunk-RYQCIY6F-uAcUDub8.js} +1 -1
- package/dist/worker/console/static/assets/{chunk-XXDRQBXY-B5XQD4KG.js → chunk-XXDRQBXY-EPpz2uSP.js} +1 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BNdy3f9F.js +1 -0
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BNdy3f9F.js +1 -0
- package/dist/worker/console/static/assets/{cose-bilkent-JH36ORCC-huHqH6WQ.js → cose-bilkent-JH36ORCC-BAkfFGTf.js} +1 -1
- package/dist/worker/console/static/assets/{cynefin-VYW2F7L2-BSi6yZqP.js → cynefin-VYW2F7L2-Cjb4d22A.js} +1 -1
- package/dist/worker/console/static/assets/{cynefinDiagram-MW4NZA55-Bs_Jp31y.js → cynefinDiagram-MW4NZA55-Cf7QSgcu.js} +1 -1
- package/dist/worker/console/static/assets/{dagre-VZM6K2ZE-CYxavikT.js → dagre-VZM6K2ZE-UlyVBCtl.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-7IWD3JNH-B6TErl71.js → diagram-7IWD3JNH-DWdRAZ8p.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-B4RE2ZJO-CvH4J2ii.js → diagram-B4RE2ZJO-Y2ag2Pm0.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-LBJQPF4R-v1NBAqXS.js → diagram-LBJQPF4R-DBHcuPXI.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-Q27KOJAE-CUNHVAn2.js → diagram-Q27KOJAE-BK7eno2C.js} +1 -1
- package/dist/worker/console/static/assets/{diagram-UB23O5K3-Dzz1gUu-.js → diagram-UB23O5K3-Dbyku82r.js} +1 -1
- package/dist/worker/console/static/assets/{ebnfDiagram-BXEA7PRR-CCF8_LjK.js → ebnfDiagram-BXEA7PRR--rS0Q41A.js} +1 -1
- package/dist/worker/console/static/assets/{erDiagram-JOGREHBK-DObdPVLa.js → erDiagram-JOGREHBK-Cms8pJeK.js} +1 -1
- package/dist/worker/console/static/assets/{flowDiagram-UKHOOZJN-DlN8Pxrj.js → flowDiagram-UKHOOZJN-DouONwBy.js} +1 -1
- package/dist/worker/console/static/assets/{ganttDiagram-PKOTCBZU-BJKIPTGX.js → ganttDiagram-PKOTCBZU-DuKB5yDe.js} +1 -1
- package/dist/worker/console/static/assets/{gitGraphDiagram-DS77QQ5N-XcSSnObi.js → gitGraphDiagram-DS77QQ5N-DE6zp0SI.js} +1 -1
- package/dist/worker/console/static/assets/{index-CS3QOTfl.js → index-C39zQYik.js} +82 -82
- package/dist/worker/console/static/assets/{index-CIYzS16i.css → index-Crixt9tN.css} +1 -1
- package/dist/worker/console/static/assets/{infoDiagram-6WML65LV-BKrRKMww.js → infoDiagram-6WML65LV-BLETv9SH.js} +1 -1
- package/dist/worker/console/static/assets/{ishikawaDiagram-WSZJBQD7-CN5dk-yb.js → ishikawaDiagram-WSZJBQD7-DyU-2lJb.js} +1 -1
- package/dist/worker/console/static/assets/{journeyDiagram-NVQOT4AX-B4P4KZ-Y.js → journeyDiagram-NVQOT4AX-BotFSygt.js} +1 -1
- package/dist/worker/console/static/assets/{kanban-definition-27J2QSJJ-BRlteP32.js → kanban-definition-27J2QSJJ-CqcAMgVk.js} +1 -1
- package/dist/worker/console/static/assets/{linear-CG8D9fuL.js → linear-Bf4U8h5G.js} +1 -1
- package/dist/worker/console/static/assets/{mermaid.core-BuB6P2rX.js → mermaid.core-D0JEVefG.js} +5 -5
- package/dist/worker/console/static/assets/{mindmap-definition-FAOFIHXS-DYXGl_DR.js → mindmap-definition-FAOFIHXS-DEFgNgOo.js} +1 -1
- package/dist/worker/console/static/assets/{pegDiagram-VL7TDLO6-BM48yEVG.js → pegDiagram-VL7TDLO6-CirKhxo1.js} +1 -1
- package/dist/worker/console/static/assets/{pieDiagram-7S7Q4E2Y-mT8NL-Ow.js → pieDiagram-7S7Q4E2Y-BlaQYInF.js} +1 -1
- package/dist/worker/console/static/assets/{quadrantDiagram-CIZ2JOQS-C4pZ6DH_.js → quadrantDiagram-CIZ2JOQS-BbyzqH4U.js} +1 -1
- package/dist/worker/console/static/assets/{railroadDiagram-AXF67PYL-BKAcr70m.js → railroadDiagram-AXF67PYL-qA-XykV6.js} +1 -1
- package/dist/worker/console/static/assets/{requirementDiagram-LRYGKXZP-CRxcKpoO.js → requirementDiagram-LRYGKXZP-Cc85Zcxc.js} +1 -1
- package/dist/worker/console/static/assets/{sankeyDiagram-W5VNT64P-Ds4LxQDI.js → sankeyDiagram-W5VNT64P-CS7BVnoH.js} +1 -1
- package/dist/worker/console/static/assets/{sequenceDiagram-SI44F4Z6-CPLwPf_p.js → sequenceDiagram-SI44F4Z6-DMQ-kKmZ.js} +1 -1
- package/dist/worker/console/static/assets/{sizeCapture-X5ZJPWSS-CL65uij0.js → sizeCapture-X5ZJPWSS-DXKs1dcE.js} +1 -1
- package/dist/worker/console/static/assets/{stateDiagram-OKZ733FA-CO0Mgd1W.js → stateDiagram-OKZ733FA-xG1ti87X.js} +1 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-tYINJZ8x.js +1 -0
- package/dist/worker/console/static/assets/{swimlanes-SLNWSIFB-Cxv3TSNw.js → swimlanes-SLNWSIFB-BQwmKGHd.js} +2 -2
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-OoBOXPiG.js +8 -0
- package/dist/worker/console/static/assets/{timeline-definition-Z64GVDOM-Dw85f9L2.js → timeline-definition-Z64GVDOM-BwL9oHtP.js} +1 -1
- package/dist/worker/console/static/assets/{vennDiagram-T6HMQDX7-B4QLCqCy.js → vennDiagram-T6HMQDX7-BWk-i_Y1.js} +1 -1
- package/dist/worker/console/static/assets/{wardleyDiagram-T6FBY63Y-B_yKCWwn.js → wardleyDiagram-T6FBY63Y-DAvETpEZ.js} +1 -1
- package/dist/worker/console/static/assets/{xychartDiagram-ELKLHX3M-nniBEGv2.js → xychartDiagram-ELKLHX3M-Cd4pASnF.js} +1 -1
- package/dist/worker/console/static/index.html +2 -2
- package/dist/worker/console/static-src/app/useRunProgress.js +9 -2
- package/dist/worker/console/static-src/operator-chat/dag-progress-link.js +22 -0
- package/dist/worker/console/static-src/pages/tasks/run-panel-progress.js +106 -0
- package/dist/worker/observability/read-model.js +4 -0
- package/dist/workflows/dag/init-hybrid.js +2 -2
- package/package.json +1 -1
- package/dist/worker/console/static/assets/channel-Ba0AKiEZ.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-JCYQIIEL-BU3IjVEe.js +0 -1
- package/dist/worker/console/static/assets/classDiagram-v2-OCEON4UE-BU3IjVEe.js +0 -1
- package/dist/worker/console/static/assets/stateDiagram-v2-UEYNNEHI-BUewAVYS.js +0 -1
- package/dist/worker/console/static/assets/swimlanesDiagram-ULZ7WXOC-Bhe67Wjl.js +0 -8
package/CHANGELOG.md
CHANGED
|
@@ -2,19 +2,29 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
- backend-test 新增 `backendTest.executeTimeoutMs`,可为 readiness 授权的单次 pytest/HTML 执行节点配置 1 分钟至 2 小时的每命令超时;省略时仍为 5 分钟,不影响其他节点、DAG 外层 wall-clock 或 fail-closed 判定。
|
|
6
|
+
- 对话中的长时间 DAG 执行现在会保留一条实时状态:持续显示总运行时间、当前阶段、完成步数和最近一次有效进展;重复等待不再堆叠,点击状态可以直接查看对应 DAG。模型仍会在阶段变化、重要发现、失败恢复和结束时,用自然语言说明刚完成什么、下一步做什么。
|
|
7
|
+
|
|
5
8
|
## [0.40.0] - 2026-08-31
|
|
6
9
|
|
|
7
|
-
###
|
|
10
|
+
### 重点更新
|
|
8
11
|
|
|
9
|
-
-
|
|
12
|
+
- **Console 对话页「轨迹」视图**:仿 DSH ui-trajectory 把对话按「用户 → 过程 → AI 回复」渲染为统一单元格列表,每行带类型标签与图标,思考/工具/超长消息可展开收起,支持一键导出自包含 HTML。轨迹顶部新增「会话注入」区,展示真实注入 Pi 会话的系统提示词全文(含字符数与注入上下文 suffix)与模型可见工具目录,离线导出同样包含;每轮新增遥测头行(步骤数、LLM 时长、首 token 延迟、解码吞吐、工具调用数与耗时、上下行 token 与成本),切换历史会话立即显示。同时修复刷新后工具耗时全部变成 0ms/消失(会话恢复现在回填每次工具调用的真实起止时间)、窄窗口耗时列被整体隐藏、展开后内容仍截断在 420 字符、多工作区下轨迹数据恒为空等问题。
|
|
13
|
+
- **上下文压力处理默认开启**:Operator Chat 与 DAG Pi 节点在发送前接近模型窗口时主动压缩一次、识别网关「请求上下文过大」响应后压缩并继续原请求、对 OpenAI 格式的大工具输出做线路压缩;消息流按顺序展示触发原因、压缩进度与结果。Anthropic 缺省 prompt cache 形态保持 no-op 不破坏缓存;`HARNESS_CONTEXT_PRESSURE_MODE` / `HARNESS_CONSOLE_SIFT` / `HARNESS_DAG_SIFT` 可整体或分路关闭;可选依赖 `@agent-context/sift@0.0.1-alpha.6` 精确 pin,不投影 init。
|
|
14
|
+
- **Console「Pi 插件」管理**:从「设置」提升为与「设置」同级的独立 tab,内置经 npm 校验的插件目录(6303 个,展示 5562 个可安装、含中文说明),支持搜索、每页条数、分页与一键安装/卸载;插件版本改为从 npm 配置的仓库地址拉取(内网镜像可用),安装时提供版本下拉、默认装最新,已安装插件显示实际版本,`@version` 形式的已装包也能正确识别;进度动画改为 JS 驱动,不受系统「减少动态效果」影响。
|
|
15
|
+
- **Operator Chat 持续目标模式**:用 `/goal` 或输入框上方的目标条创建跨多回合推进的目标,可随时暂停、继续、编辑或清除;长任务在安全轮数内自动续行,优先处理排队消息;上下文压缩后当前目标自动回到模型上下文;刷新后仍可见,重启 Console 不会未经确认自行续跑。配套新增任务清单与结构化提问卡片,长任务进度与需要用户决策的内容更易理解。
|
|
16
|
+
- **多工作区与消息流重构**:同一页面管理多个工作区,会话稳定归属创建它的工作区,会话列表改为独立全局目录(移除工作区不丢会话);消息流整体更紧凑,思考、工具执行、阶段性结果与最终回答按真实发生顺序展示;对话进行中可连续提交多条消息(编辑/删除/立即插入),排队消息由输入框上方队列面板统一管理;右侧辅助栏统一承载文件、上下文、调用记录、运行活动与当前 DAG,宽度可调。
|
|
17
|
+
- **CLI 可用性修复**:`--help` 现在直接显示真实 usage(此前 raw-args 命令只在解析出错时才抛出):`task advance` / `task status` / `task source prepare` 与 `dag resume|doctor|report|rerun|...` 的帮助顶部即列出完整参数契约;`task source prepare`(确定性任务源投影)从不可达死代码转正为可用子命令。
|
|
18
|
+
- **backend-test 执行与判定系列修复**:pytest 7.x 环境改用 run-owned Python launcher 精确执行已授权 items(不再把 `@<targets-file>` 当普通路径导致全部无法执行);payload readiness 修复空值标记误判 UNSAFE、本地 transport payload 假阴性、同模块安全 payload helper 绑定、`\u0020` 空白表示误判、超长边界 observed 持久化等系列假阳/假阴性;Scenario Partition 的 exact slot 清单正确下发 Markdown writer(普通别名不再替代 partition slots)、补集槽位合同统一;payload/fixture/Markdown→pytest 多类缺陷合并进唯一一次有界 repair;文档审计不再扫描 `.scratch/` 临时证据阻断发布前验证。
|
|
10
19
|
|
|
11
20
|
### 改进
|
|
12
21
|
|
|
13
|
-
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
-
|
|
22
|
+
- 初始化选择模型时识别公司内部 `wizard-local` 的 AICoder 型号梯度(default/plus/pro/max),作为 LOW/MED/HIGH 参考但不机械分档。
|
|
23
|
+
- 右侧文件工作台打开 HTML 默认沙箱预览(同项目相对资源可用、脚本与外部网络阻断),超大源码显示前 512 KiB 并明确提示截断。
|
|
24
|
+
- 工作区列表支持拖动排序并自动保存;多个 Console 同时运行时安全合并工作区增删并实时同步。
|
|
25
|
+
- 设置页用自然中文展示模型状态;DAG 检查器简化节点说明与提示词重启面板,长内容更易定位。
|
|
26
|
+
- 输入框整合模型与推理等级选择,只展示有真实数据的轮次、耗时、速度与缓存统计。
|
|
27
|
+
- 修复 Console「更新并初始化」被观测顶栏遮挡(入口改到操作 → 设置)、内嵌观测样式泄漏与「提示词重启」入口丢失、宽表格/窄屏多处显示异常、部分 Windows 偶发读取失败等。
|
|
18
28
|
|
|
19
29
|
## [0.39.3] - 2026-08-28
|
|
20
30
|
|
package/dist/build-stamp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.
|
|
4
|
-
"gitSha": "
|
|
5
|
-
"builtAt": "2026-08-
|
|
3
|
+
"version": "0.41.0-next.2",
|
|
4
|
+
"gitSha": "0e7de8cc6c6055949135d7a7fba05139fe36fc23",
|
|
5
|
+
"builtAt": "2026-08-31T02:58:17.929Z"
|
|
6
6
|
}
|
|
@@ -149,6 +149,8 @@ export const backendTestConfigSchema = z
|
|
|
149
149
|
executeScope: z.enum(["affected", "all"]).optional(),
|
|
150
150
|
/** Backend-test-only workspace mutation control; omitted means Git guard. */
|
|
151
151
|
workspaceControl: z.enum(["git", "filesystem-only"]).optional(),
|
|
152
|
+
/** Per-command timeout for the readiness-authorized pytest/HTML execution node. */
|
|
153
|
+
executeTimeoutMs: z.number().int().min(60_000).max(7_200_000).optional(),
|
|
152
154
|
})
|
|
153
155
|
.strict()
|
|
154
156
|
.optional();
|
|
@@ -67,10 +67,11 @@ export const OPERATOR_CHAT_SYSTEM_PROMPT_BASE = [
|
|
|
67
67
|
"You are General Operator Chat.",
|
|
68
68
|
"Use operator tools first (dagReport, dagRerunPlan, dagRerun). Pi read/write/edit/bash/grep/find/ls are available; obey repository AGENTS.md. apply_patch, full-tools, shell and coding-chat are denied. Prefer safe-read/safe-grep for probes.",
|
|
69
69
|
"No harness and asked to init: `loop-agent init instructions --repo-root .`, then `loop-agent init --repo-root . --profile full --merge`; verify with doctor, inspect and docs audit. Updates: `loop-agent init upgrade --repo-root . --json` until stable; `loop-agent init check-update` is read-only.",
|
|
70
|
-
"Long DAGs: prepareDagExecution → runDag → operationId. Never foreground-Bash task advance, tail/head pipes or nohup/Start-Process/start; do not end on accepted/queued/running or an operationId — NOT completion. Supervise operationGet/status/dagReport/dagDoctor/operationWait
|
|
71
|
-
"
|
|
70
|
+
"Long DAGs: prepareDagExecution → runDag → operationId. Never foreground-Bash task advance, tail/head pipes or nohup/Start-Process/start; do not end on accepted/queued/running or an operationId — NOT completion. Supervise operationGet/status/dagReport/dagDoctor/operationWait at 60s → 90s → 120s → 180s; reset to 60s on state change; 30-60s re-checks when stall suspected. operationWait MUST use afterSeq=previous nextSeq (recommendedNextCall). Heartbeats: not meaningful progress. Run id ≠ task id.",
|
|
71
|
+
"Failure: terminal runSummary first. With progress wait; else dagRerunPlan(fromNode=primaryFailure.nodeId); eligible → dagRerun: reruns the failed subgraph, keeps prior successes. Ineligible: Worker → workerTaskRetry; standalone → standaloneTaskRerun after contract adopt (regenerates the whole task, not node continue). Do not call dagResume; do not re-advance a run-failed task. Pre-run identical state twice: stop and report; never loop identical bash/read/grep. Approve only bounded writeSet inside allowedPaths, outside forbiddenPaths, with structured verification.",
|
|
72
72
|
"Iterate toward the goal in bounded rounds: first summarize the previous round's error in one line, fix its root cause — not the symptom — then rerun the failed node with a fresh plan. Never resubmit an unchanged fix; after two rounds failing the same way, stop and report evidence and remaining routes.",
|
|
73
73
|
"Continue until success, user stop, or no safe recovery remains; then stop and report failure/evidence. Never create a new task for a transient failure or replace repair-pi with direct edits.",
|
|
74
|
+
"Narrate long-DAG progress briefly at start, meaningful phase changes/findings, verification failure/recovery, prolonged quiet and terminal state: say what finished and what is next. Never narrate unchanged operationWait polls or heartbeats, or claim beyond structured facts.",
|
|
74
75
|
].join("\n");
|
|
75
76
|
/** Compose the inspectable system prompt actually injected into Operator Chat. */
|
|
76
77
|
export function composeOperatorChatSystemPrompt(input) {
|
|
@@ -296,13 +296,6 @@ function operationIdFromArgs(args) {
|
|
|
296
296
|
const operationId = record?.operationId;
|
|
297
297
|
return typeof operationId === "string" && operationId ? operationId : undefined;
|
|
298
298
|
}
|
|
299
|
-
function maxWaitSeconds(args) {
|
|
300
|
-
const record = parseJsonRecord(args);
|
|
301
|
-
const raw = record?.maxWaitMs;
|
|
302
|
-
if (typeof raw !== "number" || !Number.isFinite(raw) || raw <= 0)
|
|
303
|
-
return undefined;
|
|
304
|
-
return Math.max(1, Math.round(raw / 1000));
|
|
305
|
-
}
|
|
306
299
|
function activityRefForTool(tool) {
|
|
307
300
|
// Plan A (2026-08-16): server backfills operationId on the persisted tool
|
|
308
301
|
// entry (and live tool_result frames carry it in the result payload), so
|
|
@@ -313,6 +306,17 @@ function activityRefForTool(tool) {
|
|
|
313
306
|
operationIdFromArgs(tool.resultText);
|
|
314
307
|
return operationId ? `operation:${operationId}` : `tool:${tool.id}`;
|
|
315
308
|
}
|
|
309
|
+
export function dagProgressActivityForTool(tool) {
|
|
310
|
+
if (tool.toolName !== "operationWait")
|
|
311
|
+
return undefined;
|
|
312
|
+
const activityRef = activityRefForTool(tool);
|
|
313
|
+
if (!activityRef.startsWith("operation:"))
|
|
314
|
+
return undefined;
|
|
315
|
+
return {
|
|
316
|
+
id: `dag-progress:${activityRef}`,
|
|
317
|
+
activityRef,
|
|
318
|
+
};
|
|
319
|
+
}
|
|
316
320
|
function semanticKindForStatus(status) {
|
|
317
321
|
if (status === "running")
|
|
318
322
|
return "progress";
|
|
@@ -377,14 +381,11 @@ function nodeActivityFromMessages(messages, id, activityRef) {
|
|
|
377
381
|
function operationWaitActivity(tool) {
|
|
378
382
|
const activityRef = activityRefForTool(tool);
|
|
379
383
|
const id = `activity:${tool.id}`;
|
|
380
|
-
const seconds = maxWaitSeconds(tool.args);
|
|
381
384
|
if (tool.status === "running") {
|
|
382
385
|
return {
|
|
383
386
|
id,
|
|
384
387
|
kind: "progress",
|
|
385
|
-
title:
|
|
386
|
-
? `正在等待新的执行进展,最长等待时间 ${seconds} 秒`
|
|
387
|
-
: "正在等待新的执行进展",
|
|
388
|
+
title: "正在等待新的执行进展",
|
|
388
389
|
activityRef,
|
|
389
390
|
};
|
|
390
391
|
}
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* Turn grouping for Operator Chat inline process UX (pi-web ProcessDetails mind).
|
|
3
3
|
*/
|
|
4
4
|
import { getDisplayableAssistantBlocks, joinAssistantText, parseAssistantContent, splitFinalAssistantBlocks, } from "./assistant-content.js";
|
|
5
|
-
import { semanticActivityForTool, } from "./semantic-activity.js";
|
|
5
|
+
import { dagProgressActivityForTool, semanticActivityForTool, } from "./semantic-activity.js";
|
|
6
6
|
function emptyGroup(key) {
|
|
7
7
|
return {
|
|
8
8
|
key,
|
|
@@ -126,6 +126,11 @@ function flushToolBuffer(processItems, buffer) {
|
|
|
126
126
|
return;
|
|
127
127
|
const sorted = sortToolsStable(buffer);
|
|
128
128
|
for (const tool of sorted) {
|
|
129
|
+
const dagProgress = dagProgressActivityForTool(tool);
|
|
130
|
+
if (dagProgress) {
|
|
131
|
+
processItems.push({ kind: "dag-progress", progress: dagProgress });
|
|
132
|
+
continue;
|
|
133
|
+
}
|
|
129
134
|
const activity = semanticActivityForTool(tool);
|
|
130
135
|
if (activity) {
|
|
131
136
|
processItems.push({ kind: "activity", activity });
|
|
@@ -135,6 +140,17 @@ function flushToolBuffer(processItems, buffer) {
|
|
|
135
140
|
}
|
|
136
141
|
}
|
|
137
142
|
}
|
|
143
|
+
function collapseDagProgressItems(items) {
|
|
144
|
+
const seen = new Set();
|
|
145
|
+
return items.filter((item) => {
|
|
146
|
+
if (item.kind !== "dag-progress")
|
|
147
|
+
return true;
|
|
148
|
+
if (seen.has(item.progress.activityRef))
|
|
149
|
+
return false;
|
|
150
|
+
seen.add(item.progress.activityRef);
|
|
151
|
+
return true;
|
|
152
|
+
});
|
|
153
|
+
}
|
|
138
154
|
function emitProcessBlocks(blocks, group, processItems, usedToolIds) {
|
|
139
155
|
let buffer = [];
|
|
140
156
|
for (const block of blocks) {
|
|
@@ -209,7 +225,7 @@ function fillProcessDetails(group) {
|
|
|
209
225
|
const orphans = group.tools.filter((tool) => !usedToolIds.has(tool.id));
|
|
210
226
|
if (orphans.length > 0)
|
|
211
227
|
flushToolBuffer(processItems, orphans);
|
|
212
|
-
group.processItems = processItems;
|
|
228
|
+
group.processItems = collapseDagProgressItems(processItems);
|
|
213
229
|
if (!finalAssistant)
|
|
214
230
|
return;
|
|
215
231
|
if (blocks.length === 0) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-
|
|
1
|
+
import{g as p,r as u,d as a}from"./chunk-6Q2QTUOP-DNbFuVlv.js";import{p as f}from"./chunk-JWPE2WC7-M3A6iczx.js";import{_ as n,l as o}from"./mermaid.core-D0JEVefG.js";import{M as c,b as d}from"./cynefin-VYW2F7L2-Cjb4d22A.js";import"./index-C39zQYik.js";var v=d().RailroadAbnf.parser.LangiumParser,i=n(e=>{const r=e.alternatives.map(g);return r.length===1?r[0]:{type:"choice",alternatives:r}},"transformAlternation"),g=n(e=>{const r=e.elements.map(y);return r.length===1?r[0]:{type:"sequence",elements:r}},"transformConcatenation"),b=n(e=>{if(e.includes("*")){const[t,s]=e.split("*"),l=t?parseInt(t,10):0,m=s?parseInt(s,10):1/0;return{min:l,max:m}}const r=parseInt(e,10);return{min:r,max:r}},"parseRepeat"),y=n(e=>{const r=A(e.primary);if(!e.repeat)return r;const{min:t,max:s}=b(e.repeat);return t===0&&s===1?{type:"optional",element:r}:{type:"repetition",element:r,min:t,max:s}},"transformElement"),A=n(e=>{switch(e.$type){case"AbnfStringLiteral":return{type:"terminal",value:e.value};case"AbnfNumVal":return{type:"terminal",value:e.value};case"AbnfRuleName":return{type:"nonterminal",name:e.name};case"AbnfGroup":return i(e.element);case"AbnfOptionalGroup":return{type:"optional",element:i(e.element)};default:throw new Error(`Unsupported ABNF primary node: ${e.$type}`)}},"transformPrimary"),P=n(e=>({name:e.name,definition:i(e.definition)}),"transformRule"),h=n(e=>{f(e,a),e.title&&a.setTitle(e.title),e.rules.map(r=>a.addRule(P(r)))},"populateDb"),R={parse:n(e=>{a.clear(),o.debug("[ABNF Parser] Starting Langium parse");const r=v.parse(e);if(r.lexerErrors.length>0||r.parserErrors.length>0)throw new c(r);const t=r.value;o.debug("[ABNF Parser] Parsed rules:",t.rules.length),h(t),o.debug("[ABNF Parser] Parse complete")},"parse"),parser:{yy:a}},B={parser:R,db:a,renderer:u,styles:p};export{B as diagram};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-
|
|
1
|
+
import{Y as ln,$ as an,a0 as F,a1 as q,a2 as j,a3 as un,a4 as y,a5 as tn,a6 as J,a7 as _,a8 as rn,a9 as o,aa as on,ab as sn,ac as fn}from"./mermaid.core-D0JEVefG.js";function cn(l){return l.innerRadius}function yn(l){return l.outerRadius}function gn(l){return l.startAngle}function dn(l){return l.endAngle}function mn(l){return l&&l.padAngle}function pn(l,h,I,D,v,A,z,a){var O=I-l,i=D-h,n=z-v,d=a-A,u=d*O-n*i;if(!(u*u<y))return u=(n*(h-A)-d*(l-v))/u,[l+u*O,h+u*i]}function U(l,h,I,D,v,A,z){var a=l-I,O=h-D,i=(z?A:-A)/J(a*a+O*O),n=i*O,d=-i*a,u=l+n,s=h+d,f=I+n,c=D+d,B=(u+f)/2,t=(s+c)/2,m=f-u,g=c-s,R=m*m+g*g,T=v-A,P=u*c-f*s,S=(g<0?-1:1)*J(on(0,T*T*R-P*P)),Y=(P*g-m*S)/R,$=(-P*m-g*S)/R,w=(P*g+m*S)/R,p=(-P*m+g*S)/R,x=Y-B,e=$-t,r=w-B,C=p-t;return x*x+e*e>r*r+C*C&&(Y=w,$=p),{cx:Y,cy:$,x01:-n,y01:-d,x11:Y*(v/T-1),y11:$*(v/T-1)}}function hn(){var l=cn,h=yn,I=j(0),D=null,v=gn,A=dn,z=mn,a=null,O=ln(i);function i(){var n,d,u=+l.apply(this,arguments),s=+h.apply(this,arguments),f=v.apply(this,arguments)-un,c=A.apply(this,arguments)-un,B=rn(c-f),t=c>f;if(a||(a=n=O()),s<u&&(d=s,s=u,u=d),!(s>y))a.moveTo(0,0);else if(B>tn-y)a.moveTo(s*F(f),s*q(f)),a.arc(0,0,s,f,c,!t),u>y&&(a.moveTo(u*F(c),u*q(c)),a.arc(0,0,u,c,f,t));else{var m=f,g=c,R=f,T=c,P=B,S=B,Y=z.apply(this,arguments)/2,$=Y>y&&(D?+D.apply(this,arguments):J(u*u+s*s)),w=_(rn(s-u)/2,+I.apply(this,arguments)),p=w,x=w,e,r;if($>y){var C=sn($/u*q(Y)),K=sn($/s*q(Y));(P-=C*2)>y?(C*=t?1:-1,R+=C,T-=C):(P=0,R=T=(f+c)/2),(S-=K*2)>y?(K*=t?1:-1,m+=K,g-=K):(S=0,m=g=(f+c)/2)}var G=s*F(m),H=s*q(m),L=u*F(T),M=u*q(T);if(w>y){var N=s*F(g),Q=s*q(g),V=u*F(R),W=u*q(R),E;if(B<an)if(E=pn(G,H,V,W,N,Q,L,M)){var X=G-E[0],Z=H-E[1],b=N-E[0],k=Q-E[1],nn=1/q(fn((X*b+Z*k)/(J(X*X+Z*Z)*J(b*b+k*k)))/2),en=J(E[0]*E[0]+E[1]*E[1]);p=_(w,(u-en)/(nn-1)),x=_(w,(s-en)/(nn+1))}else p=x=0}S>y?x>y?(e=U(V,W,G,H,s,x,t),r=U(N,Q,L,M,s,x,t),a.moveTo(e.cx+e.x01,e.cy+e.y01),x<w?a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,x,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,s,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),!t),a.arc(r.cx,r.cy,x,o(r.y11,r.x11),o(r.y01,r.x01),!t))):(a.moveTo(G,H),a.arc(0,0,s,m,g,!t)):a.moveTo(G,H),!(u>y)||!(P>y)?a.lineTo(L,M):p>y?(e=U(L,M,N,Q,u,-p,t),r=U(G,H,V,W,u,-p,t),a.lineTo(e.cx+e.x01,e.cy+e.y01),p<w?a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(r.y01,r.x01),!t):(a.arc(e.cx,e.cy,p,o(e.y01,e.x01),o(e.y11,e.x11),!t),a.arc(0,0,u,o(e.cy+e.y11,e.cx+e.x11),o(r.cy+r.y11,r.cx+r.x11),t),a.arc(r.cx,r.cy,p,o(r.y11,r.x11),o(r.y01,r.x01),!t))):a.arc(0,0,u,T,R,t)}if(a.closePath(),n)return a=null,n+""||null}return i.centroid=function(){var n=(+l.apply(this,arguments)+ +h.apply(this,arguments))/2,d=(+v.apply(this,arguments)+ +A.apply(this,arguments))/2-an/2;return[F(d)*n,q(d)*n]},i.innerRadius=function(n){return arguments.length?(l=typeof n=="function"?n:j(+n),i):l},i.outerRadius=function(n){return arguments.length?(h=typeof n=="function"?n:j(+n),i):h},i.cornerRadius=function(n){return arguments.length?(I=typeof n=="function"?n:j(+n),i):I},i.padRadius=function(n){return arguments.length?(D=n==null?null:typeof n=="function"?n:j(+n),i):D},i.startAngle=function(n){return arguments.length?(v=typeof n=="function"?n:j(+n),i):v},i.endAngle=function(n){return arguments.length?(A=typeof n=="function"?n:j(+n),i):A},i.padAngle=function(n){return arguments.length?(z=typeof n=="function"?n:j(+n),i):z},i.context=function(n){return arguments.length?(a=n??null,i):a},i}export{hn as d};
|