@tea-agent/loop-agent 0.42.0 → 0.43.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.
Files changed (78) hide show
  1. package/CHANGELOG.md +34 -7
  2. package/dist/application/evaluation/budget.js +19 -1
  3. package/dist/build-stamp.json +3 -3
  4. package/dist/executors/dag-pi-executor.js +762 -252
  5. package/dist/executors/pi-executor.js +20 -1
  6. package/dist/executors/pi-sdk-executor.js +64 -1
  7. package/dist/executors/shell-executor.js +5 -2
  8. package/dist/shared/frontend-execution-policy.js +22 -0
  9. package/dist/task/config-types.js +4 -0
  10. package/dist/task/source-prepare/ledger-reconciliation.js +2 -2
  11. package/dist/task/source-prepare/ledger-review.js +6 -9
  12. package/dist/task/source-prepare/semantic-intake.js +16 -26
  13. package/dist/task/source-prepare/source-fidelity-pi.js +26 -7
  14. package/dist/worker/observe/node-transparency.js +81 -72
  15. package/dist/worker/observe/routes.js +20 -1
  16. package/dist/worker/observe/static/dag-inspector-humanize.js +3 -0
  17. package/dist/worker/observe/static/dom.js +20 -1
  18. package/dist/worker/observe/static/format-pool.d.ts +2 -0
  19. package/dist/worker/observe/static/format-pool.js +6 -0
  20. package/dist/worker/observe/static/format.js +7 -0
  21. package/dist/worker/observe/static/inspect-workspace.js +34 -7
  22. package/dist/worker/observe/static/inspector-submission.js +32 -0
  23. package/dist/worker/observe/static/kpi.js +1 -0
  24. package/dist/worker/observe/static/relations.js +2 -0
  25. package/dist/worker/observe/static/router.js +13 -0
  26. package/dist/worker/observe/static/run-processing.js +2 -0
  27. package/dist/worker/observe/static/shell-chrome.js +36 -3
  28. package/dist/worker/observe/static/state.js +35 -2
  29. package/dist/worker/observe/static/styles.css +260 -39
  30. package/dist/worker/observe/static/task-failure-labels.d.ts +4 -0
  31. package/dist/worker/observe/static/task-failure-labels.js +67 -0
  32. package/dist/worker/observe/static/task-history.js +12 -0
  33. package/dist/worker/observe/static/views/batch.js +6 -13
  34. package/dist/worker/observe/static/views/dag-graph.js +50 -3
  35. package/dist/worker/observe/static/views/dag-inspector.js +746 -265
  36. package/dist/worker/observe/static/views/dag-trajectory.js +3 -0
  37. package/dist/worker/observe/static/views/dag.d.ts +6 -0
  38. package/dist/worker/observe/static/views/dag.js +48 -10
  39. package/dist/worker/observe/static/views/dags.js +2 -0
  40. package/dist/worker/observe/static/views/dashboard.js +21 -12
  41. package/dist/worker/observe/static/views/failures.js +21 -11
  42. package/dist/worker/observe/static/views/feature.js +11 -29
  43. package/dist/worker/observe/static/views/pool.js +37 -28
  44. package/dist/worker/observe/static/views/run.js +48 -5
  45. package/dist/worker/observe/static/views/session-timeline.js +189 -240
  46. package/dist/worker/observe/static/views/task.js +81 -62
  47. package/dist/workflows/dag/budget-enforcement.js +53 -3
  48. package/dist/workflows/dag/frontend-durable-tools.js +193 -0
  49. package/dist/workflows/dag/frontend-execution-groups.js +24 -0
  50. package/dist/workflows/dag/frontend-implementation-contract.js +9 -0
  51. package/dist/workflows/dag/frontend-input-projection.js +76 -0
  52. package/dist/workflows/dag/frontend-plan-render.js +10 -3
  53. package/dist/workflows/dag/frontend-recovery-controller.js +7 -7
  54. package/dist/workflows/dag/frontend-recovery-lineage.js +13 -0
  55. package/dist/workflows/dag/frontend-recovery-run.js +4 -0
  56. package/dist/workflows/dag/frontend-review-scopes.js +117 -0
  57. package/dist/workflows/dag/frontend-session-budget.js +249 -0
  58. package/dist/workflows/dag/frontend-shadow-dual-write.js +20 -2
  59. package/dist/workflows/dag/frontend-test-execution-evidence.js +3 -2
  60. package/dist/workflows/dag/frontend-typed-event-store.js +11 -0
  61. package/dist/workflows/dag/init-hybrid.js +16 -10
  62. package/dist/workflows/dag/node-execution.js +32 -155
  63. package/dist/workflows/dag/prompt.js +4 -0
  64. package/dist/workflows/dag/rerun-plan.js +7 -1
  65. package/dist/workflows/dag/runner.js +26 -1
  66. package/dist/workflows/dag/types.js +6 -0
  67. package/docs/operations/README.md +1 -0
  68. package/docs/templates/frontend-design-contract.md +4 -4
  69. package/docs/templates/frontend-implementation-contract.schema.json +34 -2
  70. package/docs/templates/frontend-implementation-dag.json +5 -5
  71. package/package.json +1 -1
  72. package/skills/frontend-contract/SKILL.md +2 -1
  73. package/skills/frontend-contract/references/contract-protocol.md +19 -3
  74. package/skills/frontend-design-review/SKILL.md +12 -11
  75. package/skills/frontend-plan/SKILL.md +2 -2
  76. package/skills/frontend-plan/references/decision-contract.md +18 -5
  77. package/skills/frontend-review/SKILL.md +10 -11
  78. package/skills/frontend-scout/references/scout-evidence.md +4 -0
