oasis_test_v2 2.2.29 → 2.2.30

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.
Files changed (2) hide show
  1. package/dist/index.js +37 -14
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -25935,11 +25935,19 @@ var init_codex = __esm({
25935
25935
  active: false,
25936
25936
  pendingInputs: /* @__PURE__ */ new Set(),
25937
25937
  codex: createCodexNormalizeState(),
25938
- // 本次 run 的用量:逐轮累加 `thread/tokenUsage/updated` 的 `last`(见该解析函数注释)。
25939
- usage: { input: 0, cacheRead: 0, cacheWrite: 0, output: 0 },
25940
- sawUsage: false,
25941
- // `thread/started` 会直接给出本会话 rollout 的绝对路径——取实际模型时不必再满盘搜。
25942
- rolloutPath: void 0
25938
+ // 本次 run 的用量:`thread/tokenUsage/updated` 的 `last`(见该解析函数注释)按轮次记下,
25939
+ // 结算时只加**本次 run 发起的轮次**(runTurnIds)。原因:`thread/resume` 之后 codex 会把线程
25940
+ // **上一轮**的用量通知重放一遍(本机 codex 0.154.0 实测,turnId 是上一轮的),照单全收的话
25941
+ // 每次续接都把上一轮的 token 再记一遍。没带 turnId 的通知(老版本)照旧直接计入。
25942
+ usageByTurn: [],
25943
+ runTurnIds: /* @__PURE__ */ new Set(),
25944
+ // 已经发出本次 run 的 `turn/start`:在这之前出现的 `turn/started` 不是本次的轮次。
25945
+ turnRequested: false,
25946
+ // 会话 rollout 的绝对路径:新开线程时 `thread/started` 通知会给;**续接(thread/resume)不发这条通知**,
25947
+ // 只能从 resume 的响应里取(同上实测)。取不到它就读不到实际模型。
25948
+ rolloutPath: void 0,
25949
+ // thread/start / thread/resume 响应里 codex 报的线程模型:rollout 读不到时的兜底。
25950
+ threadModel: void 0
25943
25951
  }),
25944
25952
  initialCommand: () => ({
25945
25953
  jsonrpc: "2.0",
@@ -25956,12 +25964,16 @@ var init_codex = __esm({
25956
25964
  const threadId = thread.thread?.id ?? thread.id;
25957
25965
  if (typeof threadId !== "string" || !threadId) throw new Error("codex app-server returned no thread id");
25958
25966
  state.threadId = threadId;
25967
+ if (typeof thread.thread?.path === "string" && thread.thread.path) state.rolloutPath ??= thread.thread.path;
25968
+ const responseModel = typeof thread.model === "string" && thread.model ? thread.model : typeof thread.thread?.model === "string" && thread.thread.model ? thread.thread.model : void 0;
25969
+ if (responseModel) state.threadModel = responseModel;
25959
25970
  const text5 = currentJob.systemPrompt ? `${currentJob.systemPrompt}
25960
25971
 
25961
25972
  ---
25962
25973
 
25963
25974
  ${task}` : task;
25964
25975
  state.active = true;
25976
+ state.turnRequested = true;
25965
25977
  const turn = await send({
25966
25978
  jsonrpc: "2.0",
25967
25979
  method: "turn/start",
@@ -25974,7 +25986,10 @@ ${task}` : task;
25974
25986
  }
25975
25987
  });
25976
25988
  const turnId = turn.turn?.id ?? turn.id;
25977
- if (typeof turnId === "string" && turnId) state.turnId = turnId;
25989
+ if (typeof turnId === "string" && turnId) {
25990
+ state.turnId = turnId;
25991
+ state.runTurnIds.add(turnId);
25992
+ }
25978
25993
  if (!state.turnId) throw new Error("codex app-server returned no turn id");
25979
25994
  },
25980
25995
  liveEvents(message, state) {
@@ -26015,16 +26030,14 @@ ${task}` : task;
26015
26030
  }
26016
26031
  if (method === "thread/tokenUsage/updated") {
26017
26032
  const turn = parseCodexAppServerTurnUsage(params);
26018
- if (turn) {
26019
- addCodexBuckets(state.usage, turn);
26020
- state.sawUsage = true;
26021
- }
26033
+ if (turn) state.usageByTurn.push({ turnId: typeof params?.turnId === "string" ? params.turnId : void 0, buckets: turn });
26022
26034
  }
26023
26035
  if (method === "turn/started") {
26024
26036
  const turn = params?.turn;
26025
26037
  if (typeof turn?.id === "string") {
26026
26038
  state.turnId = turn.id;
26027
26039
  state.active = true;
26040
+ if (state.turnRequested) state.runTurnIds.add(turn.id);
26028
26041
  }
26029
26042
  }
26030
26043
  if (method === "item/agentMessage/delta" || method === "item/reasoning/textDelta") {
@@ -26056,9 +26069,16 @@ ${task}` : task;
26056
26069
  } catch {
26057
26070
  }
26058
26071
  }
26059
- model ??= resolvedModel2;
26072
+ model ??= state.threadModel ?? resolvedModel2;
26073
+ const usage = { input: 0, cacheRead: 0, cacheWrite: 0, output: 0 };
26074
+ let sawUsage = false;
26075
+ for (const entry of state.usageByTurn) {
26076
+ if (entry.turnId !== void 0 && !state.runTurnIds.has(entry.turnId)) continue;
26077
+ addCodexBuckets(usage, entry.buckets);
26078
+ sawUsage = true;
26079
+ }
26060
26080
  return {
26061
- ...state.sawUsage ? { usage: codexUsageFromBuckets(state.usage) } : {},
26081
+ ...sawUsage ? { usage: codexUsageFromBuckets(usage) } : {},
26062
26082
  ...model ? { model } : {}
26063
26083
  };
26064
26084
  },
@@ -26068,7 +26088,10 @@ ${task}` : task;
26068
26088
  await send({ jsonrpc: "2.0", method: "turn/interrupt", params: { threadId: state.threadId, turnId: state.turnId } });
26069
26089
  const next = await send({ jsonrpc: "2.0", method: "turn/start", params: { threadId: state.threadId, input: [{ type: "text", text: input.text }] } });
26070
26090
  const nextId = next.turn?.id;
26071
- if (typeof nextId === "string") state.turnId = nextId;
26091
+ if (typeof nextId === "string") {
26092
+ state.turnId = nextId;
26093
+ state.runTurnIds.add(nextId);
26094
+ }
26072
26095
  state.active = true;
26073
26096
  return { accepted: true, interrupt: "unknown" };
26074
26097
  }
@@ -273755,7 +273778,7 @@ function shimScript() {
273755
273778
  }
273756
273779
 
273757
273780
  // src/index.ts
273758
- var PKG_VERSION = true ? "2.2.29" : "dev";
273781
+ var PKG_VERSION = true ? "2.2.30" : "dev";
273759
273782
  var LOCAL_BIN = localBin();
273760
273783
  var NPM_PREFIX = npmPrefix();
273761
273784
  var INSTANCE = DEFAULT_INSTANCE;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test_v2",
3
- "version": "2.2.29",
3
+ "version": "2.2.30",
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": "68eff586a82e2fd668f109ffbdd672ebf77844ac"
29
+ "sourceHead": "013d645f571ea8a12f1a119c0dae1cc1f4c3caac"
30
30
  }
31
31
  }