@tea-agent/loop-agent 0.42.0-next.3 → 0.42.0-next.4
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
CHANGED
|
@@ -2,6 +2,8 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
- 修复 Next Release 的 io-heavy 测试并发不稳定:发布 workflow 将该池固定为单 worker,避免全部测试已通过后触发 Vitest `onTaskUpdate` RPC settlement timeout,并消除 controller identity/package fingerprint 测试之间的共享状态竞态;不跳过或删除任何测试。
|
|
6
|
+
- 修复 backend-test 唯一 pytest collection repair 已产生受控非空修改、却因模型遗漏 `IMPLEMENTATION_OUTCOME` 而阻断整条执行链的问题:仅 N11 exact repair writer 可把完全缺失的 outcome 确定性恢复为候选 changed,随后仍必须由 N12 重新通过 scenario、correspondence、payload、collection、fixture 和 readiness 门禁;unknown/conflicting/blocked、空 diff、越界写入及 provider/context failure 继续 fail-closed。
|
|
5
7
|
- 修复前端任务产物派生续跑无法识别当前节点链的问题;从实现节点继续时,设计约束、写入准入、验证和收尾步骤会按现行流程安全重放。
|
|
6
8
|
- 统一工作区、Todo 和其他滚动区域的滚动条样式,默认更轻巧,鼠标悬浮时也更容易辨认。
|
|
7
9
|
- HTML 文件预览现在支持页面内的标签切换等交互;较大的自包含 HTML 可以在新窗口中直接完整加载,不再受源码摘要长度影响。
|
package/dist/build-stamp.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"schemaVersion": 1,
|
|
3
|
-
"version": "0.42.0-next.
|
|
4
|
-
"gitSha": "
|
|
5
|
-
"builtAt": "2026-09-
|
|
3
|
+
"version": "0.42.0-next.4",
|
|
4
|
+
"gitSha": "67e59744bed3b112db83511b2d330b46a9caeb4e",
|
|
5
|
+
"builtAt": "2026-09-01T05:04:11.489Z"
|
|
6
6
|
}
|
|
@@ -17,7 +17,7 @@ import { GitStatusUnavailableError, pathsChangedDuringRun, readGitStatusPorcelai
|
|
|
17
17
|
import { captureWorkspaceWriteSnapshot, diffWorkspaceWriteSnapshots, } from "./workspace-write-snapshot.js";
|
|
18
18
|
import { pathMatchesPattern } from "../shared/git-progress.js";
|
|
19
19
|
import { isTargetTemplateTransientRetryNode, isWriterEmptyDiffRetryCandidate, isWriterTransportRetryCandidate, INCOMPLETE_WRITE_SET_RETRY_CATEGORY, WRITER_CLEAN_TIMEOUT_RETRY_CATEGORY, WRITER_EMPTY_DIFF_RETRY_CATEGORY, } from "../workflows/dag/retry-policy.js";
|
|
20
|
-
import { assessBackendTestMdPlanCompleteness, assessBackendTestMdWriterCompleteness, assessBackendTestPytestPlanCompleteness, assessBackendTestPytestWriterCompleteness, assessBackendTestShardChildCompleteness, backendTestWriterProgressRoleForTask, classifyBackendTestWriterCompletenessFailure, isBackendTestCompletenessRetryCandidate, isBackendTestMdPlanTask, isBackendTestPytestPlanTask, isBackendTestShardChildTask, writeBackendTestWriterProgressArtifacts, } from "../workflows/dag/backend-test-writer-completeness.js";
|
|
20
|
+
import { assessBackendTestMdPlanCompleteness, assessBackendTestMdWriterCompleteness, assessBackendTestPytestPlanCompleteness, assessBackendTestPytestWriterCompleteness, assessBackendTestShardChildCompleteness, backendTestWriterProgressRoleForTask, classifyBackendTestWriterCompletenessFailure, isBackendTestCompletenessRetryCandidate, isBackendTestMdPlanTask, isBackendTestPytestCollectionRepairOutcomeRecoveryCandidate, isBackendTestPytestPlanTask, isBackendTestShardChildTask, writeBackendTestWriterProgressArtifacts, } from "../workflows/dag/backend-test-writer-completeness.js";
|
|
21
21
|
import { resolveBackendTestLayout } from "../workflows/dag/backend-test-layout.js";
|
|
22
22
|
import { frontendTestLayoutFromSpec } from "../workflows/dag/frontend-test-layout.js";
|
|
23
23
|
import { redactSecrets, truncateUtf8Preview } from "../shared/preview.js";
|
|
@@ -40,6 +40,10 @@ export const WRITER_THINKING_EXHAUSTED_CATEGORY = "writer-thinking-exhausted";
|
|
|
40
40
|
export const WRITER_BUDGET_EXHAUSTED_CATEGORY = "writer-budget-exhausted";
|
|
41
41
|
/** Token ceiling for a single writer node before it is judged budget-exhausted. */
|
|
42
42
|
export const WRITER_TOKEN_BUDGET = 2_000_000;
|
|
43
|
+
export function allowsMissingChangedWriterOutcomeRecovery(task) {
|
|
44
|
+
return (isBackendTestCompletenessRetryCandidate(task) ||
|
|
45
|
+
isBackendTestPytestCollectionRepairOutcomeRecoveryCandidate(task));
|
|
46
|
+
}
|
|
43
47
|
function readWriterThinkingExhaustionEvidence(result) {
|
|
44
48
|
const wider = result;
|
|
45
49
|
return {
|
|
@@ -4456,7 +4460,7 @@ export async function executeDagPiNode(input, meta, piStepFn = executePiStep, wr
|
|
|
4456
4460
|
else {
|
|
4457
4461
|
const outcomeValidation = validateWriterImplementationOutcome(mapped.assistantText || mapped.stdout, changeManifestChangedFiles, {
|
|
4458
4462
|
requireChangedFiles: input.task.writerOutcomePolicy.requireChangedFiles === true,
|
|
4459
|
-
allowMissingChangedOutcomeWhenDiffPresent:
|
|
4463
|
+
allowMissingChangedOutcomeWhenDiffPresent: allowsMissingChangedWriterOutcomeRecovery(input.task),
|
|
4460
4464
|
});
|
|
4461
4465
|
if (!outcomeValidation.ok) {
|
|
4462
4466
|
writerOutcomeViolation = outcomeValidation.reason;
|
|
@@ -904,6 +904,16 @@ export async function writeBackendTestWriterProgressArtifacts(input) {
|
|
|
904
904
|
await writeFile(reportPath, body, "utf8");
|
|
905
905
|
return { factsPath, reportPath };
|
|
906
906
|
}
|
|
907
|
+
export function isBackendTestPytestCollectionRepairOutcomeRecoveryCandidate(task) {
|
|
908
|
+
return (task.id === "repair-backend-pytest-collection-pi" &&
|
|
909
|
+
task.executor === "pi" &&
|
|
910
|
+
task.role === "implementer" &&
|
|
911
|
+
task.toolProfile === "write" &&
|
|
912
|
+
task.writePolicy === "exclusive" &&
|
|
913
|
+
(task.writeSet?.length ?? 0) > 0 &&
|
|
914
|
+
task.writerOutcomePolicy?.type === "implementation-outcome-v1" &&
|
|
915
|
+
task.writerOutcomePolicy.requireChangedFiles === true);
|
|
916
|
+
}
|
|
907
917
|
export function isBackendTestCompletenessRetryCandidate(task) {
|
|
908
918
|
if (task.executor !== "pi" || task.role !== "implementer")
|
|
909
919
|
return false;
|
|
@@ -175,7 +175,9 @@
|
|
|
175
175
|
"rate-limit",
|
|
176
176
|
"unavailable",
|
|
177
177
|
"empty-output",
|
|
178
|
-
"output-too-large"
|
|
178
|
+
"output-too-large",
|
|
179
|
+
"read-burst",
|
|
180
|
+
"context-overflow"
|
|
179
181
|
]
|
|
180
182
|
}
|
|
181
183
|
},
|
|
@@ -325,7 +327,8 @@
|
|
|
325
327
|
"initialDelayMs": 5000,
|
|
326
328
|
"maxDelayMs": 30000,
|
|
327
329
|
"retryCategories": [
|
|
328
|
-
"writer-clean-timeout"
|
|
330
|
+
"writer-clean-timeout",
|
|
331
|
+
"context-overflow"
|
|
329
332
|
]
|
|
330
333
|
}
|
|
331
334
|
},
|