oasis_test_v2 2.2.47 → 2.2.48

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 +131 -43
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -5952,6 +5952,9 @@ var init_protocol_session = __esm({
5952
5952
  function codexNum(v2) {
5953
5953
  return typeof v2 === "number" && Number.isFinite(v2) ? v2 : 0;
5954
5954
  }
5955
+ function codexOutputTokens(output, reasoning) {
5956
+ return Math.max(codexNum(output), codexNum(reasoning));
5957
+ }
5955
5958
  function parseCodexAppServerTurnUsage(params) {
5956
5959
  const p2 = params;
5957
5960
  const last = p2?.tokenUsage?.last;
@@ -5960,7 +5963,7 @@ function parseCodexAppServerTurnUsage(params) {
5960
5963
  input: codexNum(last["inputTokens"]),
5961
5964
  cacheRead: codexNum(last["cachedInputTokens"]),
5962
5965
  cacheWrite: codexNum(last["cacheWriteInputTokens"]),
5963
- output: codexNum(last["outputTokens"]) + codexNum(last["reasoningOutputTokens"])
5966
+ output: codexOutputTokens(last["outputTokens"], last["reasoningOutputTokens"])
5964
5967
  };
5965
5968
  }
5966
5969
  function addCodexBuckets(acc, add) {
@@ -5992,8 +5995,8 @@ function bucketsOf(usage) {
5992
5995
  // cache 字段名跨版本有两种
5993
5996
  cacheRead: codexNum(usage["cached_input_tokens"]) || codexNum(usage["cache_read_input_tokens"]),
5994
5997
  cacheWrite: codexNum(usage["cache_write_input_tokens"]),
5995
- // reasoning 计入 output(对齐 Multica:codex 的 output_tokens 不含 reasoning)。
5996
- output: codexNum(usage["output_tokens"]) + codexNum(usage["reasoning_output_tokens"])
5998
+ // output_tokens 已含 reasoning,见 codexOutputTokens。
5999
+ output: codexOutputTokens(usage["output_tokens"], usage["reasoning_output_tokens"])
5997
6000
  };
5998
6001
  }
5999
6002
  function usageFromBuckets(b2) {
@@ -10505,6 +10508,11 @@ var init_chat_item_ledger = __esm({
10505
10508
  const ord = this.rows.get(itemId)?.ord;
10506
10509
  return ord === null ? void 0 : ord;
10507
10510
  }
10511
+ /** 展示时间与持久行同源;不以浏览器收到帧的时间代替。 */
10512
+ timestampsFor(itemId) {
10513
+ const row = this.rows.get(itemId);
10514
+ return row ? { createdAt: row.createdAt, completedAt: row.completedAt } : void 0;
10515
+ }
10508
10516
  get failures() {
10509
10517
  return this.failureCount;
10510
10518
  }
@@ -10708,6 +10716,8 @@ var init_chat_item_ledger = __esm({
10708
10716
  if (this.rows.has(row.id)) continue;
10709
10717
  const { text: text6, attrs } = restoredTextAndAttrs(row);
10710
10718
  const item = {
10719
+ createdAt: row.createdAt,
10720
+ completedAt: row.completedAt,
10711
10721
  id: row.id,
10712
10722
  seq: ++this.seqCounter,
10713
10723
  ord: row.ord,
@@ -10962,7 +10972,10 @@ var init_chat_item_ledger = __esm({
10962
10972
  const id = input.deterministicId ?? this.newId();
10963
10973
  const startedVersion = this.tick();
10964
10974
  const writeVersion = this.tick();
10975
+ const createdAt = this.now();
10965
10976
  const row = {
10977
+ createdAt,
10978
+ completedAt: null,
10966
10979
  id,
10967
10980
  seq: ++this.seqCounter,
10968
10981
  ord: null,
@@ -10986,7 +10999,6 @@ var init_chat_item_ledger = __esm({
10986
10999
  if (!input.forceNullMessage) this.segmentItemCount += 1;
10987
11000
  if (!input.persist || !this.persistEnabled) return id;
10988
11001
  const messageId = row.messageId;
10989
- const createdAt = this.now();
10990
11002
  const payload2 = input.payload ?? this.payloadOf(row);
10991
11003
  const metadata = input.metadata ?? { [CHAT_ITEM_META_LEGACY_CONTENT]: input.inContent };
10992
11004
  this.enqueue(async () => {
@@ -11054,9 +11066,11 @@ var init_chat_item_ledger = __esm({
11054
11066
  persist(row, op, what) {
11055
11067
  const version2 = this.tick();
11056
11068
  row.wireVersion = version2;
11069
+ const at = this.now();
11070
+ if (op.op === "set_status" && op.status !== "streaming") row.completedAt = at;
11057
11071
  if (!row.persist || !this.persistEnabled) return;
11058
11072
  this.enqueue(async () => {
11059
- await this.deps.items.applyOp(row.id, op, { at: this.now(), version: version2 });
11073
+ await this.deps.items.applyOp(row.id, op, { at, version: version2 });
11060
11074
  }, what);
11061
11075
  }
11062
11076
  /** 串行链 + 失败吞掉计数。**串行是必须的**:append_text 依赖建行已经落地。 */
@@ -121002,11 +121016,11 @@ var require_lib2 = __commonJS({
121002
121016
  var DEFAULT_INITIAL = "Thinking...";
121003
121017
  var DEFAULT_EMPTY = "(no content)";
121004
121018
  var INITIAL_SUMMARY = "[Generating...]";
121005
- var SUMMARY_MAX_CHARS = 50;
121019
+ var SUMMARY_MAX_CHARS2 = 50;
121006
121020
  var ERROR_FOOTER = "\n\n\u2014 _(Generation interrupted)_";
121007
121021
  var DEFAULT_MAX_ELEMENT_CHARS = 3e4;
121008
121022
  var ELEMENT_ID = "stream_md";
121009
- function truncateSummary(text6, max = SUMMARY_MAX_CHARS) {
121023
+ function truncateSummary(text6, max = SUMMARY_MAX_CHARS2) {
121010
121024
  if (!text6)
121011
121025
  return "";
121012
121026
  const cleaned = text6.replace(/\s+/g, " ").trim();
@@ -162579,8 +162593,12 @@ var init_live_chat = __esm({
162579
162593
  payload: item.payload
162580
162594
  });
162581
162595
  }
162582
- assignV3Seq(turn, frame) {
162583
- return { ...frame, epoch: turn.liveEpoch, seq: ++turn.v3Seq };
162596
+ assignV3Seq(turn, frame, times = turn.items?.timestampsFor(frame.itemId)) {
162597
+ const payload2 = times ? {
162598
+ ...frame.payload && typeof frame.payload === "object" && !Array.isArray(frame.payload) ? frame.payload : {},
162599
+ ...times
162600
+ } : frame.payload;
162601
+ return { ...frame, ...payload2 !== void 0 ? { payload: payload2 } : {}, epoch: turn.liveEpoch, seq: ++turn.v3Seq };
162584
162602
  }
162585
162603
  /**
162586
162604
  * v3 帧的**唯一**发布出口:按 24ms 窗口合并同一 item 上相邻的 `append_text`,其余一律是顺序屏障。
@@ -162733,7 +162751,7 @@ var init_live_chat = __esm({
162733
162751
  operation: item.status === "completed" ? "completed" : "failed",
162734
162752
  itemVersion: item.version,
162735
162753
  ...item.ord !== null ? { ord: item.ord } : {}
162736
- }));
162754
+ }, { createdAt: item.createdAt, completedAt: item.completedAt }));
162737
162755
  return true;
162738
162756
  }
162739
162757
  emitV3TurnTerminal(turn, status) {
@@ -200837,7 +200855,34 @@ function registerDelegatedChildTurn(liveChat, childSessionId, session, deps = {}
200837
200855
  } catch {
200838
200856
  }
200839
200857
  });
200840
- const settle = async (signal) => {
200858
+ const recordFailure = (err) => {
200859
+ const chatExit = err instanceof Error ? err.chatExit : void 0;
200860
+ const text6 = chatExit?.summary ?? (err instanceof Error ? err.message : String(err));
200861
+ const extra = {
200862
+ ...chatExit?.reason ? { reason: chatExit.reason } : {},
200863
+ ...chatExit?.detail ? { detail: chatExit.detail } : {}
200864
+ };
200865
+ try {
200866
+ ctrl.emit({ type: "error", text: text6, ...extra });
200867
+ } catch {
200868
+ }
200869
+ try {
200870
+ const outcome = ledger.recordError(text6, extra);
200871
+ ctrl.publishServerItem({
200872
+ itemId: outcome.itemId,
200873
+ itemType: "control",
200874
+ startedVersion: outcome.startedVersion,
200875
+ version: outcome.version,
200876
+ ord: outcome.ord,
200877
+ status: "failed",
200878
+ payload: { code: "error", note: text6, ...extra }
200879
+ });
200880
+ } catch (e) {
200881
+ log3(`[delegation] \u5B50\u4F1A\u8BDD ${childSessionId} \u5931\u8D25\u539F\u56E0\u843D\u8D26\u5931\u8D25: ${String(e)}`);
200882
+ }
200883
+ };
200884
+ const settle = async (signal, err) => {
200885
+ if (signal === "failed") recordFailure(err);
200841
200886
  try {
200842
200887
  normalized4?.finishTurn(signal);
200843
200888
  } catch {
@@ -200845,12 +200890,12 @@ function registerDelegatedChildTurn(liveChat, childSessionId, session, deps = {}
200845
200890
  try {
200846
200891
  ledger.finish(signal);
200847
200892
  await ledger.drain();
200848
- } catch (err) {
200849
- log3(`[delegation] \u5B50\u4F1A\u8BDD ${childSessionId} \u8D26\u672C\u6536\u5C3E\u5931\u8D25: ${String(err)}`);
200893
+ } catch (err2) {
200894
+ log3(`[delegation] \u5B50\u4F1A\u8BDD ${childSessionId} \u8D26\u672C\u6536\u5C3E\u5931\u8D25: ${String(err2)}`);
200850
200895
  }
200851
200896
  ctrl.finish(signal === "completed" ? "done" : "error");
200852
200897
  };
200853
- void session.done.then(() => settle("completed"), () => settle("failed"));
200898
+ void session.done.then(() => settle("completed"), (err) => settle("failed", err));
200854
200899
  }
200855
200900
  var init_child_live_turn = __esm({
200856
200901
  "../server/src/domains/delegations/child-live-turn.ts"() {
@@ -239394,6 +239439,25 @@ var init_escalation_opening = __esm({
239394
239439
  }
239395
239440
  });
239396
239441
 
239442
+ // ../server/src/domains/delegations/reply-anchors.ts
239443
+ function delegationReplyAnchors(record8) {
239444
+ const bySequence = /* @__PURE__ */ new Map();
239445
+ for (const summary of record8.roundSummaries) {
239446
+ const sequence = summary.settledSeq;
239447
+ if (typeof sequence !== "number" || !Number.isSafeInteger(sequence) || sequence < 1 || !Number.isSafeInteger(summary.round) || summary.round < 1) continue;
239448
+ const ids2 = bySequence.get(sequence) ?? /* @__PURE__ */ new Set();
239449
+ ids2.add(childRoundMessageIds(record8.childSessionId, summary.round).placeholderId);
239450
+ bySequence.set(sequence, ids2);
239451
+ }
239452
+ return [...bySequence].flatMap(([settledSeq, ids2]) => ids2.size === 1 ? [{ settledSeq, childMessageId: [...ids2][0] }] : []);
239453
+ }
239454
+ var init_reply_anchors = __esm({
239455
+ "../server/src/domains/delegations/reply-anchors.ts"() {
239456
+ "use strict";
239457
+ init_service3();
239458
+ }
239459
+ });
239460
+
239397
239461
  // ../server/src/domains/chat-sessions/project-bundle.ts
239398
239462
  async function buildChatProjectBundle(projectId2, projects, readBlob) {
239399
239463
  const project = await projects.getProject(projectId2);
@@ -239493,7 +239557,11 @@ function mapChatItemToSnapshotEntry(row) {
239493
239557
  ord: row.ord,
239494
239558
  messageId: row.messageId,
239495
239559
  updatedAt: row.updatedAt,
239496
- payload: row.payload
239560
+ payload: {
239561
+ ...row.payload && typeof row.payload === "object" && !Array.isArray(row.payload) ? row.payload : {},
239562
+ createdAt: row.createdAt,
239563
+ completedAt: row.completedAt
239564
+ }
239497
239565
  };
239498
239566
  }
239499
239567
  function throwWorkdirError(code2) {
@@ -240015,6 +240083,7 @@ function createChatSessionsDomain(opts) {
240015
240083
  /* 与协调者读口**同一个函数**——两侧 artifacts 有「逐字同源」的既有断言。它顺带给每份产物
240016
240084
  填上 `childMessageId`(子会话面板把产出卡挂到产出它的那一轮下面要用)。 */
240017
240085
  artifacts: delegationArtifactsView(record8),
240086
+ replyAnchors: delegationReplyAnchors(record8),
240018
240087
  createdAt: record8.createdAt,
240019
240088
  ...record8.settledAt ? { settledAt: record8.settledAt } : {}
240020
240089
  });
@@ -240402,6 +240471,7 @@ var init_chat_sessions2 = __esm({
240402
240471
  init_workorders();
240403
240472
  init_chat_parts();
240404
240473
  init_service3();
240474
+ init_reply_anchors();
240405
240475
  init_injected_context();
240406
240476
  init_deletion();
240407
240477
  init_chat_turn_gate();
@@ -263800,6 +263870,16 @@ function pickDecisionContent(d) {
263800
263870
 
263801
263871
  // ../server/src/domains/discussions/context.ts
263802
263872
  init_project_bundle();
263873
+ var decisionLabels = {
263874
+ proposed: "\u63D0\u8BAE\u4E2D",
263875
+ accepted: "\u5DF2\u786E\u8BA4",
263876
+ rejected: "\u5DF2\u5426\u51B3",
263877
+ superseded: "\u5DF2\u88AB\u66FF\u4EE3",
263878
+ withdrawn: "\u5DF2\u64A4\u9500"
263879
+ };
263880
+ function listField(label, items) {
263881
+ return items.length > 1 ? [`- ${label}\uFF1A`, ...items.map((item) => ` - ${item}`)] : [`- ${label}\uFF1A${items[0] ?? "\u65E0"}`];
263882
+ }
263803
263883
  function renderDiscussionContext(input) {
263804
263884
  const lines = [
263805
263885
  "# \u5F53\u524D\u4F1A\u8BDD\u4E0A\u4E0B\u6587",
@@ -263820,44 +263900,37 @@ function renderDiscussionContext(input) {
263820
263900
  if (!input.discussions.length) lines.push("\u5F53\u524D\u6682\u65E0\u5386\u53F2\u8BA8\u8BBA\u8BB0\u5F55\u3002", "");
263821
263901
  for (const row of input.discussions) {
263822
263902
  const d = row.value.record;
263903
+ const topicNames = d.topics.map((t) => input.topics.find((topic) => topic.value.projectId === d.project_id && topic.value.topicId === t.topic_id)?.value.title ?? "\u8BAE\u9898\u540D\u79F0\u7F3A\u5931");
263823
263904
  lines.push(
263824
- `### ${d.session_id}\uFF1A${d.title}`,
263825
- `- \u9879\u76EE\u5F52\u5C5E\uFF1A${d.project_id ?? "\u975E\u9879\u76EE\u8BA8\u8BBA"}`,
263826
- `- \u53C2\u4E0E\u7528\u6237\uFF1A${d.participant_user}`,
263827
- `- \u53C2\u4E0E\u667A\u80FD\u4F53\uFF1A${d.participant_agent}`,
263828
- `- \u6700\u540E\u8986\u76D6\u7684\u5BF9\u8BDD\u65F6\u95F4\uFF1A${row.value.discussedAt}`,
263829
- `- \u6D88\u606F\u622A\u6B62\u70B9\uFF1A${d.source_cutoff}`,
263905
+ `### ${d.title}`,
263906
+ "",
263907
+ ...!input.projectId ? [`- \u9879\u76EE\u5F52\u5C5E\uFF1A${d.project_id ?? "\u975E\u9879\u76EE\u8BA8\u8BBA"}`] : [],
263908
+ `- \u8BA8\u8BBA\u65E5\u671F\uFF1A${row.value.discussedAt.slice(0, 10)}`,
263830
263909
  `- \u6458\u8981\uFF1A${d.summary}`,
263831
- "- \u6D89\u53CA\u8BAE\u9898\uFF1A",
263832
- ...d.topics.map((t) => ` - ${t.topic_id}\uFF1A${t.summary}`),
263833
- "- \u672A\u51B3\u95EE\u9898\uFF1A",
263834
- ...d.open_questions.map((q2) => ` - ${q2}`),
263835
- "- \u4E0B\u4E00\u6B65\uFF1A",
263836
- ...d.next_steps.map((n) => ` - ${n}`),
263910
+ `- \u6D89\u53CA\u8BAE\u9898\uFF1A${topicNames.join("\u3001") || "\u65E0"}`,
263911
+ ...listField("\u672A\u51B3\u95EE\u9898", d.open_questions),
263912
+ ...listField("\u4E0B\u4E00\u6B65", d.next_steps),
263837
263913
  ""
263838
263914
  );
263839
263915
  }
263840
263916
  if (input.projectId) {
263841
- lines.push("## \u9879\u76EE\u8BAE\u9898\u4E0E\u51B3\u7B56", "", "\u4EC5 accepted \u8868\u793A\u5DF2\u786E\u8BA4\uFF1Bproposed \u5C1A\u672A\u786E\u8BA4\uFF1Brejected / withdrawn / superseded \u4E3A\u5931\u6548\u6216\u5386\u53F2\u65B9\u6848\u3002", "");
263917
+ lines.push("## \u9879\u76EE\u8BAE\u9898\u4E0E\u51B3\u7B56", "", "\u4EC5\u201C\u5DF2\u786E\u8BA4\u201D\u8868\u793A\u5DF2\u786E\u8BA4\u65B9\u6848\uFF1B\u201C\u63D0\u8BAE\u4E2D\u201D\u5C1A\u672A\u786E\u8BA4\uFF1B\u201C\u5DF2\u5426\u51B3\u201D\u201C\u5DF2\u64A4\u9500\u201D\u201C\u5DF2\u88AB\u66FF\u4EE3\u201D\u4E3A\u5931\u6548\u6216\u5386\u53F2\u65B9\u6848\u3002", "");
263842
263918
  if (!input.topics.length) lines.push("\u5F53\u524D\u6682\u65E0\u9879\u76EE\u8BAE\u9898\u4E0E\u51B3\u7B56\u3002", "");
263843
263919
  for (const t of input.topics) {
263844
- lines.push(`### ${t.value.topicId}\uFF1A${t.value.title}`, "");
263920
+ lines.push(`### \u8BAE\u9898\uFF1A${t.value.title}`, "");
263845
263921
  const decisions = input.decisions.filter((d) => d.value.topicId === t.value.topicId);
263846
263922
  if (!decisions.length) lines.push("\u6682\u65E0\u51B3\u7B56\u3002", "");
263847
- for (const d of decisions) {
263923
+ for (const [index2, d] of decisions.entries()) {
263848
263924
  const r = d.value.record;
263849
263925
  lines.push(
263850
- `#### ${d.value.decisionId}`,
263851
- `- \u72B6\u6001\uFF1A${r.state}`,
263852
- `- \u65B9\u6848\uFF1A${r.statement}`,
263853
- `- \u539F\u56E0\uFF1A${r.rationale}`,
263926
+ `#### \u51B3\u7B56 ${index2 + 1}\uFF1A${r.statement}`,
263927
+ "",
263928
+ `- \u72B6\u6001\uFF1A${decisionLabels[r.state]}`,
263929
+ `- \u539F\u56E0\uFF1A${r.rationale || "\u672A\u8BF4\u660E"}`,
263854
263930
  `- \u786E\u8BA4\u4EBA\uFF1A${r.confirmer ?? "\u672A\u786E\u8BA4"}`,
263855
- "- \u5907\u9009\u65B9\u6848\u53CA\u7406\u7531\uFF1A",
263856
- ...r.alternatives.map((a) => ` - ${a.statement}\uFF1A${a.reason}`),
263857
- "- \u6D88\u606F\u6765\u6E90\uFF1A",
263858
- ...r.source_refs.map((s2) => ` - ${s2.session_id} / ${s2.message_id}\uFF1A${JSON.stringify(s2.content)}`),
263859
- `- \u66FF\u4EE3\u5173\u7CFB\uFF1A${r.supersedes.join("\u3001") || "\u65E0"}`,
263860
- `- \u6700\u8FD1\u66F4\u65B0\u65F6\u95F4\uFF1A${r.updated_at}`,
263931
+ ...listField("\u5907\u9009\u65B9\u6848", r.alternatives.map((a) => `${a.statement}\uFF0C${a.reason || "\u672A\u8BF4\u660E\u539F\u56E0"}`)),
263932
+ ...r.supersedes.length ? listField("\u66FF\u4EE3\u51B3\u7B56", r.supersedes.map((id) => input.decisions.find((other) => other.value.decisionId === id)?.value.record.statement ?? "\u672A\u627E\u5230\u5BF9\u5E94\u51B3\u7B56")) : [],
263933
+ `- \u66F4\u65B0\u65F6\u95F4\uFF1A${r.updated_at.slice(0, 10)}`,
263861
263934
  ""
263862
263935
  );
263863
263936
  }
@@ -263890,7 +263963,12 @@ var DiscussionContext = class {
263890
263963
  let discussions = (await tx.list("discussion")).filter((r) => r.value.userId === session.humanActorId);
263891
263964
  discussions.sort((a, b2) => Date.parse(a.value.discussedAt) - Date.parse(b2.value.discussedAt) || a.id.localeCompare(b2.id));
263892
263965
  discussions = projectId2 ? discussions.filter((r) => r.value.record.project_id === projectId2) : discussions.slice(-10);
263893
- const view = projectId2 ? await this.service.view(projectId2, tx) : { topics: [], decisions: [] };
263966
+ const discussionProjects = new Set(discussions.map((d) => d.value.record.project_id));
263967
+ const view = projectId2 ? await this.service.view(projectId2, tx) : {
263968
+ // Resolve names for the selected personal history without loading project decisions.
263969
+ topics: (await tx.list("topic")).filter((t) => discussionProjects.has(t.value.projectId)),
263970
+ decisions: []
263971
+ };
263894
263972
  const markdown = renderDiscussionContext({
263895
263973
  userName,
263896
263974
  projectId: projectId2,
@@ -264568,6 +264646,15 @@ function transcriptTail(ref2) {
264568
264646
  return "";
264569
264647
  }
264570
264648
  }
264649
+ var SUMMARY_MAX_CHARS = 500;
264650
+ function clipLine(line) {
264651
+ return line.length > SUMMARY_MAX_CHARS ? `${line.slice(0, SUMMARY_MAX_CHARS)}\u2026` : line;
264652
+ }
264653
+ function providerMessage(line) {
264654
+ const m2 = /['"]message['"]\s*:\s*(?:'((?:[^'\\]|\\.)*)'|"((?:[^"\\]|\\.)*)")/.exec(line);
264655
+ const text6 = (m2?.[1] ?? m2?.[2])?.trim();
264656
+ return text6 ? text6 : void 0;
264657
+ }
264571
264658
  function buildChatExitError(info) {
264572
264659
  const genericLine = `runtime exited with code ${info.code ?? "null"}${info.reason ? ` (${info.reason})` : ""}`;
264573
264660
  let detail = "";
@@ -264577,8 +264664,9 @@ function buildChatExitError(info) {
264577
264664
  }
264578
264665
  const firstDetailLine = detail.split("\n").map((line) => line.trim()).find(Boolean) ?? "";
264579
264666
  const firstErrorLine = info.errorMessage?.split("\n").map((line) => line.trim()).find(Boolean) ?? "";
264667
+ const readableError = firstErrorLine ? clipLine(providerMessage(firstErrorLine) ?? firstErrorLine) : "";
264580
264668
  const fixed = info.reason ? SUMMARY_BY_REASON[info.reason] : void 0;
264581
- const summary = fixed ? firstErrorLine && info.reason !== "cancelled" && info.reason !== "timeout" ? `${fixed}\uFF1A${firstErrorLine.slice(0, 200)}` : fixed : firstDetailLine ? `\u5BF9\u8BDD\u5931\u8D25\uFF1A${firstDetailLine.slice(0, 200)}` : `\u5BF9\u8BDD\u5931\u8D25\uFF08${genericLine}\uFF09`;
264669
+ const summary = fixed ? readableError && info.reason !== "cancelled" && info.reason !== "timeout" ? `${fixed}\uFF1A${readableError}` : fixed : readableError ? `\u5BF9\u8BDD\u5931\u8D25\uFF1A${readableError}` : firstDetailLine ? `\u5BF9\u8BDD\u5931\u8D25\uFF1A${clipLine(firstDetailLine)}` : `\u5BF9\u8BDD\u5931\u8D25\uFF08${genericLine}\uFF09`;
264582
264670
  const chatExit = {
264583
264671
  ...info.reason ? { reason: info.reason } : {},
264584
264672
  summary,
@@ -279037,7 +279125,7 @@ function shimScript() {
279037
279125
  }
279038
279126
 
279039
279127
  // src/index.ts
279040
- var PKG_VERSION = true ? "2.2.47" : "dev";
279128
+ var PKG_VERSION = true ? "2.2.48" : "dev";
279041
279129
  var LOCAL_BIN = localBin();
279042
279130
  var NPM_PREFIX = npmPrefix();
279043
279131
  var INSTANCE = DEFAULT_INSTANCE;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test_v2",
3
- "version": "2.2.47",
3
+ "version": "2.2.48",
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": "98d67615dd3606fcebb19d6561d2a5e7abe5ae31"
29
+ "sourceHead": "e73f3d47b4a699e20634f714e27dd2dd31e4082c"
30
30
  }
31
31
  }