@tea-agent/loop-agent 0.16.8 → 0.16.9

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
@@ -18,6 +18,12 @@
18
18
  - Pi SDK 执行长推理或大段结构化输出时不再把高频流式增量事件无界累积到内存;同一响应在多个生命周期事件中重复出现的 Token 用量只统计一次,避免 `Invalid string length` 和成本数据虚高。
19
19
  - 后端测试复合执行节点继续保持 clean environment、失败分类和 fail-closed outcome,并为 initial/final Result、repair eligibility、traceability 与 Observe 投影保留结构化运行证据。
20
20
 
21
+ ## [0.16.9] - 2026-07-20
22
+
23
+ ### 修复
24
+
25
+ - Outcome 结构化产物声明不再绑定节点 mint-time sha256;同一路径若被后续 gate(如 backend-test traceability)就地改写,投影时以磁盘重算 hash 为准,消除 BE-TEST 完成态仍被 `artifact sha256 mismatch` 误拦。
26
+
21
27
  ## [0.16.8] - 2026-07-20
22
28
 
23
29
  ### 修复
@@ -10,6 +10,8 @@ import { assertExecPlanIndexConsistent } from "../../governance/exec-plans.js";
10
10
  import { defaultHybridDagOutputPath, initHybridDagFromTask, } from "../../workflows/dag/init-hybrid.js";
11
11
  import { validateDagUseCase } from "./validate-dag.js";
12
12
  import { runDagUseCase } from "./run-dag.js";
13
+ import { loadTaskConfig } from "../../task/runtime.js";
14
+ import { writeTaskConfig } from "../../infrastructure/harness/task-store.js";
13
15
  const PLACEHOLDER_WRITESET_MARKER = "REPLACE/WITH";
14
16
  function buildValidateInput(repoRoot, dagPath, parsed) {
15
17
  return {
@@ -233,6 +235,19 @@ export async function generateTaskDagUseCase(input) {
233
235
  profileRouting.selectedByProfile = parsed.profile;
234
236
  }
235
237
  }
238
+ // Persist only a safe automatic route. Explicit supervised/profile policy
239
+ // must remain authoritative and must not be weakened by this convenience
240
+ // marker. Keep taskId stable; frontend-implementation is the taskKind.
241
+ if (hasSafeAutomaticTaskSourceRoute && candidateResult.template === "frontend-implementation") {
242
+ const taskConfig = await loadTaskConfig(repoRoot, parsed.taskId);
243
+ if (!taskConfig.taskKind || taskConfig.taskKind === "standard") {
244
+ await writeTaskConfig(repoRoot, parsed.taskId, {
245
+ ...taskConfig,
246
+ taskKind: "frontend-implementation",
247
+ dagFallbackReason: "Automatically classified as a high-confidence frontend implementation task.",
248
+ });
249
+ }
250
+ }
236
251
  const initResult = profileRouting.selectedTemplate === candidateResult.template
237
252
  ? candidateResult
238
253
  : await initHybridDagFromTask(repoRoot, parsed.taskId, {
@@ -51,9 +51,12 @@ function structuredArtifactsFromReport(run) {
51
51
  }
52
52
  const identity = splitStructuredArtifactIdentity(node.structuredArtifactSchemaId);
53
53
  const pathKey = node.structuredArtifactPath.replace(/\\/g, "/");
54
+ // Leave sha256 empty: later DAG nodes (e.g. backend-test traceability)
55
+ // may rewrite the same run-owned path in place, invalidating the mint-time
56
+ // structuredArtifactSha256. Projector re-hashes the file on disk.
54
57
  byPath.set(pathKey, {
55
58
  path: pathKey,
56
- sha256: node.structuredArtifactSha256,
59
+ sha256: "",
57
60
  kind: identity.kind,
58
61
  schemaId: identity.schemaId,
59
62
  });
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@tea-agent/loop-agent",
3
- "version": "0.16.8",
3
+ "version": "0.16.9",
4
4
  "type": "module",
5
5
  "bin": {
6
6
  "loop-agent": "bin/loop-agent.js",