package/CHANGELOG.md CHANGED
@@ -2,19 +2,46 @@
2
2
 
3
3
  ## [Unreleased]
4
4
 
5
- ## [0.42.0] - 2026-09-07
5
+ ### 改进
6
6
 
7
- ### 新增
7
+ - 前端 DAG 保留完整需求并按作用域/执行组分批,工具提交改为先校验和耐久保存再回执;支持按组共享覆盖、逐端点/逐 finding 提交和缺项恢复。小任务走短流程,容量耗尽直接缩小剩余工作;模型窗口不再硬编码为 100K/16K。独立 AC、来源保真与 writer/verify 门禁保持有效。
8
+ - 观测台阅读与口径修补:失败节点的产出页把「错误输出」提到正文之前,未登记文件关系时不再展示空文件卡;检查器 Tab 条放不下时两端渐隐提示并保证选中 Tab 可见,每页顶部说明卡可收起。异常 Task 的分类与建议跟进显示中文业务术语(未知 token 原样透传并可悬停看原始值),资源池「合计」改为口径明确的「已建 Task」并附悬停说明,数据更新文案改为「数据更新于 … · 仅提示」。DAG 详情面包屑使用可读运行标题(缺失回退运行 ID、窄屏截断),「记录保存位置」移入「诊断信息」折叠区,页面刷新按钮与标题同行靠右。
9
+ - 观测台保留检查器 Tab 导航,日志分类收进下拉框,辅助操作改为带提示的图标;所有执行记录区域(检查器执行记录/产出、运行页最新输出)统一配备对话式「回到底部」悬浮按钮:内容可滚动且视口离开底部即出现,贴底或内容不足一屏时隐藏,点击回到底部;活跃运行同时恢复跟随并提示未读条数,终态运行同样可用。执行分次仅在相关页面固定显示,上翻暂停跟随,并记住分次阅读位置。补充日志搜索、错误过滤、图定位和完整脱敏文本下载。
10
+ - 实际上下文改为中文材料目录优先、技术信息折叠;修复历史轮次混读当前上下文和旧请求覆盖新尝试的问题。保留仅看错误与原始协议事件,原始协议使用直接可达的图标开关,移除单项更多菜单和日志 HTML 导出;交接包明确固定来源并支持刷新。
11
+ - 检查器隐藏无内容或明确不适用的入口:单次执行不显示尝试对比,Shell/静态节点不显示实际上下文,静态节点不显示执行记录;切换节点与新增尝试时自动更新,保留用户当前的比较选择。
12
+ - 资源池筛选覆盖任务标题和全部任务区域,返回列表及历史分页保留阅读状态;重跑草稿和影响预览可恢复,结果不确定时原样重试已确认的请求,避免重复创建运行。
13
+ - 执行记录默认跟随最新内容;上翻自动暂停并出现对话式「回到底部」按钮,点击回到底部;历史记录保留阅读位置,终态运行同样可用。
14
+ - DAG 节点检查器仅对最新且仍运行的执行默认跟随;右下角显示阅读状态、新记录提示和“回到最新”,上翻即暂停。
8
15
 
