@zhushanwen/subagent-core 0.7.1 → 0.9.0
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/dist/{chunk-VURUAGMM.js → chunk-LZJOEDGQ.js} +603 -154
- package/dist/engine-discovery-scan-Da4Dkzsi.d.cts +818 -0
- package/dist/engine-discovery-scan-Da4Dkzsi.d.ts +818 -0
- package/dist/execution/engine/engine-discovery-scan.cjs +325 -154
- package/dist/execution/engine/engine-discovery-scan.d.cts +1 -2
- package/dist/execution/engine/engine-discovery-scan.d.ts +1 -2
- package/dist/execution/engine/engine-discovery-scan.js +1 -1
- package/dist/execution/relay-env.js +5 -4
- package/dist/index.cjs +9799 -7954
- package/dist/index.d.cts +1896 -1360
- package/dist/index.d.ts +1896 -1360
- package/dist/index.js +8952 -7513
- package/dist.bundle/index.cjs +7897 -6054
- package/package.json +5 -5
- package/src/__tests__/manifest-store.test.ts +16 -15
- package/src/__tests__/record-store-last-line.test.ts +12 -0
- package/src/__tests__/robustness-medium-batch1.test.ts +10 -14
- package/src/__tests__/robustness-medium-batch2.test.ts +7 -2
- package/src/core/logger.ts +1 -1
- package/src/execution/__tests__/alive-store.test.ts +117 -1
- package/src/execution/__tests__/batch-finalized.test.ts +206 -0
- package/src/execution/__tests__/chat-engine-routing.test.ts +117 -1
- package/src/execution/__tests__/{cold-resurrect.test.ts → cold-lookup.test.ts} +133 -33
- package/src/execution/__tests__/collect-coordinator-service.test.ts +7 -5
- package/src/execution/__tests__/conversation-continuation.test.ts +1452 -0
- package/src/execution/__tests__/delivery-methods.test.ts +90 -176
- package/src/execution/__tests__/dialog-queue.test.ts +70 -3
- package/src/execution/__tests__/dispose-manifest-recovery.test.ts +475 -0
- package/src/execution/__tests__/execute-and-await-worktree.test.ts +3 -3
- package/src/execution/__tests__/execute-nesting.test.ts +8 -5
- package/src/execution/__tests__/execution-record.test.ts +8 -148
- package/src/execution/__tests__/finalize-record.test.ts +295 -129
- package/src/execution/__tests__/get-record-for-action-restart.test.ts +21 -29
- package/src/execution/__tests__/helpers/fake-engine-port.ts +13 -68
- package/src/execution/__tests__/helpers/legacy-sidecar.ts +33 -0
- package/src/execution/__tests__/helpers/subagent-service-mocks.ts +9 -5
- package/src/execution/__tests__/idle-gc.test.ts +60 -0
- package/src/execution/__tests__/inflight-production-wiring.test.ts +223 -0
- package/src/execution/__tests__/lifecycle-manager.test.ts +3 -254
- package/src/execution/__tests__/manifest-store-tmp-recovery.test.ts +43 -22
- package/src/execution/__tests__/model-config-service.test.ts +111 -0
- package/src/execution/__tests__/nested-visibility-env-propagation.test.ts +10 -6
- package/src/execution/__tests__/nested-visibility.test.ts +13 -1
- package/src/execution/__tests__/notify-ledger.test.ts +42 -1
- package/src/execution/__tests__/rebuild-indexes.test.ts +329 -0
- package/src/execution/__tests__/record-binding.test.ts +613 -0
- package/src/execution/__tests__/record-origin.test.ts +318 -0
- package/src/execution/__tests__/record-store-intent-api.test.ts +600 -0
- package/src/execution/__tests__/record-store-orphan-revive.test.ts +71 -3
- package/src/execution/__tests__/record-store.test.ts +72 -54
- package/src/execution/__tests__/recursive-visibility-baseline.test.ts +8 -5
- package/src/execution/__tests__/round-supervisor-workflow-origin.test.ts +205 -0
- package/src/execution/__tests__/run-orchestration-write-lease.test.ts +293 -0
- package/src/execution/__tests__/run-orchestration.test.ts +199 -0
- package/src/execution/__tests__/session-file-gc.test.ts +35 -4
- package/src/execution/__tests__/session-reconstructor.test.ts +78 -0
- package/src/execution/__tests__/state-marker.test.ts +288 -0
- package/src/execution/__tests__/stream-sink-retirement.test.ts +8 -5
- package/src/execution/__tests__/subagent-actions-core.test.ts +67 -16
- package/src/execution/__tests__/subagent-service-multiproc-guard.test.ts +0 -1
- package/src/execution/__tests__/subagent-service-notify-gate.test.ts +27 -11
- package/src/execution/__tests__/subagent-service-parent-guard.test.ts +17 -11
- package/src/execution/__tests__/subagent-service-recovery-bounds.test.ts +130 -53
- package/src/execution/__tests__/subagent-service.test.ts +17 -215
- package/src/execution/__tests__/subprocess-agent-runner-no-progress-killall.test.ts +138 -0
- package/src/execution/__tests__/subprocess-agent-runner.test.ts +105 -660
- package/src/execution/__tests__/sync-collect-recovery.test.ts +23 -16
- package/src/execution/__tests__/terminal-write-latency.test.ts +79 -0
- package/src/execution/__tests__/workflow-agent-dispatch.test.ts +782 -0
- package/src/execution/alive-store.ts +37 -28
- package/src/execution/{cold-resurrect.ts → cold-lookup.ts} +48 -45
- package/src/execution/config.ts +1 -1
- package/src/execution/conversation-continuation.ts +541 -0
- package/src/execution/dialog-queue.ts +60 -12
- package/src/execution/engine/__tests__/common/capability-gate.test.ts +1 -1
- package/src/execution/engine/__tests__/common/journal-wiring.test.ts +16 -1
- package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/fake-engine-protocol.mjs +17 -51
- package/src/execution/engine/__tests__/conformance/__fixtures__/engine-protocol/smoke-run.fixture.json +0 -5
- package/src/execution/engine/__tests__/conformance/engine-conformance.live.test.ts +1 -1
- package/src/execution/engine/__tests__/conformance/protocol-blackbox.test.ts +5 -9
- package/src/execution/engine/__tests__/conformance/registry-fork-filter.test.ts +55 -53
- package/src/execution/engine/__tests__/engine-discovery-scan.test.ts +0 -3
- package/src/execution/engine/__tests__/engine-discovery.test.ts +0 -3
- package/src/execution/engine/__tests__/inflight-snapshot.test.ts +180 -0
- package/src/execution/engine/__tests__/model-prompt.test.ts +0 -3
- package/src/execution/engine/__tests__/registry.test.ts +0 -1
- package/src/execution/engine/__tests__/routing.test.ts +0 -1
- package/src/execution/engine/__tests__/run-failure-worktree-cleanup.test.ts +0 -3
- package/src/execution/engine/client/__tests__/__fixtures__/fake-engine.mjs +0 -3
- package/src/execution/engine/client/__tests__/engine-client-reap.test.ts +212 -0
- package/src/execution/engine/client/__tests__/mirror.test.ts +73 -1
- package/src/execution/engine/client/__tests__/protocol-closure.test.ts +2 -9
- package/src/execution/engine/client/__tests__/remote-engine.test.ts +46 -12
- package/src/execution/engine/client/engine-client.ts +111 -26
- package/src/execution/engine/client/mirror.ts +9 -0
- package/src/execution/engine/client/remote-engine.ts +52 -34
- package/src/execution/engine/client/reverse-router.ts +6 -27
- package/src/execution/engine/common/__tests__/run-signals.test.ts +79 -0
- package/src/execution/engine/common/capability-gate.ts +27 -0
- package/src/execution/engine/common/data-dir.ts +3 -2
- package/src/execution/engine/common/errors.ts +1 -1
- package/src/execution/engine/common/journal-wiring.ts +18 -9
- package/src/execution/engine/common/run-signals.ts +83 -0
- package/src/execution/engine/d8-compat.ts +1 -1
- package/src/execution/engine/host/__tests__/host-bridge.test.ts +3 -18
- package/src/execution/engine/host/host-bridge.ts +26 -41
- package/src/execution/engine/host/pi-host-binding.ts +5 -5
- package/src/execution/engine/host/spawned-children.ts +1 -1
- package/src/execution/engine/inflight-snapshot.ts +92 -0
- package/src/execution/engine/port.ts +52 -54
- package/src/execution/engine/types.ts +11 -14
- package/src/execution/execution-record.ts +15 -47
- package/src/execution/finalize-record.ts +94 -197
- package/src/execution/idle-gc.ts +9 -3
- package/src/execution/lifecycle-manager.ts +25 -361
- package/src/execution/lifecycle-predicates.ts +22 -19
- package/src/execution/manifest-store.ts +40 -42
- package/src/execution/model-config-service.ts +1 -1
- package/src/execution/notifier.ts +39 -1
- package/src/execution/notify-host.ts +13 -4
- package/src/execution/path-encoding.ts +6 -0
- package/src/execution/record-entry.ts +20 -2
- package/src/execution/record-store.ts +925 -160
- package/src/execution/relay-env.ts +8 -3
- package/src/execution/round-supervisor/domain.ts +17 -5
- package/src/execution/round-supervisor/service-binding.test.ts +89 -53
- package/src/execution/round-supervisor/service-binding.ts +71 -21
- package/src/execution/round-supervisor/supervisor.ts +23 -9
- package/src/execution/service/record-access.ts +547 -0
- package/src/execution/service/record-lifecycle.ts +542 -0
- package/src/execution/service/run-orchestration.ts +1647 -0
- package/src/execution/service/service-bootstrap.ts +111 -0
- package/src/execution/service/service-constants.ts +27 -0
- package/src/execution/service/session-baselines.ts +401 -0
- package/src/execution/service/sync-collect-domain.ts +442 -0
- package/src/execution/service/workflow-dispatch.ts +567 -0
- package/src/execution/session-file-gc.ts +11 -8
- package/src/execution/session-reconstructor.ts +44 -1
- package/src/execution/sessions-index.ts +20 -3
- package/src/execution/settled-watchdog.ts +86 -43
- package/src/execution/state-marker.ts +516 -0
- package/src/execution/stream-sink.ts +1 -1
- package/src/execution/subagent-actions-core.ts +53 -31
- package/src/execution/subagent-service.ts +643 -2955
- package/src/execution/subprocess-agent-runner.ts +46 -323
- package/src/execution/types.ts +60 -43
- package/src/execution/ui-request-handler-factory.ts +5 -0
- package/src/execution/worktree-manager.ts +1 -1
- package/src/execution/worktree-registry.ts +12 -8
- package/src/index.ts +16 -5
- package/src/orchestration/__tests__/agent-call-catch-fallback.test.ts +2 -3
- package/src/orchestration/__tests__/agent-call-stream.test.ts +24 -49
- package/src/orchestration/__tests__/error-recovery-terminal-hardening.test.ts +4 -4
- package/src/orchestration/__tests__/file-run-store.test.ts +5 -7
- package/src/orchestration/__tests__/lifecycle-abort-broadcast-signal.test.ts +2 -3
- package/src/orchestration/__tests__/run-snapshot.test.ts +27 -43
- package/src/orchestration/__tests__/worker-message-pump-workflow-dispatch.test.ts +274 -0
- package/src/orchestration/execute-agent-call.ts +1 -1
- package/src/orchestration/file-run-store.ts +1 -1
- package/src/orchestration/models/ports.ts +20 -13
- package/src/orchestration/models/types.ts +11 -13
- package/src/orchestration/run-snapshot.ts +18 -22
- package/src/orchestration/worker-message-pump.ts +33 -57
- package/src/shared/atomic-write.ts +10 -8
- package/dist/chunk-T2SYBW3I.js +0 -24
- package/dist/engine-discovery-scan-ocpM8FmI.d.cts +0 -1608
- package/dist/engine-discovery-scan-ocpM8FmI.d.ts +0 -1608
- package/src/execution/__tests__/chat-round-first-round-watchdog.test.ts +0 -255
- package/src/execution/__tests__/finalized-marker.test.ts +0 -104
- package/src/execution/__tests__/lifecycle-manager-lock.test.ts +0 -211
- package/src/execution/__tests__/subprocess-agent-runner-routing.test.ts +0 -488
- package/src/execution/__tests__/subprocess-agent-runner-timeout.test.ts +0 -75
- package/src/execution/__tests__/tombstone-store.test.ts +0 -73
- package/src/execution/engine/__tests__/conformance/chat-round-protocol.test.ts +0 -230
- package/src/execution/finalized-marker.ts +0 -70
- package/src/execution/tombstone-store.ts +0 -72
|
@@ -10,12 +10,10 @@ import {
|
|
|
10
10
|
getCurrentActivity,
|
|
11
11
|
getEventLog,
|
|
12
12
|
getFullText,
|
|
13
|
-
getFullTextFrom,
|
|
14
13
|
getTotalUsage,
|
|
15
14
|
jsonlToAgentEvent,
|
|
16
15
|
markReconstructedStatus,
|
|
17
16
|
resurrectClosed,
|
|
18
|
-
nextRoundBaseTurnIndex,
|
|
19
17
|
deriveOutcome,
|
|
20
18
|
projectOutcome,
|
|
21
19
|
project,
|
|
@@ -589,150 +587,9 @@ describe("getFullText", () => {
|
|
|
589
587
|
});
|
|
590
588
|
|
|
591
589
|
// ============================================================
|
|
592
|
-
// getFullTextFrom
|
|
593
|
-
|
|
594
|
-
|
|
595
|
-
it("C1TC2: from=0 与 getFullText 逐字节等价(fresh / 单 turn / 多 turn 混空 turn 三形态)", () => {
|
|
596
|
-
// 形态 1:fresh record(turns=[emptyTurn()])
|
|
597
|
-
const fresh = makeRecord();
|
|
598
|
-
expect(getFullTextFrom(fresh, 0)).toBe(getFullText(fresh));
|
|
599
|
-
expect(getFullTextFrom(fresh, 0)).toBe("");
|
|
600
|
-
|
|
601
|
-
// 形态 2:单 turn 有文本
|
|
602
|
-
const single = makeRecord();
|
|
603
|
-
updateFromEvent(single, { type: "text_delta", delta: "Hello world" });
|
|
604
|
-
expect(getFullTextFrom(single, 0)).toBe(getFullText(single));
|
|
605
|
-
expect(getFullTextFrom(single, 0)).toBe("Hello world");
|
|
606
|
-
|
|
607
|
-
// 形态 3:多 turn 混空 turn(closed 空 turn + 空白串 turn + 未闭合尾 turn)
|
|
608
|
-
const mixed = makeRecord();
|
|
609
|
-
updateFromEvent(mixed, { type: "text_delta", delta: "Turn 1" });
|
|
610
|
-
updateFromEvent(mixed, { type: "turn_end" });
|
|
611
|
-
updateFromEvent(mixed, { type: "turn_end" }); // 空 turn 2(closed)
|
|
612
|
-
updateFromEvent(mixed, { type: "text_delta", delta: " " }); // 空白串 turn 3
|
|
613
|
-
updateFromEvent(mixed, { type: "turn_end" });
|
|
614
|
-
updateFromEvent(mixed, { type: "text_delta", delta: "Turn 4" }); // 未闭合尾 turn
|
|
615
|
-
expect(getFullTextFrom(mixed, 0)).toBe(getFullText(mixed));
|
|
616
|
-
expect(getFullTextFrom(mixed, 0)).toBe("Turn 1\n\n \n\nTurn 4");
|
|
617
|
-
});
|
|
618
|
-
|
|
619
|
-
it("C1TC3: 多 turn 单轮增量——from=1 只含 Turn 2,对照全量含 Turn 1\\n\\nTurn 2", () => {
|
|
620
|
-
const r = makeRecord();
|
|
621
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 1" });
|
|
622
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
623
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 2" });
|
|
624
|
-
expect(getFullTextFrom(r, 1)).toBe("Turn 2");
|
|
625
|
-
// 对照:全量 vs 增量差异锁定
|
|
626
|
-
expect(getFullText(r)).toBe("Turn 1\n\nTurn 2");
|
|
627
|
-
});
|
|
628
|
-
|
|
629
|
-
it("C1TC4: 空文本轮过滤(join 不多出空段)+ 空白串按非空计入增量", () => {
|
|
630
|
-
// turns: ["A"(closed), ""(closed), " "(closed), "B"(open)]
|
|
631
|
-
const r = makeRecord();
|
|
632
|
-
updateFromEvent(r, { type: "text_delta", delta: "A" });
|
|
633
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
634
|
-
updateFromEvent(r, { type: "turn_end" }); // 空 turn(closed)
|
|
635
|
-
updateFromEvent(r, { type: "text_delta", delta: " " });
|
|
636
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
637
|
-
updateFromEvent(r, { type: "text_delta", delta: "B" });
|
|
638
|
-
// from=2 起:空 turn 在 from 之前不参与;" " 按非空处理计入增量(filter 判据与 getFullText 逐字对齐)
|
|
639
|
-
expect(getFullTextFrom(r, 2)).toBe(" \n\nB");
|
|
640
|
-
// 空 turn 过滤:from=0 时不产出空段(join 不多出 \n\n 空段)
|
|
641
|
-
expect(getFullTextFrom(r, 0)).toBe("A\n\n \n\nB");
|
|
642
|
-
});
|
|
643
|
-
|
|
644
|
-
it("C1TC5: from >= turns.length 越界返回空串(不抛错、不回绕)", () => {
|
|
645
|
-
const r = makeRecord();
|
|
646
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 1" });
|
|
647
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
648
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 2" });
|
|
649
|
-
expect(getFullTextFrom(r, r.turns.length)).toBe("");
|
|
650
|
-
expect(getFullTextFrom(r, r.turns.length + 5)).toBe("");
|
|
651
|
-
});
|
|
652
|
-
|
|
653
|
-
it("C1TC6: from 为负规范化为 0(与 from=0 / getFullText 等价,无 slice 负偏移语义)", () => {
|
|
654
|
-
const r = makeRecord();
|
|
655
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 1" });
|
|
656
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
657
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 2" });
|
|
658
|
-
expect(getFullTextFrom(r, -1)).toBe(getFullTextFrom(r, 0));
|
|
659
|
-
expect(getFullTextFrom(r, -100)).toBe(getFullText(r));
|
|
660
|
-
expect(getFullTextFrom(r, -100)).toBe("Turn 1\n\nTurn 2");
|
|
661
|
-
});
|
|
662
|
-
});
|
|
663
|
-
|
|
664
|
-
// ============================================================
|
|
665
|
-
// nextRoundBaseTurnIndex — 轮次边界推进公式(round-base-increment wave1)
|
|
666
|
-
// ============================================================
|
|
667
|
-
describe("nextRoundBaseTurnIndex", () => {
|
|
668
|
-
it("C1TC7: 全闭合推进 length / fresh record([emptyTurn()] 单未闭合空 turn)返回 0", () => {
|
|
669
|
-
// 全闭合:2 个 closed turn → length
|
|
670
|
-
const r = makeRecord();
|
|
671
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 1" });
|
|
672
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
673
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 2" });
|
|
674
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
675
|
-
expect(r.turns.length).toBe(2);
|
|
676
|
-
expect(nextRoundBaseTurnIndex(r)).toBe(2);
|
|
677
|
-
|
|
678
|
-
// fresh 形态(createRecord:turns=[emptyTurn()] 单个未闭合空 turn)→ 0(ES6 重建回退语义)
|
|
679
|
-
const fresh = createRecord("fresh-1", {
|
|
680
|
-
agent: "worker",
|
|
681
|
-
model: "test-model",
|
|
682
|
-
thinkingLevel: undefined,
|
|
683
|
-
mode: "background",
|
|
684
|
-
task: "t",
|
|
685
|
-
slug: "t",
|
|
686
|
-
startedAt: 1000,
|
|
687
|
-
rootSessionId: "sess-main",
|
|
688
|
-
parentRecordId: undefined,
|
|
689
|
-
depth: 0,
|
|
690
|
-
});
|
|
691
|
-
expect(fresh.turns).toHaveLength(1);
|
|
692
|
-
expect(nextRoundBaseTurnIndex(fresh)).toBe(0);
|
|
693
|
-
});
|
|
694
|
-
|
|
695
|
-
it("C1TC8 ⛔ ES1 探针: 滞后空 turn(防御分支)边界不丢下轮首段文本", () => {
|
|
696
|
-
// 防御分支构造(pi 现事件序下不可达——带 usage 的 message_end 恒先于 turn_end;探针
|
|
697
|
-
// 按防御分支构造仍有效,锁住公式在滞后交错下的正确性,防 pi 未来事件序变化)。
|
|
698
|
-
// 两层 usage 守卫:session-runner.ts 转发层 if (msg?.usage)(bare message_end 不转发)
|
|
699
|
-
// + execution-record.ts 累积层 if (event.usage)(bare message_end 不开 turn)——
|
|
700
|
-
// 故本探针的 message_end 必须携带 usage(如 { input: 10, output: 5, cacheRead: 0, cacheWrite: 0 })才能开出空 turn。
|
|
701
|
-
const r = makeRecord();
|
|
702
|
-
updateFromEvent(r, { type: "text_delta", delta: "R1" });
|
|
703
|
-
updateFromEvent(r, { type: "turn_end" }); // 闭合本轮
|
|
704
|
-
updateFromEvent(r, {
|
|
705
|
-
type: "message_end",
|
|
706
|
-
usage: { input: 10, output: 5, cacheRead: 0, cacheWrite: 0 },
|
|
707
|
-
}); // 滞后 message_end 开新空 turn
|
|
708
|
-
expect(r.turns.length).toBe(2);
|
|
709
|
-
expect(r.turns[1]!.closed).toBe(false);
|
|
710
|
-
expect(r.turns[1]!.text).toBe("");
|
|
711
|
-
|
|
712
|
-
// 推进:滞后空 turn 不计入边界(turns.length - 1,留在下一轮增量内)
|
|
713
|
-
const base = nextRoundBaseTurnIndex(r);
|
|
714
|
-
expect(base).toBe(1);
|
|
715
|
-
|
|
716
|
-
// 新轮 text_delta 复用该空 turn → 文本落在增量范围内,不丢
|
|
717
|
-
updateFromEvent(r, { type: "text_delta", delta: "R2" });
|
|
718
|
-
expect(r.turns.length).toBe(2); // 复用,未新开
|
|
719
|
-
expect(getFullTextFrom(r, base)).toBe("R2");
|
|
720
|
-
|
|
721
|
-
// 对照组:若直用 turns.length 推进,R2 被挤出 slice——被防住的丢文本负面行为锁定
|
|
722
|
-
expect(getFullTextFrom(r, r.turns.length)).toBe("");
|
|
723
|
-
});
|
|
724
|
-
|
|
725
|
-
it("C1TC9: 末 turn 未闭合且非空计入本轮(防御形态公式锁定,R1 观测哨触发条件)", () => {
|
|
726
|
-
// pi 现序不可达(agent_settled 在 agent_end 之后,error/aborted 也先 emit turn_end);
|
|
727
|
-
// 构造该防御形态锁死公式行为:非空文本计入本轮增量、不 defer 到下轮。
|
|
728
|
-
const r = makeRecord();
|
|
729
|
-
updateFromEvent(r, { type: "text_delta", delta: "Turn 1" });
|
|
730
|
-
updateFromEvent(r, { type: "turn_end" });
|
|
731
|
-
updateFromEvent(r, { type: "text_delta", delta: "Unclosed tail" }); // 未闭合非空尾 turn
|
|
732
|
-
expect(nextRoundBaseTurnIndex(r)).toBe(r.turns.length);
|
|
733
|
-
expect(nextRoundBaseTurnIndex(r)).toBe(2);
|
|
734
|
-
});
|
|
735
|
-
});
|
|
590
|
+
// [H1 U6 / D7 ③] getFullTextFrom / nextRoundBaseTurnIndex 用例族随 base 死记账退役删除
|
|
591
|
+
//(生产消费面 onRoundSettled / settleChatRoundFromResponse 已删除,字段 roundBaseTurnIndex
|
|
592
|
+
// 一并清理——退役不迁移,防丢文本语义由 record.result 恒写承接)。
|
|
736
593
|
|
|
737
594
|
// ============================================================
|
|
738
595
|
// getAllToolCalls / getTotalUsage — 聚合派生
|
|
@@ -1346,11 +1203,14 @@ describe("createRecord 引擎留痕字段(P4)", () => {
|
|
|
1346
1203
|
// jsonlToAgentEvent — subprocess JSONL → AgentEvent 翻译
|
|
1347
1204
|
// ============================================================
|
|
1348
1205
|
describe("jsonlToAgentEvent(JSONL → AgentEvent 翻译)", () => {
|
|
1349
|
-
it("不映射类型(session/message_start/turn_start
|
|
1206
|
+
it("不映射类型(session/message_start/turn_start)→ 空数组", () => {
|
|
1350
1207
|
expect(jsonlToAgentEvent({ type: "session" })).toEqual([]);
|
|
1351
1208
|
expect(jsonlToAgentEvent({ type: "message_start" })).toEqual([]);
|
|
1352
1209
|
expect(jsonlToAgentEvent({ type: "turn_start" })).toEqual([]);
|
|
1353
|
-
|
|
1210
|
+
});
|
|
1211
|
+
|
|
1212
|
+
it("tool_execution_update → activity(纯活性信号,与 pi 侧 TOOL_ACTIVITY_EVENT 同语义)", () => {
|
|
1213
|
+
expect(jsonlToAgentEvent({ type: "tool_execution_update" })).toEqual([{ type: "activity" }]);
|
|
1354
1214
|
});
|
|
1355
1215
|
|
|
1356
1216
|
it("未知类型 → 空数组(落空语义)", () => {
|