@tea-agent/loop-agent 0.28.5 → 0.28.7
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,27 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.28.7] - 2026-08-05
|
|
6
|
+
|
|
7
|
+
### 重点更新
|
|
8
|
+
|
|
9
|
+
- 修复 Night Scheduler 执行已准备好的 DAG 时因客户端超时中断任务的问题
|
|
10
|
+
|
|
11
|
+
### 修复
|
|
12
|
+
|
|
13
|
+
- Night Scheduler 执行已准备好的 DAG 时,`task advance --approve-gate` 改用 `timeoutMs: 0`,避免默认 120 秒超时在 DAG 仍在运行时将其强制终止,现由内核负责执行监督
|
|
14
|
+
|
|
15
|
+
## [0.28.6] - 2026-08-05
|
|
16
|
+
|
|
17
|
+
### 重点更新
|
|
18
|
+
|
|
19
|
+
- 修复 macOS 下 /tmp 路径别名导致 Night Scheduler 工作区隔离校验误报失败的问题
|
|
20
|
+
|
|
21
|
+
### 修复
|
|
22
|
+
|
|
23
|
+
- Night Scheduler 准入控制现使用 realpath 规范化控制目录与 worktree 路径,避免 macOS /tmp 别名引发隔离校验假失败
|
|
24
|
+
- Night Scheduler 准入事实仅冻结真实的仓库内相对 worktree 路径,提升隔离检查的准确性
|
|
25
|
+
|
|
5
26
|
## [0.28.5] - 2026-08-05
|
|
6
27
|
|
|
7
28
|
### 重点更新
|
|
@@ -65,6 +65,10 @@ export async function executePreparedTaskSpec(options) {
|
|
|
65
65
|
cwd: input.workspaceRoot,
|
|
66
66
|
artifactName: `night-execute-${input.workerRunId}`,
|
|
67
67
|
expectJson: true,
|
|
68
|
+
// Night prepared execute runs a full DAG under task advance; do not use
|
|
69
|
+
// the short LoopAgentClient default (120s). Zero disables client timeout
|
|
70
|
+
// so the DAG kernel owns long-running supervision (same as run-task).
|
|
71
|
+
timeoutMs: 0,
|
|
68
72
|
}));
|
|
69
73
|
const advanceResult = await advance({
|
|
70
74
|
workspaceRoot,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import { access, symlink, unlink } from "node:fs/promises";
|
|
1
|
+
import { access, realpath, symlink, unlink } from "node:fs/promises";
|
|
2
2
|
import path from "node:path";
|
|
3
3
|
import { ensureOwnedWorktree, verifyOwnedWorktree, } from "../../task/worktree.js";
|
|
4
4
|
import { getSchedulerRoot } from "./paths.js";
|
|
@@ -37,16 +37,21 @@ export async function prepareNightWorkspace(spec) {
|
|
|
37
37
|
if (spec.hydrateNodeModules !== false) {
|
|
38
38
|
nodeModulesLinked = await linkNodeModulesIfPresent(spec.controlRepoRoot, ensured.path);
|
|
39
39
|
}
|
|
40
|
-
|
|
40
|
+
// realpath both sides so macOS /tmp ↔ /private/tmp aliases do not look like escapes.
|
|
41
|
+
const controlResolved = await realpath(path.resolve(spec.controlRepoRoot)).catch(() => path.resolve(spec.controlRepoRoot));
|
|
42
|
+
const worktreeResolved = await realpath(path.resolve(ensured.path)).catch(() => path.resolve(ensured.path));
|
|
41
43
|
const relative = path
|
|
42
|
-
.relative(controlResolved,
|
|
44
|
+
.relative(controlResolved, worktreeResolved)
|
|
43
45
|
.split(path.sep)
|
|
44
46
|
.join("/") || relativeWorktreePath;
|
|
45
|
-
if (relative.
|
|
47
|
+
if (relative.length === 0 ||
|
|
48
|
+
relative.startsWith("..") ||
|
|
49
|
+
path.isAbsolute(relative)) {
|
|
46
50
|
throw new Error(`night worktree path must stay under control repo (.worktrees): ${ensured.path}`);
|
|
47
51
|
}
|
|
48
52
|
return {
|
|
49
53
|
...ensured,
|
|
54
|
+
path: worktreeResolved,
|
|
50
55
|
relativeWorktreePath: relative,
|
|
51
56
|
relativeBranch: branch,
|
|
52
57
|
nodeModulesLinked,
|