9
- - 新增了本发布周期内已经完成并通过验证的功能。
16
+ ### 修复
10
17
 
11
- ### 改进
18
+ - 执行记录搜索直接高亮命中文字,标识当前跳转记录;未搜索或无匹配时禁用上下箭头,清空搜索恢复原文。
12
19
 
13
- - 完善了日常使用体验和运行稳定性。
20
+ - 恢复运行在导入节点缺少明确读取范围时阻断工作区漂移,避免复用受变更影响的旧结果;读取范围明确且不受影响时仍可按路径复用。
21
+ - 前端验证将子目录执行的 Vitest 报告统一为仓库相对路径,并对齐实际目录别名,避免已通过测试被误判为未执行;被筛除或失败的目标仍阻断。
14
22
 
15
- ### 修复
23
+ ## [0.42.0] - 2026-09-07
16
24
 
17
- - 修复了影响使用体验或运行稳定性的问题。
25
+ ### 重点更新
26
+
27
+ - **Operator Chat 内置只读 Explore 子 Agent**:主会话可通过 `Agent` 工具委派代码库搜索、符号查找和调用链追踪;子会话 Fresh、one-shot,只暴露 `find`/`ls`/`safe-*`/git 只读工具,父 Turn 停止时一并中止。工具目录中的 Explore 条目改由服务端 `builtinSubagents` 能力字段驱动,后端调整内置子代理时前端自动跟随。
28
+ - **前端实现 DAG 稳定性集中修复**:修复 Plan coverage 会话提前停止导致会话数翻倍(切片穷尽才算完成);修复重试梯级遮蔽修复指令(账本修复指引优先于 compact-terminal-first 话术);修复 Plan 按 AC 分片重复发明同一批需求(UX registry 先全局提交再单一会话建模);修复 design 拒绝后自动恢复子 run 无法启动(staging 正确物化拓扑绑定并继承 committed shape facts);修复自动恢复实际重跑整棵 DAG、忽略冻结 reset plan 的问题;`stopReason=length` 截断改判为专门的 `output-limit` 可重试类别,不再误判 `empty-output`;重试额度默认从 3 次提升到 5 次。
29
+ - **前端 verification contract v2**:plan 不再手写五值 `type`,改为引用生成期冻结命令目录的 `commandId`,`type: component + npm run build` 这类非法组合在 Plan 工具边界即被拒绝;冻结验证命令引用的基建文件(如 vitest 配置)确定性并入 writeSet admission 边界,writer 不再被具体 writeSet 拦住;Verify bundle 按工作目录和冻结命令去重,static/behavior/Mock/lint lane 复用相同命令结果。
30
+ - **backend-test 判定链修复**:N2 不再把 provider 长度截断的 Markdown 计划误判为 `FINISHED`(截断归 `output-too-large`、缺 heading 归 `invalid-output`,均有界 artifact-first retry);N3 以唯一合法 Markdown Path 为 canonical 模块身份(Stem 展示单元格只作冗余展示);唯一 pytest collection repair 缺 `IMPLEMENTATION_OUTCOME` 不再阻断整条执行链(确定性恢复为候选 changed 后仍走全部门禁)。
31
+ - **契约幂等与 DAG 恢复强化**:契约重复 prepare 做内容级 no-op 短路(投影与已记录契约及磁盘哈希一致时不递增 revision、不写事务、writeSet gate digest 绑定 hash 不变则继续有效——实测 8.6 小时流水线 7 次修订只有 3 个不同 hash);workspace-drift 细化为内容级逐路径对比(漂移全落在重跑子图自身 readSet/writeSet 内时放行);superseded run 可作为 `dag rerun --from-node` 的事实供体;DAG 退出诊断改用只读异常监视器。
32
+ - **工具入参预览放宽**:工具入参预览从 1200 字放宽到 4000 字(与会话结果落盘上限对齐),详情栏支持「展开全部」(可视高度最多 720px),Explore 等长 brief 不再被预览截断误导。
33
+
34
+ ### 改进
35
+
36
+ - 具备 Aimax 凭证的用户可在对话输入框使用 `/sdd-bingo` 完成 SDD 数据对齐;不指定名称时自动选择分析类别,成功提示显示实际使用的类别。
37
+ - 前端 Scout 在中高复杂度任务中并行收集 target surface 与 design evidence;大型 Plan 的 requirement coverage 按批次并行映射后按固定顺序归并。
38
+ - 前端 Micro/Small shape 路由不再把 `test/`、`e2e/`、`docs/` 等目录误计为业务跨域,局部 UI 改动正确命中轻量拓扑。
39
+ - 前端计划契约新增确定性锚定校验:behavior 验证目标必须引用 requirement,声明了 UI 状态/交互时必须引用已声明状态,缺失在 Plan 自修阶梯当场报错,不再烧一整轮 design-review。
40
+ - 可选依赖 `@agent-context/sift` 升级到 `0.0.1-alpha.7`(行级分片取回、更保守的纯文本压缩),回退开关与 init 投影不变。
41
+ - 修复 DAG Pi 扩展 resolver 无法解析版本 pin spec 的问题(`npm:pi-lens@3.8.72` 不再静默降级 `not-installed`)。
42
+ - 修复 `/inspect/*` 静态资源缺 Cache-Control 导致 Console 更新后挂旧版导航的问题(一律 `no-store`)。
43
+ - Next 发布测试升级 Vitest 4.1.11(worker RPC 修复,全绿测试不再因 `onTaskUpdate` 超时阻断发包)。
44
+ - 会话列表默认展示 5 条、展开收起更整齐;新建/删除对话即时反馈;发送消息立即显示;文件预览支持页面内交互与独立窗口阅读;执行记录默认跟随最新内容可暂停;模型配置更新后旧会话自动采用最新认证。
18
45
 
