mingdao-harness 0.6.42 → 0.6.43
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/package.json +1 -1
- package/src/session-events.js +12 -0
- package/src/session.js +3 -3
package/package.json
CHANGED
package/src/session-events.js
CHANGED
|
@@ -75,6 +75,18 @@ export const SYNTHETIC_REASON = '进程中断(启动时合成闭合事件)';
|
|
|
75
75
|
/** 回滚开关:`MINGDAO_EVENT_LOG=0`(或 false/off/no)时全局关闭双写。 */
|
|
76
76
|
export const EVENT_LOG_ENV = 'MINGDAO_EVENT_LOG';
|
|
77
77
|
|
|
78
|
+
/**
|
|
79
|
+
* 事件日志**格式版本**(写在 `session.start` 的 `data.format` 里)。
|
|
80
|
+
*
|
|
81
|
+
* 为什么需要:0.6.42 之前 `rewriteSession()` 完全不写事件,旧日志**无法**从事件流恢复历史。
|
|
82
|
+
* 对拍工具需要一个可靠依据来区分"旧日志不可回溯(历史噪声)"与"新日志重放回归(真 bug)"——
|
|
83
|
+
* 靠"条数/前缀"猜是不行的(实测会把内容不一致误判成历史噪声)。这就是 DSH `session-format-v*` 的同一思路。
|
|
84
|
+
*
|
|
85
|
+
* 1 = 0.6.35–0.6.41:只有 appendMessages 双写,rewrite 无事件
|
|
86
|
+
* 2 = 0.6.42 起:rewriteSession 也写 `messages.replace`
|
|
87
|
+
*/
|
|
88
|
+
export const EVENT_LOG_FORMAT = 2;
|
|
89
|
+
|
|
78
90
|
/** 中断时补的 tool 占位文案——与 `agent.js#finishTurn` 的既有文案保持逐字一致。 */
|
|
79
91
|
export const INTERRUPTED_TOOL_CONTENT = '(已中断,未执行)';
|
|
80
92
|
|
package/src/session.js
CHANGED
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
|
|
4
4
|
import fs from 'node:fs';
|
|
5
5
|
import path from 'node:path';
|
|
6
|
-
import { appendEvent, eventFileFor, eventLogEnabled, isEventLogName, repairEventLog, warnEventFailure } from './session-events.js';
|
|
6
|
+
import { appendEvent, eventFileFor, eventLogEnabled, isEventLogName, repairEventLog, warnEventFailure, EVENT_LOG_FORMAT } from './session-events.js';
|
|
7
7
|
|
|
8
8
|
// —— 冲突备份名(单一事实来源,v0.4.6)——
|
|
9
9
|
// 同步冲突时写入的备份:<会话名>.server-<时间戳>[-<随机后缀>].jsonl(远端版本)与 .remote-(远端拉取版本)。
|
|
@@ -134,7 +134,7 @@ function doubleWriteSessionEvents(file, messages) {
|
|
|
134
134
|
try {
|
|
135
135
|
// 事件流的第一条:只在文件尚不存在时写一次(并发下最多重复一条 session.start,无害)。
|
|
136
136
|
if (!fs.existsSync(eventFile)) {
|
|
137
|
-
const start = appendEvent(eventFile, { type: 'session.start', data: { session: path.basename(String(file)) } });
|
|
137
|
+
const start = appendEvent(eventFile, { type: 'session.start', data: { session: path.basename(String(file)), format: EVENT_LOG_FORMAT } });
|
|
138
138
|
if (!start.ok) {
|
|
139
139
|
warnEventFailure(eventFile, start.error ?? null);
|
|
140
140
|
return;
|
|
@@ -192,7 +192,7 @@ function doubleWriteReplaceEvents(file, messages, reason) {
|
|
|
192
192
|
try {
|
|
193
193
|
// 与 appendMessages 一致:事件流的第一条 session.start 只在文件尚不存在时写一次。
|
|
194
194
|
if (!fs.existsSync(eventFile)) {
|
|
195
|
-
const start = appendEvent(eventFile, { type: 'session.start', data: { session: path.basename(String(file)) } });
|
|
195
|
+
const start = appendEvent(eventFile, { type: 'session.start', data: { session: path.basename(String(file)), format: EVENT_LOG_FORMAT } });
|
|
196
196
|
if (!start.ok) {
|
|
197
197
|
warnEventFailure(eventFile, start.error ?? null);
|
|
198
198
|
return;
|