oasis_test_v2 2.2.71 → 2.2.72
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/index.js +159 -51
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -6688,22 +6688,28 @@ function readCodexTokenCountLine(line2) {
|
|
|
6688
6688
|
...total ? { total } : {}
|
|
6689
6689
|
};
|
|
6690
6690
|
}
|
|
6691
|
+
function readCodexTurnContextModel(line2) {
|
|
6692
|
+
if (!line2 || line2.indexOf("turn_context") === -1) return void 0;
|
|
6693
|
+
let o;
|
|
6694
|
+
try {
|
|
6695
|
+
o = JSON.parse(line2);
|
|
6696
|
+
} catch {
|
|
6697
|
+
return void 0;
|
|
6698
|
+
}
|
|
6699
|
+
if (o?.type !== "turn_context") return void 0;
|
|
6700
|
+
return typeof o.payload?.model === "string" && o.payload.model ? o.payload.model : void 0;
|
|
6701
|
+
}
|
|
6691
6702
|
function parseCodexModel(lines) {
|
|
6692
6703
|
let model;
|
|
6693
|
-
for (const line2 of lines)
|
|
6694
|
-
if (!line2 || line2.indexOf("turn_context") === -1) continue;
|
|
6695
|
-
let o;
|
|
6696
|
-
try {
|
|
6697
|
-
o = JSON.parse(line2);
|
|
6698
|
-
} catch {
|
|
6699
|
-
continue;
|
|
6700
|
-
}
|
|
6701
|
-
if (o?.type === "turn_context" && typeof o.payload?.model === "string" && o.payload.model) {
|
|
6702
|
-
model = o.payload.model;
|
|
6703
|
-
}
|
|
6704
|
-
}
|
|
6704
|
+
for (const line2 of lines) model = readCodexTurnContextModel(line2) ?? model;
|
|
6705
6705
|
return model;
|
|
6706
6706
|
}
|
|
6707
|
+
function pickCodexModel(sources) {
|
|
6708
|
+
for (const candidate of [sources.rollout, sources.thread, sources.requested]) {
|
|
6709
|
+
if (typeof candidate === "string" && candidate.trim().length > 0) return candidate;
|
|
6710
|
+
}
|
|
6711
|
+
return void 0;
|
|
6712
|
+
}
|
|
6707
6713
|
function codexSessionsRoot() {
|
|
6708
6714
|
const candidates = [];
|
|
6709
6715
|
const ch = process.env["CODEX_HOME"];
|
|
@@ -7031,7 +7037,7 @@ function codexTurnErrorMessage(value2) {
|
|
|
7031
7037
|
const detail = typeof error2?.additionalDetails === "string" ? error2.additionalDetails.trim() : "";
|
|
7032
7038
|
return [summary, detail].filter(Boolean).join("\n").slice(0, 4e3);
|
|
7033
7039
|
}
|
|
7034
|
-
var import_node_child_process7, import_node_crypto9, fs8, os6, path10, readline2, CODEX_BLOCKED_FLAGS, CODEX_ARGV_PROMPT_MAX_BYTES, CodexRolloutUsageTail, CODEX_APP_SERVER_BLOCKED_FLAGS, CodexAdapter;
|
|
7040
|
+
var import_node_child_process7, import_node_crypto9, fs8, os6, path10, readline2, CODEX_BLOCKED_FLAGS, CODEX_ARGV_PROMPT_MAX_BYTES, CodexRolloutLineTail, CodexRolloutUsageTail, CodexRolloutModelTail, CODEX_APP_SERVER_BLOCKED_FLAGS, CodexAdapter;
|
|
7035
7041
|
var init_codex = __esm({
|
|
7036
7042
|
"../adapters/src/codex/index.ts"() {
|
|
7037
7043
|
"use strict";
|
|
@@ -7069,25 +7075,21 @@ var init_codex = __esm({
|
|
|
7069
7075
|
// Multica 实证:codex --listen stdio:// 是 daemon↔CLI 传输协议;改会断链
|
|
7070
7076
|
]);
|
|
7071
7077
|
CODEX_ARGV_PROMPT_MAX_BYTES = 1e5;
|
|
7072
|
-
|
|
7073
|
-
constructor(file
|
|
7078
|
+
CodexRolloutLineTail = class {
|
|
7079
|
+
constructor(file) {
|
|
7074
7080
|
this.file = file;
|
|
7075
|
-
this.sinceMs = sinceMs;
|
|
7076
7081
|
}
|
|
7077
7082
|
offset = 0;
|
|
7078
7083
|
rest = "";
|
|
7079
|
-
|
|
7080
|
-
|
|
7081
|
-
/** 读新追加的行,返回当前窗内累计;还没有任何窗内轮次返回 undefined。读失败抛给调用方(调用方吞)。 */
|
|
7082
|
-
poll() {
|
|
7084
|
+
/** 读新追加的整行逐行回调;文件被截短时先回调 onReset 再从头读。读失败抛给调用方(调用方吞)。 */
|
|
7085
|
+
read(onLine, onReset) {
|
|
7083
7086
|
const fd = fs8.openSync(this.file, "r");
|
|
7084
7087
|
try {
|
|
7085
7088
|
const size = fs8.fstatSync(fd).size;
|
|
7086
7089
|
if (size < this.offset) {
|
|
7087
7090
|
this.offset = 0;
|
|
7088
7091
|
this.rest = "";
|
|
7089
|
-
|
|
7090
|
-
this.acc.input = this.acc.cacheRead = this.acc.cacheWrite = this.acc.output = 0;
|
|
7092
|
+
onReset?.();
|
|
7091
7093
|
}
|
|
7092
7094
|
if (size > this.offset) {
|
|
7093
7095
|
const buf = Buffer.alloc(size - this.offset);
|
|
@@ -7096,19 +7098,62 @@ var init_codex = __esm({
|
|
|
7096
7098
|
const text7 = this.rest + buf.subarray(0, n).toString("utf8");
|
|
7097
7099
|
const lines = text7.split("\n");
|
|
7098
7100
|
this.rest = lines.pop() ?? "";
|
|
7099
|
-
for (const line2 of lines)
|
|
7100
|
-
const row = readCodexTokenCountLine(line2);
|
|
7101
|
-
if (!row?.turn || !Number.isFinite(row.ts) || row.ts < this.sinceMs) continue;
|
|
7102
|
-
addCodexBuckets(this.acc, row.turn);
|
|
7103
|
-
this.saw = true;
|
|
7104
|
-
}
|
|
7101
|
+
for (const line2 of lines) onLine(line2);
|
|
7105
7102
|
}
|
|
7106
7103
|
} finally {
|
|
7107
7104
|
fs8.closeSync(fd);
|
|
7108
7105
|
}
|
|
7106
|
+
}
|
|
7107
|
+
};
|
|
7108
|
+
CodexRolloutUsageTail = class {
|
|
7109
|
+
constructor(file, sinceMs) {
|
|
7110
|
+
this.file = file;
|
|
7111
|
+
this.sinceMs = sinceMs;
|
|
7112
|
+
this.tail = new CodexRolloutLineTail(file);
|
|
7113
|
+
}
|
|
7114
|
+
tail;
|
|
7115
|
+
acc = { input: 0, cacheRead: 0, cacheWrite: 0, output: 0 };
|
|
7116
|
+
saw = false;
|
|
7117
|
+
lastModel;
|
|
7118
|
+
/** 截至目前读到的**最后一条** `turn_context` 模型(与终值的 {@link parseCodexModel} 同判据)。 */
|
|
7119
|
+
get model() {
|
|
7120
|
+
return this.lastModel;
|
|
7121
|
+
}
|
|
7122
|
+
/** 读新追加的行,返回当前窗内累计;还没有任何窗内轮次返回 undefined。读失败抛给调用方(调用方吞)。 */
|
|
7123
|
+
poll() {
|
|
7124
|
+
this.tail.read((line2) => {
|
|
7125
|
+
const model = readCodexTurnContextModel(line2);
|
|
7126
|
+
if (model) this.lastModel = model;
|
|
7127
|
+
const row = readCodexTokenCountLine(line2);
|
|
7128
|
+
if (!row?.turn || !Number.isFinite(row.ts) || row.ts < this.sinceMs) return;
|
|
7129
|
+
addCodexBuckets(this.acc, row.turn);
|
|
7130
|
+
this.saw = true;
|
|
7131
|
+
}, () => {
|
|
7132
|
+
this.saw = false;
|
|
7133
|
+
this.lastModel = void 0;
|
|
7134
|
+
this.acc.input = this.acc.cacheRead = this.acc.cacheWrite = this.acc.output = 0;
|
|
7135
|
+
});
|
|
7109
7136
|
return this.saw ? usageFromBuckets(this.acc) : void 0;
|
|
7110
7137
|
}
|
|
7111
7138
|
};
|
|
7139
|
+
CodexRolloutModelTail = class {
|
|
7140
|
+
constructor(file) {
|
|
7141
|
+
this.file = file;
|
|
7142
|
+
this.tail = new CodexRolloutLineTail(file);
|
|
7143
|
+
}
|
|
7144
|
+
tail;
|
|
7145
|
+
lastModel;
|
|
7146
|
+
/** 追读新行,返回截至目前**最后一条** `turn_context` 记的模型。读失败抛给调用方(调用方吞)。 */
|
|
7147
|
+
poll() {
|
|
7148
|
+
this.tail.read((line2) => {
|
|
7149
|
+
const model = readCodexTurnContextModel(line2);
|
|
7150
|
+
if (model) this.lastModel = model;
|
|
7151
|
+
}, () => {
|
|
7152
|
+
this.lastModel = void 0;
|
|
7153
|
+
});
|
|
7154
|
+
return this.lastModel;
|
|
7155
|
+
}
|
|
7156
|
+
};
|
|
7112
7157
|
CODEX_APP_SERVER_BLOCKED_FLAGS = /* @__PURE__ */ new Map([
|
|
7113
7158
|
["app-server", "boolean"],
|
|
7114
7159
|
["--stdio", "boolean"],
|
|
@@ -7169,7 +7214,12 @@ var init_codex = __esm({
|
|
|
7169
7214
|
// 只能从 resume 的响应里取(同上实测)。取不到它就读不到实际模型。
|
|
7170
7215
|
rolloutPath: void 0,
|
|
7171
7216
|
// thread/start / thread/resume 响应里 codex 报的线程模型:rollout 读不到时的兜底。
|
|
7172
|
-
threadModel: void 0
|
|
7217
|
+
threadModel: void 0,
|
|
7218
|
+
// 运行中检查点的模型来源(Bug 0227):增量追读会话卷里逐轮记的实际模型。卷路径就位后才建。
|
|
7219
|
+
rolloutModelTail: void 0,
|
|
7220
|
+
rolloutModel: void 0,
|
|
7221
|
+
// 上一次报出去的用量指纹:只在用量真的变了的那一拍才去碰磁盘(runningUsage 每条协议消息都被调到)。
|
|
7222
|
+
lastUsageKey: ""
|
|
7173
7223
|
}),
|
|
7174
7224
|
initialCommand: () => ({
|
|
7175
7225
|
jsonrpc: "2.0",
|
|
@@ -7311,14 +7361,14 @@ ${task}` : task;
|
|
|
7311
7361
|
},
|
|
7312
7362
|
runtimeSessionId: (state) => state.threadId,
|
|
7313
7363
|
exitExtras: (state) => {
|
|
7314
|
-
let
|
|
7364
|
+
let fromRollout;
|
|
7315
7365
|
if (state.rolloutPath) {
|
|
7316
7366
|
try {
|
|
7317
|
-
|
|
7367
|
+
fromRollout = parseCodexModel(fs8.readFileSync(state.rolloutPath, "utf8").split("\n"));
|
|
7318
7368
|
} catch {
|
|
7319
7369
|
}
|
|
7320
7370
|
}
|
|
7321
|
-
model
|
|
7371
|
+
const model = pickCodexModel({ rollout: fromRollout ?? state.rolloutModel, thread: state.threadModel, requested: resolvedModel2 });
|
|
7322
7372
|
const usage = codexRunUsage(state.usageByTurn, state.runTurnIds);
|
|
7323
7373
|
return {
|
|
7324
7374
|
...usage ? { usage } : {},
|
|
@@ -7331,7 +7381,18 @@ ${task}` : task;
|
|
|
7331
7381
|
runningUsage: (state) => {
|
|
7332
7382
|
const usage = codexRunUsage(state.usageByTurn, state.runTurnIds);
|
|
7333
7383
|
if (!usage) return void 0;
|
|
7334
|
-
const
|
|
7384
|
+
const key2 = JSON.stringify(usage);
|
|
7385
|
+
if (key2 !== state.lastUsageKey) {
|
|
7386
|
+
state.lastUsageKey = key2;
|
|
7387
|
+
if (state.rolloutPath) {
|
|
7388
|
+
state.rolloutModelTail ??= new CodexRolloutModelTail(state.rolloutPath);
|
|
7389
|
+
try {
|
|
7390
|
+
state.rolloutModel = state.rolloutModelTail.poll() ?? state.rolloutModel;
|
|
7391
|
+
} catch {
|
|
7392
|
+
}
|
|
7393
|
+
}
|
|
7394
|
+
}
|
|
7395
|
+
const model = pickCodexModel({ rollout: state.rolloutModel, thread: state.threadModel, requested: resolvedModel2 });
|
|
7335
7396
|
return { usage, ...model ? { model } : {} };
|
|
7336
7397
|
},
|
|
7337
7398
|
async append(input, state, send) {
|
|
@@ -7563,7 +7624,7 @@ ${task}` : task;
|
|
|
7563
7624
|
const key2 = usage ? JSON.stringify(usage) : "";
|
|
7564
7625
|
if (!usage || key2 === lastUsageKey) return;
|
|
7565
7626
|
lastUsageKey = key2;
|
|
7566
|
-
const model = job.model ?? this.opts.model;
|
|
7627
|
+
const model = pickCodexModel({ rollout: usageTail.model, requested: job.model ?? this.opts.model });
|
|
7567
7628
|
for (const cb of usageCheckpointCbs) cb({ usage, ...model ? { model } : {} });
|
|
7568
7629
|
} catch {
|
|
7569
7630
|
}
|
|
@@ -7615,7 +7676,7 @@ ${task}` : task;
|
|
|
7615
7676
|
clearTimeout(timer);
|
|
7616
7677
|
const resumeSessionId = job.resumeRuntimeSession ? job.runtimeSessionId : void 0;
|
|
7617
7678
|
const telemetry = scanCodexTelemetry(dir, startedAtMs, codexSessionsRoot(), job.runtimeSessionId);
|
|
7618
|
-
const model = telemetry.model
|
|
7679
|
+
const model = pickCodexModel({ rollout: telemetry.model, requested: job.model ?? this.opts.model });
|
|
7619
7680
|
const runtimeSessionId = telemetry.sessionId ?? resumeSessionId;
|
|
7620
7681
|
const sawStreamError = streamErrorMessages.length > 0;
|
|
7621
7682
|
const isError = !killReason && (code2 !== 0 || sawStreamError);
|
|
@@ -216136,7 +216197,9 @@ function systemHandoffFor(run, checkpoint = null, effects2 = []) {
|
|
|
216136
216197
|
// 与 PG 触发器同口径(2026-08-18):risks / verificationGaps 只装业务语义的东西。会话怎么死的
|
|
216137
216198
|
// 已在 summary 的 reason= 段里,不再冒充成「交付物的风险」;「没有断点」也不是「验证缺口」。
|
|
216138
216199
|
risks: pendingEffects || failedEffects ? [`external effects: pending=${pendingEffects}, failed=${failedEffects}`] : [],
|
|
216139
|
-
nextActions
|
|
216200
|
+
// 与 PG 触发器同口径(2026-09-23):nextActions 是「下游怎么用这份成果」,不拿 pendingSteps
|
|
216201
|
+
//(执行人自己没做完的活)兜底——兜底会让下游交接出现 `[next] 提交并结案` 这种假的「上游建议」。
|
|
216202
|
+
nextActions: [],
|
|
216140
216203
|
verificationGaps: [],
|
|
216141
216204
|
userHandoff: null,
|
|
216142
216205
|
createdAt: run.endedAt ?? run.updatedAt ?? (/* @__PURE__ */ new Date()).toISOString()
|
|
@@ -224789,9 +224852,15 @@ function createUsageLedgerResolver(deps) {
|
|
|
224789
224852
|
return chatCid ? { runId: stable, store: await deps.storeFor(chatCid) } : null;
|
|
224790
224853
|
};
|
|
224791
224854
|
}
|
|
224855
|
+
function hasModelName(model) {
|
|
224856
|
+
return typeof model === "string" && model.trim().length > 0;
|
|
224857
|
+
}
|
|
224858
|
+
function frameTokenTotal(usage) {
|
|
224859
|
+
return (usage.inputTokens ?? 0) + (usage.outputTokens ?? 0) + (usage.cacheReadTokens ?? 0) + (usage.cacheCreationTokens ?? 0);
|
|
224860
|
+
}
|
|
224792
224861
|
async function backfillRunModel(target, run, model, warn) {
|
|
224793
|
-
if (!model
|
|
224794
|
-
if (run.effectiveModel
|
|
224862
|
+
if (!hasModelName(model)) return;
|
|
224863
|
+
if (hasModelName(run.effectiveModel)) return;
|
|
224795
224864
|
try {
|
|
224796
224865
|
await target.store.updateRun(target.runId, { effectiveModel: model, modelSource: "runtime" });
|
|
224797
224866
|
} catch (err) {
|
|
@@ -224808,6 +224877,13 @@ function createUsageLedgerFrameHandler(deps) {
|
|
|
224808
224877
|
settledDispatch.add(dispatchId);
|
|
224809
224878
|
if (settledDispatch.size > 1e4) settledDispatch.delete(settledDispatch.values().next().value);
|
|
224810
224879
|
};
|
|
224880
|
+
const modelless = /* @__PURE__ */ new Set();
|
|
224881
|
+
const notedModelless = (runId) => {
|
|
224882
|
+
if (modelless.has(runId)) return true;
|
|
224883
|
+
modelless.add(runId);
|
|
224884
|
+
if (modelless.size > 1e4) modelless.delete(modelless.values().next().value);
|
|
224885
|
+
return false;
|
|
224886
|
+
};
|
|
224811
224887
|
return async (msg) => {
|
|
224812
224888
|
if (!RUNTIME_START_FRAME_TYPES.has(msg.type)) return;
|
|
224813
224889
|
const dispatchId = msg.dispatchId;
|
|
@@ -224850,6 +224926,12 @@ function createUsageLedgerFrameHandler(deps) {
|
|
|
224850
224926
|
warn(`[usage-ledger] session_usage dispatch=${dispatchId} usageSeq=${String(msg.usageSeq)} \u975E\u6CD5\uFF0C\u4E22\u5F03`);
|
|
224851
224927
|
return;
|
|
224852
224928
|
}
|
|
224929
|
+
if (!hasModelName(msg.model) && !hasModelName(run.effectiveModel)) {
|
|
224930
|
+
const tokens2 = frameTokenTotal(msg.usage);
|
|
224931
|
+
if (tokens2 > 0 && !notedModelless(target.runId)) {
|
|
224932
|
+
warn(`[usage-ledger] session_usage dispatch=${dispatchId} \u2192 run ${target.runId} \u5E26\u7740 ${tokens2} \u4E2A token \u5374\u6CA1\u6709\u6A21\u578B\u540D\uFF08run \u884C\u4E5F\u662F\u7A7A\u7684\uFF09\uFF0C\u8FD9\u6BB5\u7528\u91CF\u53EA\u80FD\u5F52\u8FDB\u300C\u672A\u77E5\u6A21\u578B\u300D`);
|
|
224933
|
+
}
|
|
224934
|
+
}
|
|
224853
224935
|
await target.store.recordUsagePoint({
|
|
224854
224936
|
runId: target.runId,
|
|
224855
224937
|
seq: msg.usageSeq,
|
|
@@ -246223,7 +246305,7 @@ function renderResumePack(pack) {
|
|
|
246223
246305
|
if (cp) lines.push(`- Recoverability: ${cp.recoverability}`);
|
|
246224
246306
|
if (done.length > 0) lines.push(`- \u4E0A\u4E00\u8D9F\u5DF2\u5B8C\u6210\u7684\u6B65\u9AA4\uFF1A${done.join("\u3001")}`);
|
|
246225
246307
|
for (const ref2 of durable) {
|
|
246226
|
-
lines.push(` - durable: ${ref2
|
|
246308
|
+
lines.push(` - durable: ${renderRefId(ref2)}${ref2.version ? `@${ref2.version}` : ""}${ref2.label ? ` \u2014 ${ref2.label}` : ""}`);
|
|
246227
246309
|
}
|
|
246228
246310
|
if (cp && cp.pendingSteps.length > 0) {
|
|
246229
246311
|
for (const step of cp.pendingSteps) lines.push(` - pending: ${step}`);
|
|
@@ -246268,6 +246350,11 @@ function parseResumePackSnapshot(content3) {
|
|
|
246268
246350
|
return null;
|
|
246269
246351
|
}
|
|
246270
246352
|
}
|
|
246353
|
+
function renderRefId(ref2) {
|
|
246354
|
+
const kind = ref2.kind.trim();
|
|
246355
|
+
const id = ref2.id.trim();
|
|
246356
|
+
return kind && !id.startsWith(`${kind}:`) ? `${kind}:${id}` : id;
|
|
246357
|
+
}
|
|
246271
246358
|
function renderWorkVersion(work) {
|
|
246272
246359
|
const current = work.currentWorkId ?? "none";
|
|
246273
246360
|
const delivered = work.acceptedWorkId ?? "none";
|
|
@@ -246365,20 +246452,29 @@ function renderCoordinatorView(view, taskBackground) {
|
|
|
246365
246452
|
`- Actor: ${node2.actorId ?? "unassigned"}; role: ${node2.role ?? "unassigned"}`
|
|
246366
246453
|
);
|
|
246367
246454
|
if (node2.dependsOn.length > 0) lines.push(`- Depends on: ${node2.dependsOn.join(", ")}`);
|
|
246368
|
-
if (node2.conclusion?.trim())
|
|
246455
|
+
if (node2.conclusion?.trim()) {
|
|
246456
|
+
lines.push(node2.work.acceptedWorkId ? `- Conclusion (delivered ${node2.work.acceptedWorkId}): ${node2.conclusion.trim()}` : `- Conclusion: ${node2.conclusion.trim()}`);
|
|
246457
|
+
}
|
|
246369
246458
|
if (node2.recoverySource) {
|
|
246370
246459
|
const source = node2.recoverySource;
|
|
246371
246460
|
lines.push(
|
|
246372
246461
|
`- Recovery source: Attempt ${source.recoveredFromAttempt.attemptNo ?? "?"} \u2192 Attempt ${source.currentAttempt.attemptNo ?? "?"}`
|
|
246373
246462
|
);
|
|
246374
246463
|
if (source.recoveryCheckpoint) {
|
|
246375
|
-
lines.push(
|
|
246464
|
+
lines.push(
|
|
246465
|
+
` - Recovery checkpoint: #${source.recoveryCheckpoint.seq} (${source.recoveryCheckpoint.recoverability}) from Attempt ${source.recoveredFromAttempt.attemptNo ?? "?"}`
|
|
246466
|
+
);
|
|
246376
246467
|
for (const step of source.recoveryCheckpoint.pendingSteps) lines.push(` - Recovery pending: ${step}`);
|
|
246377
246468
|
}
|
|
246378
|
-
if (source.recoveryHandoff
|
|
246379
|
-
|
|
246380
|
-
|
|
246381
|
-
|
|
246469
|
+
if (source.recoveryHandoff) {
|
|
246470
|
+
const handoffFrom = source.recoveryHandoff.attemptId === source.recoveredFromAttempt.id ? `Attempt ${source.recoveredFromAttempt.attemptNo ?? "?"}` : `attempt ${source.recoveryHandoff.attemptId}`;
|
|
246471
|
+
if (source.recoveryHandoff.producedBy === "agent") {
|
|
246472
|
+
lines.push(` - Recovery Agent handoff (${handoffFrom}): ${source.recoveryHandoff.summary}`);
|
|
246473
|
+
} else if (source.recoveryHandoff.producedBy === "system_reconstructed") {
|
|
246474
|
+
lines.push(
|
|
246475
|
+
` - Recovery system reconstruction (${handoffFrom}, not an Agent conclusion): ${source.recoveryHandoff.summary}`
|
|
246476
|
+
);
|
|
246477
|
+
}
|
|
246382
246478
|
}
|
|
246383
246479
|
for (const risk of source.recoveryHandoff?.risks ?? []) lines.push(` - Recovery risk: ${risk}`);
|
|
246384
246480
|
}
|
|
@@ -246388,11 +246484,12 @@ function renderCoordinatorView(view, taskBackground) {
|
|
|
246388
246484
|
}
|
|
246389
246485
|
if (node2.handoffProducer === "agent" && node2.summary.trim() && !sameCoordinatorText(node2.summary, node2.conclusion)) {
|
|
246390
246486
|
lines.push(`- Technical notes: ${node2.summary}`);
|
|
246391
|
-
} else if (node2.handoffProducer === "system_reconstructed" && node2.summary.startsWith("[system_reconstructed]")) {
|
|
246487
|
+
} else if (node2.handoffProducer === "system_reconstructed" && node2.summary.startsWith("[system_reconstructed]") && node2.status !== "succeeded") {
|
|
246392
246488
|
lines.push(`- Execution diagnostic: ${node2.summary}`);
|
|
246393
246489
|
}
|
|
246394
246490
|
for (const output of node2.changedOutputs) {
|
|
246395
|
-
|
|
246491
|
+
if (!output.version) continue;
|
|
246492
|
+
lines.push(` - Durable output: ${renderRefId(output)}@${output.version}`);
|
|
246396
246493
|
}
|
|
246397
246494
|
const openItems = [
|
|
246398
246495
|
...node2.unresolvedIssues.map((value2) => `[unresolved] ${value2}`),
|
|
@@ -247171,7 +247268,7 @@ function nodeCoordinatorFactsFromSnapshot(snapshot) {
|
|
|
247171
247268
|
state: currentWorkId === null ? "not_started" : currentWork ? workState(currentWork, hasOutput(currentWork, artifactCountByWork.get(currentWork.id) ?? 0)) : "unavailable"
|
|
247172
247269
|
};
|
|
247173
247270
|
const accepted = node2.latestAcceptId ? workById.get(node2.latestAcceptId) : void 0;
|
|
247174
|
-
const conclusion = accepted?.conclusion?.trim()
|
|
247271
|
+
const conclusion = accepted?.conclusion?.trim();
|
|
247175
247272
|
const sealed = node2.cancelledAt ? { reason: node2.sealReason ?? "cancelled", at: node2.cancelledAt } : null;
|
|
247176
247273
|
out[node2.id] = {
|
|
247177
247274
|
work,
|
|
@@ -259317,7 +259414,18 @@ var init_postgres_trace = __esm({
|
|
|
259317
259414
|
(generated_handoff_id, NEW.id, COALESCE(NEW.job_key, NEW.trigger_ref, 'attempt:' || NEW.id), NEW.part,
|
|
259318
259415
|
'system_reconstructed', mapped_outcome,
|
|
259319
259416
|
reconstructed_summary, NEW.output_refs, '[]'::jsonb, reconstructed_risks,
|
|
259320
|
-
|
|
259417
|
+
-- \u2605 2026-09-23\uFF1Anext_actions \u4E0D\u518D\u7528 checkpoint \u7684 pendingSteps \u515C\u5E95\u3002
|
|
259418
|
+
--
|
|
259419
|
+
-- \u8FD9\u4E00\u680F\u7684\u8BED\u4E49\u662F\u300C\u4E0B\u6E38\u600E\u4E48\u7528\u8FD9\u4EFD\u6210\u679C\u300D\uFF08TASK.md \u539F\u6587\uFF1A--next\uFF1A\u4E0B\u6E38\u5982\u4F55\u4F7F\u7528\u6210\u679C\uFF0C\u4E0D\u662F\u4F60\u5269\u4F59
|
|
259420
|
+
-- \u6CA1\u505A\u7684\u5DE5\u4F5C\uFF09\uFF0C\u800C pendingSteps \u6070\u6070\u662F\u6267\u884C\u4EBA\u81EA\u5DF1\u6CA1\u505A\u5B8C\u7684\u6D3B\u3002\u515C\u5E95\u7684\u540E\u679C\uFF1A\u7EBF\u4E0A 114 \u4EFD\u4EA4\u4ED8\u8BB0\u5F55
|
|
259421
|
+
-- \u91CC 106 \u4EFD\u5E26 next\uFF0C\u5176\u4E2D 59 \u4EFD\u662F conclude / \u63D0\u4EA4\u5E76\u7ED3\u6848 \u8FD9\u7C7B\u81EA\u7559\u5F85\u529E\uFF0C\u8FD8\u88AB\u4E0B\u6E38\u4EA4\u63A5\u7684\u7ED3\u5C3E\u53E5
|
|
259422
|
+
-- \u58F0\u660E\u6210\u300C\u4EE5\u4E0A\u5F00\u653E\u9879\u662F\u4E0A\u6E38\u6267\u884C\u4EBA\u4EA4\u4F5C\u4E1A\u65F6\u81EA\u5DF1\u5199\u7684\u300D\u2014\u2014\u4E00\u53E5\u5047\u8BDD\uFF08\u5B9E\u8BC1\uFF1Aws:wo-2481b4cb \u7684\u4E0B\u6E38
|
|
259423
|
+
-- \u300C\u8C03\u7814\u62A5\u544A\u300D\u6536\u5230\u7684 _HANDOFF.md \u53EA\u6709\u4E00\u884C - [next] \u63D0\u4EA4\u5E76\u7ED3\u6848\uFF09\u3002\u6539\u6210\u7A7A\u4E4B\u540E\uFF0C\u8FD9\u4E00\u680F\u8981\u4E48\u662F
|
|
259424
|
+
-- \u6267\u884C\u4EBA propose --next \u4EB2\u624B\u5199\u7684\uFF0C\u8981\u4E48\u6CA1\u6709\u3002
|
|
259425
|
+
--
|
|
259426
|
+
-- pendingSteps \u4E0D\u4F1A\u56E0\u6B64\u4E22\u5931\uFF1A\u4E2D\u65AD\u7EED\u8DD1\u8BFB\u7684\u662F checkpoint \u672C\u8EAB\uFF08RESUME.md\uFF09\uFF0C\u534F\u8C03\u8005\u89C6\u56FE\u5BF9
|
|
259427
|
+
-- running/stalled/blocked/failed \u8282\u70B9\u5355\u72EC\u6E32\u67D3 Pending \u884C\uFF08progress \u6BB5\uFF09\uFF0C\u4E24\u5904\u90FD\u4E0D\u8BFB\u8FD9\u4E00\u680F\u3002
|
|
259428
|
+
'[]'::jsonb, reconstructed_gaps, NULL,
|
|
259321
259429
|
COALESCE(NEW.ended_at, NEW.updated_at, NEW.started_at))
|
|
259322
259430
|
-- \u2605 2026-08-17\uFF1A\u7EC8\u6001\u91CD\u5EFA\u4ECE\u300C\u6574\u884C\u8986\u76D6\u300D\u6539\u6210\u300C**\u53EA\u586B\u7A7A**\u300D\u3002
|
|
259323
259431
|
--
|
|
@@ -289687,7 +289795,7 @@ async function waitForCommandAuthorization(base, headers, draftId, fallback) {
|
|
|
289687
289795
|
}
|
|
289688
289796
|
}
|
|
289689
289797
|
}
|
|
289690
|
-
var CLI_VERSION = "2.2.
|
|
289798
|
+
var CLI_VERSION = "2.2.72" ? "2.2.72" : "dev";
|
|
289691
289799
|
function apiHeaders(token, company) {
|
|
289692
289800
|
const headers = {
|
|
289693
289801
|
authorization: `Bearer ${token}`,
|
|
@@ -293493,7 +293601,7 @@ function shimScript() {
|
|
|
293493
293601
|
}
|
|
293494
293602
|
|
|
293495
293603
|
// src/index.ts
|
|
293496
|
-
var PKG_VERSION = true ? "2.2.
|
|
293604
|
+
var PKG_VERSION = true ? "2.2.72" : "dev";
|
|
293497
293605
|
var LOCAL_BIN = localBin();
|
|
293498
293606
|
var NPM_PREFIX = npmPrefix();
|
|
293499
293607
|
var INSTANCE = DEFAULT_INSTANCE;
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "oasis_test_v2",
|
|
3
|
-
"version": "2.2.
|
|
3
|
+
"version": "2.2.72",
|
|
4
4
|
"description": "Oasis node daemon + CLI — background daemon, auto-start, full server CLI",
|
|
5
5
|
"bin": {
|
|
6
6
|
"oasis": "./dist/index.js"
|
|
@@ -26,6 +26,6 @@
|
|
|
26
26
|
"node": ">=20"
|
|
27
27
|
},
|
|
28
28
|
"oasisRelease": {
|
|
29
|
-
"sourceHead": "
|
|
29
|
+
"sourceHead": "a2685bf486a798e1ecb309610a733841f1360d92"
|
|
30
30
|
}
|
|
31
31
|
}
|