19
46
  ## [0.41.3] - 2026-09-04
20
47
 
@@ -13,6 +13,7 @@ export const campaignBudgetLimitsSchema = z
13
13
  maxTokens: z.number().int().positive().optional(),
14
14
  maxWallTimeMs: z.number().int().positive().optional(),
15
15
  maxExecutorCalls: z.number().int().positive().optional(),
16
+ maxProviderRequests: z.number().int().positive().optional(),
16
17
  maxRepairPasses: z.number().int().nonnegative().optional(),
17
18
  maxConcurrency: z.number().int().positive().optional(),
18
19
  maxContextChars: z.number().int().positive().optional(),
@@ -22,12 +23,13 @@ export const campaignBudgetLimitsSchema = z
22
23
  const hasHardDim = limits.maxTokens !== undefined ||
23
24
  limits.maxWallTimeMs !== undefined ||
24
25
  limits.maxExecutorCalls !== undefined ||
26
+ limits.maxProviderRequests !== undefined ||
25
27
  limits.maxRepairPasses !== undefined ||
26
28
  limits.maxContextChars !== undefined;
27
29
  if (!hasHardDim) {
28
30
  ctx.addIssue({
29
31
  code: z.ZodIssueCode.custom,
30
- message: "budget.limits requires at least one of maxTokens, maxWallTimeMs, maxExecutorCalls, maxRepairPasses, maxContextChars",
32
+ message: "budget.limits requires at least one of maxTokens, maxWallTimeMs, maxExecutorCalls, maxProviderRequests, maxRepairPasses, maxContextChars",
31
33
  });
32
34
  }
33
35
  });
@@ -47,6 +49,7 @@ export function createBudgetLedger(budget) {
47
49
  tokens: null,
48
50
  wallTimeMs: 0,
49
51
  executorCalls: 0,
52
+ ...(budget.mode === "hard" && budget.limits.maxProviderRequests !== undefined ? { providerRequests: 0 } : {}),
50
53
  repairPasses: 0,
51
54
  peakContextChars: 0,
52
55
  missingTokenNodeIds: [],
@@ -136,6 +139,19 @@ export function recordNodeBudgetSample(ledger, sample) {
136
139
  export function isHardBudgetBreached(ledger) {
137
140
  return Boolean(ledger && ledger.mode === "hard" && ledger.status === "breached");
138
141
  }
142
+ /** Reserve before dispatch. The caller must persist the shared ledger before granting admission. */
143
+ export function reserveProviderBudget(ledger, nodeId) {
144
+ if (ledger.limits.maxProviderRequests === undefined)
145
+ return undefined;
146
+ const used = ledger.consumed.providerRequests;
147
+ if (used === undefined || !Number.isInteger(used) || used < 0)
148
+ throw Error("FRONTEND_PROVIDER_BUDGET_INVALID: missing consumed provider requests");
149
+ const breach = checkLimit(ledger, "providerRequests", used, ledger.limits.maxProviderRequests, { nodeId, inclusive: true });
150
+ if (breach && ledger.mode === "hard")
151
+ return breach;
152
+ ledger.consumed.providerRequests = used + 1;
153
+ return undefined;
154
+ }
139
155
  /** Mark all PENDING nodes as SKIPPED due to budget breach (fail closed). */
140
156
  export function skipPendingNodesForBudgetBreach(nodes, breach) {
141
157
  const skipped = [];
@@ -165,6 +181,7 @@ export function formatBudgetReportMarkdown(ledger) {
165
181
  `| maxTokens | ${limits.maxTokens ?? "n/a"} |`,
166
182
  `| maxWallTimeMs | ${limits.maxWallTimeMs ?? "n/a"} |`,
167
183
  `| maxExecutorCalls | ${limits.maxExecutorCalls ?? "n/a"} |`,
184
+ `| maxProviderRequests | ${limits.maxProviderRequests ?? "n/a"} |`,
168
185
  `| maxRepairPasses | ${limits.maxRepairPasses ?? "n/a"} |`,
169
186
  `| maxConcurrency | ${limits.maxConcurrency ?? "n/a"} |`,
170
187
  `| maxContextChars | ${limits.maxContextChars ?? "n/a"} |`,
@@ -176,6 +193,7 @@ export function formatBudgetReportMarkdown(ledger) {
176
193
  `| tokens | ${c.tokens ?? "n/a (missing)"} |`,
177
194
  `| wallTimeMs | ${c.wallTimeMs} |`,
178
195
  `| executorCalls | ${c.executorCalls} |`,
196
+ `| providerRequests | ${c.providerRequests ?? "n/a"} |`,
179
197
  `| repairPasses | ${c.repairPasses} |`,
180
198
  `| peakContextChars | ${c.peakContextChars} |`,
181
199
  `| missingTokenNodes | ${c.missingTokenNodeIds.join(", ") || "none"} |`,
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "schemaVersion": 1,
3
- "version": "0.42.0",
4
- "gitSha": "d4c9130bf4feb25e4c120f97d29786dd48062cfd",
5
- "builtAt": "2026-09-07T01:59:32.047Z"
3
+ "version": "0.43.0-next.2",
4
+ "gitSha": "d9e11f1ac55b0bfff4b42fd43616810cf15bb575",
5
+ "builtAt": "2026-09-07T07:08:47.369Z"
6
6
  }