oasis_test 0.1.33 → 0.1.35

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 +168 -68
  2. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -24550,7 +24550,7 @@ async function startOasisServer(opts) {
24550
24550
  const chatStore = opts.chatSession;
24551
24551
  const ws = review.workspace ?? engine.kernel.model.artifacts.get(review.anchor)?.workspace ?? null;
24552
24552
  let target = review.origin ?? discussSessions.get(`draft:${review.draftId}`) ?? void 0;
24553
- let record4 = target && chatStore ? await chatStore.getSession(target).catch(() => null) : null;
24553
+ let record5 = target && chatStore ? await chatStore.getSession(target).catch(() => null) : null;
24554
24554
  if (!target && chatStore && ws) {
24555
24555
  const brief = [...engine.kernel.model.artifacts.values()].find((x2) => x2.type === "brief" && x2.workspace === ws);
24556
24556
  if (brief) {
@@ -24559,7 +24559,7 @@ async function startOasisServer(opts) {
24559
24559
  const wos = await chatStore.listWorkOrdersForSession(s2.id).catch(() => []);
24560
24560
  if (wos.includes(ws)) {
24561
24561
  target = s2.id;
24562
- record4 = s2;
24562
+ record5 = s2;
24563
24563
  break;
24564
24564
  }
24565
24565
  }
@@ -24570,7 +24570,7 @@ async function startOasisServer(opts) {
24570
24570
  if (chatStore) {
24571
24571
  await chatStore.appendMessage({ id: randomUUID18(), sessionId: target, role: "user", content: message, createdAt: (/* @__PURE__ */ new Date()).toISOString() }).catch(() => void 0);
24572
24572
  }
24573
- const rt = record4?.runtimeSessionId ?? opts.retainedSession?.({ draftId: review.draftId });
24573
+ const rt = record5?.runtimeSessionId ?? opts.retainedSession?.({ draftId: review.draftId });
24574
24574
  const session = await opts.dispatchChat({
24575
24575
  actorId: review.proposedBy,
24576
24576
  message,
@@ -25668,14 +25668,14 @@ var init_tokens = __esm({
25668
25668
  };
25669
25669
  isTokenClaims = (value) => {
25670
25670
  if (value === null || typeof value !== "object") return false;
25671
- const record4 = value;
25672
- if (typeof record4["actor"] !== "string" || !record4["actor"].startsWith("actor:")) return false;
25673
- if (typeof record4["issuedAt"] !== "number" || !Number.isFinite(record4["issuedAt"])) return false;
25674
- if (record4["expiresAt"] !== void 0 && (typeof record4["expiresAt"] !== "number" || !Number.isFinite(record4["expiresAt"]))) return false;
25675
- if (record4["dispatchSeq"] !== void 0 && (typeof record4["dispatchSeq"] !== "number" || !Number.isFinite(record4["dispatchSeq"]))) return false;
25676
- if (record4["scopes"] !== void 0 && (!Array.isArray(record4["scopes"]) || record4["scopes"].some((scope) => typeof scope !== "string"))) return false;
25671
+ const record5 = value;
25672
+ if (typeof record5["actor"] !== "string" || !record5["actor"].startsWith("actor:")) return false;
25673
+ if (typeof record5["issuedAt"] !== "number" || !Number.isFinite(record5["issuedAt"])) return false;
25674
+ if (record5["expiresAt"] !== void 0 && (typeof record5["expiresAt"] !== "number" || !Number.isFinite(record5["expiresAt"]))) return false;
25675
+ if (record5["dispatchSeq"] !== void 0 && (typeof record5["dispatchSeq"] !== "number" || !Number.isFinite(record5["dispatchSeq"]))) return false;
25676
+ if (record5["scopes"] !== void 0 && (!Array.isArray(record5["scopes"]) || record5["scopes"].some((scope) => typeof scope !== "string"))) return false;
25677
25677
  for (const key of ["sessionId", "artifactId", "action", "nodeId", "runtimeKind", "companyId", "chatSessionId"]) {
25678
- if (record4[key] !== void 0 && typeof record4[key] !== "string") return false;
25678
+ if (record5[key] !== void 0 && typeof record5[key] !== "string") return false;
25679
25679
  }
25680
25680
  return true;
25681
25681
  };
@@ -27877,9 +27877,9 @@ var init_service = __esm({
27877
27877
  ...input.revision.continuation ? { continuation: input.revision.continuation } : {}
27878
27878
  });
27879
27879
  await this.syncProjection();
27880
- const record4 = await this.artifacts.getRevision(kernelRevision.id);
27881
- if (!record4) throw new Error(`revision projection missing after register: ${kernelRevision.id}`);
27882
- return record4;
27880
+ const record5 = await this.artifacts.getRevision(kernelRevision.id);
27881
+ if (!record5) throw new Error(`revision projection missing after register: ${kernelRevision.id}`);
27882
+ return record5;
27883
27883
  }
27884
27884
  async approveArtifactRevision(input) {
27885
27885
  if (input.actorKind !== "human") throw namedError("AgentReviewForbidden", "agents cannot approve artifact revisions");
@@ -27982,9 +27982,9 @@ var init_service = __esm({
27982
27982
  ...input.revisionId ? { revisionId: input.revisionId } : {}
27983
27983
  });
27984
27984
  await this.syncProjection();
27985
- const record4 = await this.artifacts.getAnnotation(kernelAnnotation.id);
27986
- if (!record4) throw new Error(`annotation projection missing after create: ${kernelAnnotation.id}`);
27987
- return record4;
27985
+ const record5 = await this.artifacts.getAnnotation(kernelAnnotation.id);
27986
+ if (!record5) throw new Error(`annotation projection missing after create: ${kernelAnnotation.id}`);
27987
+ return record5;
27988
27988
  }
27989
27989
  async resolveArtifactAnnotation(input) {
27990
27990
  const artifact = await this.artifacts.getArtifact(input.artifactId);
@@ -28000,9 +28000,9 @@ var init_service = __esm({
28000
28000
  ...input.comment?.trim() ? { note: input.comment.trim() } : {}
28001
28001
  });
28002
28002
  await this.syncProjection();
28003
- const record4 = await this.artifacts.getAnnotation(input.annotationId);
28004
- if (!record4) throw new Error(`annotation projection missing after resolve: ${input.annotationId}`);
28005
- return record4;
28003
+ const record5 = await this.artifacts.getAnnotation(input.annotationId);
28004
+ if (!record5) throw new Error(`annotation projection missing after resolve: ${input.annotationId}`);
28005
+ return record5;
28006
28006
  }
28007
28007
  async registerNodeOutput(input) {
28008
28008
  await this.assertProjectExecutable(input.projectId);
@@ -28679,10 +28679,10 @@ var init_dev_store = __esm({
28679
28679
  async appendMessage(m2) {
28680
28680
  const list = this.messages.get(m2.sessionId) ?? [];
28681
28681
  const seq = (list.length ? Math.max(...list.map((x2) => x2.seq)) : 0) + 1;
28682
- const record4 = { ...m2, seq };
28683
- list.push(record4);
28682
+ const record5 = { ...m2, seq };
28683
+ list.push(record5);
28684
28684
  this.messages.set(m2.sessionId, list);
28685
- return record4;
28685
+ return record5;
28686
28686
  }
28687
28687
  async listMessages(sessionId, limit) {
28688
28688
  const list = (this.messages.get(sessionId) ?? []).sort((a, b2) => a.seq - b2.seq);
@@ -28728,9 +28728,9 @@ var init_dev_store = __esm({
28728
28728
  this.save();
28729
28729
  }
28730
28730
  async appendMessage(m2) {
28731
- const record4 = await super.appendMessage(m2);
28731
+ const record5 = await super.appendMessage(m2);
28732
28732
  this.save();
28733
- return record4;
28733
+ return record5;
28734
28734
  }
28735
28735
  async linkWorkOrder(sessionId, workOrderId) {
28736
28736
  await super.linkWorkOrder(sessionId, workOrderId);
@@ -33409,19 +33409,19 @@ var init_service2 = __esm({
33409
33409
  async upsertActor(a, by) {
33410
33410
  const existing = await this.opts.store.getActor(a.id);
33411
33411
  const roles = a.roles ?? existing?.roles ?? [];
33412
- const record4 = { ...a, roles, createdAt: existing?.createdAt ?? a.createdAt ?? this.now() };
33413
- if (isActiveCoordinatorAgent(record4)) {
33414
- const existingCoordinator = (await this.opts.store.listActors({ kind: "agent", status: "active" })).find((actor) => actor.id !== record4.id && isActiveCoordinatorAgent(actor));
33412
+ const record5 = { ...a, roles, createdAt: existing?.createdAt ?? a.createdAt ?? this.now() };
33413
+ if (isActiveCoordinatorAgent(record5)) {
33414
+ const existingCoordinator = (await this.opts.store.listActors({ kind: "agent", status: "active" })).find((actor) => actor.id !== record5.id && isActiveCoordinatorAgent(actor));
33415
33415
  if (existingCoordinator) {
33416
33416
  throw new Error(
33417
- `\u7CFB\u7EDF\u53EA\u80FD\u6709\u4E00\u4E2A\u534F\u8C03\u8005\u667A\u80FD\u4F53\uFF1A\u5DF2\u5B58\u5728 ${existingCoordinator.name}\uFF08${existingCoordinator.id}\uFF09\uFF0C\u4E0D\u80FD\u518D\u521B\u5EFA\u6216\u542F\u7528 ${record4.name}\uFF08${record4.id}\uFF09\u3002`
33417
+ `\u7CFB\u7EDF\u53EA\u80FD\u6709\u4E00\u4E2A\u534F\u8C03\u8005\u667A\u80FD\u4F53\uFF1A\u5DF2\u5B58\u5728 ${existingCoordinator.name}\uFF08${existingCoordinator.id}\uFF09\uFF0C\u4E0D\u80FD\u518D\u521B\u5EFA\u6216\u542F\u7528 ${record5.name}\uFF08${record5.id}\uFF09\u3002`
33418
33418
  );
33419
33419
  }
33420
33420
  }
33421
- await this.opts.store.upsertActor(record4);
33422
- this.opts.onRolesChanged?.(record4.id, record4.status === "active" ? roles : []);
33421
+ await this.opts.store.upsertActor(record5);
33422
+ this.opts.onRolesChanged?.(record5.id, record5.status === "active" ? roles : []);
33423
33423
  await this.audit({ kind: "actor_upsert", actorId: a.id, by, at: this.now(), detail: { status: a.status, roles } });
33424
- return record4;
33424
+ return record5;
33425
33425
  }
33426
33426
  /** 删除即停用(2.1 完成标准) */
33427
33427
  async disableActor(id, by) {
@@ -33437,10 +33437,10 @@ var init_service2 = __esm({
33437
33437
  const a = await this.opts.store.getActor(id);
33438
33438
  if (!a) throw new Error(`actor not found: ${id}`);
33439
33439
  const { avatar: _drop, ...rest } = a;
33440
- const record4 = ref === null ? rest : { ...rest, avatar: ref };
33441
- await this.opts.store.upsertActor(record4);
33440
+ const record5 = ref === null ? rest : { ...rest, avatar: ref };
33441
+ await this.opts.store.upsertActor(record5);
33442
33442
  await this.audit({ kind: "actor_upsert", actorId: id, by, at: this.now(), detail: { avatar: ref ?? "cleared" } });
33443
- return record4;
33443
+ return record5;
33444
33444
  }
33445
33445
  /** 设置/清除团队图标引用(同头像约定;不接受 emoji,只接受 blob 引用) */
33446
33446
  async setTeamIcon(teamId, ref) {
@@ -33853,13 +33853,13 @@ ${input.description}
33853
33853
  this.opts.store.listConnectors()
33854
33854
  ]);
33855
33855
  const globalConnected = new Set(connectors.filter((c) => c.status === "connected").map((c) => c.id));
33856
- const record4 = new Map(connections.map((c) => [c.connectorId, c.enabled]));
33856
+ const record5 = new Map(connections.map((c) => [c.connectorId, c.enabled]));
33857
33857
  const legacy = new Set(config2?.connectorIds ?? []);
33858
- const ids = /* @__PURE__ */ new Set([...record4.keys(), ...legacy, ...globalConnected]);
33858
+ const ids = /* @__PURE__ */ new Set([...record5.keys(), ...legacy, ...globalConnected]);
33859
33859
  const effective = /* @__PURE__ */ new Set();
33860
33860
  for (const id of ids) {
33861
- if (record4.has(id)) {
33862
- if (record4.get(id)) effective.add(id);
33861
+ if (record5.has(id)) {
33862
+ if (record5.get(id)) effective.add(id);
33863
33863
  } else if (legacy.has(id)) effective.add(id);
33864
33864
  else if (globalConnected.has(id)) effective.add(id);
33865
33865
  }
@@ -38089,9 +38089,105 @@ var init_codex = __esm({
38089
38089
  function newUsageAcc() {
38090
38090
  return { inputTokens: 0, outputTokens: 0, cacheReadTokens: 0, cacheCreationTokens: 0 };
38091
38091
  }
38092
+ function addToken(acc, value, field) {
38093
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) {
38094
+ acc[field] += value;
38095
+ }
38096
+ }
38097
+ function record3(value) {
38098
+ return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
38099
+ }
38100
+ function firstNumber(src, keys) {
38101
+ for (const key of keys) {
38102
+ const value = src[key];
38103
+ if (typeof value === "number" && Number.isFinite(value) && value > 0) return value;
38104
+ }
38105
+ return void 0;
38106
+ }
38107
+ function addFirstToken(acc, src, keys, field) {
38108
+ const before = acc[field];
38109
+ addToken(acc, firstNumber(src, keys), field);
38110
+ return acc[field] !== before;
38111
+ }
38112
+ function accumulateTokenFields(acc, src) {
38113
+ let changed = false;
38114
+ changed = addFirstToken(acc, src, [
38115
+ "input_tokens",
38116
+ "inputTokens",
38117
+ "prompt_tokens",
38118
+ "promptTokens",
38119
+ "promptTokenCount",
38120
+ "inputTokenCount",
38121
+ "input"
38122
+ ], "inputTokens") || changed;
38123
+ changed = addFirstToken(acc, src, [
38124
+ "output_tokens",
38125
+ "outputTokens",
38126
+ "completion_tokens",
38127
+ "completionTokens",
38128
+ "completionTokenCount",
38129
+ "candidatesTokenCount",
38130
+ "response_tokens",
38131
+ "responseTokens",
38132
+ "generated_tokens",
38133
+ "generatedTokens",
38134
+ "outputTokenCount",
38135
+ "output"
38136
+ ], "outputTokens") || changed;
38137
+ changed = addFirstToken(acc, src, [
38138
+ "cached_read_tokens",
38139
+ "cachedReadTokens",
38140
+ "cacheReadTokens",
38141
+ "cache_read_input_tokens",
38142
+ "cacheReadInputTokens",
38143
+ "cached_input_tokens",
38144
+ "cachedInputTokens",
38145
+ "cached_tokens",
38146
+ "cachedTokens",
38147
+ "cachedContentTokenCount"
38148
+ ], "cacheReadTokens") || changed;
38149
+ changed = addFirstToken(acc, src, [
38150
+ "cache_creation_input_tokens",
38151
+ "cacheCreationTokens",
38152
+ "cacheCreationInputTokens",
38153
+ "cache_creation_tokens",
38154
+ "cache_write_input_tokens",
38155
+ "cacheWriteInputTokens",
38156
+ "cache_write_tokens",
38157
+ "cacheWriteTokens"
38158
+ ], "cacheCreationTokens") || changed;
38159
+ const promptDetails = record3(src["prompt_tokens_details"]) ?? record3(src["promptTokensDetails"]);
38160
+ if (promptDetails) {
38161
+ changed = addFirstToken(acc, promptDetails, ["cached_tokens", "cachedTokens"], "cacheReadTokens") || changed;
38162
+ }
38163
+ return changed;
38164
+ }
38165
+ function accumulateUsage(acc, value) {
38166
+ const root = record3(value);
38167
+ if (!root) return false;
38168
+ const candidates = [
38169
+ root,
38170
+ record3(root["usage"]),
38171
+ record3(root["token_usage"]),
38172
+ record3(root["tokenUsage"]),
38173
+ record3(root["tokens"]),
38174
+ record3(root["usageMetadata"]),
38175
+ record3(root["usage_metadata"])
38176
+ ];
38177
+ const seen = /* @__PURE__ */ new Set();
38178
+ let changed = false;
38179
+ for (const candidate of candidates) {
38180
+ if (!candidate || seen.has(candidate)) continue;
38181
+ seen.add(candidate);
38182
+ changed = accumulateTokenFields(acc, candidate) || changed;
38183
+ }
38184
+ return changed;
38185
+ }
38186
+ function hasUsage(acc) {
38187
+ return acc.inputTokens > 0 || acc.outputTokens > 0 || acc.cacheReadTokens > 0 || acc.cacheCreationTokens > 0;
38188
+ }
38092
38189
  function buildUsage(acc, costUsdMicros) {
38093
- const hasTokens = acc.inputTokens > 0 || acc.outputTokens > 0 || acc.cacheReadTokens > 0 || acc.cacheCreationTokens > 0;
38094
- if (!hasTokens && costUsdMicros == null) return void 0;
38190
+ if (!hasUsage(acc) && costUsdMicros == null) return void 0;
38095
38191
  return {
38096
38192
  inputTokens: acc.inputTokens || null,
38097
38193
  outputTokens: acc.outputTokens || null,
@@ -38262,7 +38358,7 @@ var init_pricing = __esm({
38262
38358
  });
38263
38359
 
38264
38360
  // ../adapters/src/_core/acp.ts
38265
- function record3(value) {
38361
+ function record4(value) {
38266
38362
  return value && typeof value === "object" && !Array.isArray(value) ? value : void 0;
38267
38363
  }
38268
38364
  function firstString(...values) {
@@ -38277,11 +38373,11 @@ function textFromUnknown(value) {
38277
38373
  const parts = value.map(textFromUnknown).filter((x2) => Boolean(x2));
38278
38374
  return parts.length ? parts.join("") : void 0;
38279
38375
  }
38280
- const obj = record3(value);
38376
+ const obj = record4(value);
38281
38377
  if (!obj) return void 0;
38282
- const direct = firstString(obj["text"], obj["delta"], obj["message"], record3(obj["error"])?.["message"]);
38378
+ const direct = firstString(obj["text"], obj["delta"], obj["message"], record4(obj["error"])?.["message"]);
38283
38379
  if (direct) return direct;
38284
- return textFromUnknown(obj["content"]) ?? textFromUnknown(record3(obj["result"])?.["content"]) ?? textFromUnknown(obj["result"]);
38380
+ return textFromUnknown(obj["content"]) ?? textFromUnknown(record4(obj["result"])?.["content"]) ?? textFromUnknown(obj["result"]);
38285
38381
  }
38286
38382
  function jsonLike(value) {
38287
38383
  if (typeof value !== "string") return value;
@@ -38296,15 +38392,15 @@ function jsonLike(value) {
38296
38392
  return { text: value };
38297
38393
  }
38298
38394
  function toolPayload(data) {
38299
- const d = record3(data) ?? {};
38300
- const nested = record3(d["toolCall"]) ?? record3(d["tool_call"]) ?? record3(d["call"]) ?? record3(d["tool"]) ?? record3(d["data"]) ?? {};
38395
+ const d = record4(data) ?? {};
38396
+ const nested = record4(d["toolCall"]) ?? record4(d["tool_call"]) ?? record4(d["call"]) ?? record4(d["tool"]) ?? record4(d["data"]) ?? {};
38301
38397
  return { ...nested, ...d };
38302
38398
  }
38303
38399
  function toolCallIdOf(d) {
38304
38400
  return firstString(d["toolCallId"], d["tool_call_id"], d["callId"], d["call_id"], d["id"]);
38305
38401
  }
38306
38402
  function toolNameOf(d) {
38307
- return firstString(d["name"], d["toolName"], d["tool_name"], record3(d["tool"])?.["name"]) ?? toolNameFromTitle(firstString(d["title"]) ?? "", firstString(d["kind"]) ?? "");
38403
+ return firstString(d["name"], d["toolName"], d["tool_name"], record4(d["tool"])?.["name"]) ?? toolNameFromTitle(firstString(d["title"]) ?? "", firstString(d["kind"]) ?? "");
38308
38404
  }
38309
38405
  function inputFromTitle(title, toolName) {
38310
38406
  const colon = title.indexOf(":");
@@ -38346,7 +38442,7 @@ function argsTextOf(d) {
38346
38442
  return typeof value === "string" ? value : void 0;
38347
38443
  }
38348
38444
  function toolOutputOf(d) {
38349
- const error2 = record3(d["error"]);
38445
+ const error2 = record4(d["error"]);
38350
38446
  if (error2) return error2["message"] ?? error2;
38351
38447
  const raw = d["rawOutput"] ?? d["raw_output"] ?? d["output"] ?? d["result"] ?? d["results"] ?? d["response"] ?? d["data"] ?? d["content"];
38352
38448
  const stream = compactRecord({
@@ -38384,7 +38480,7 @@ function parseJsonString(value) {
38384
38480
  function locationsOf(d) {
38385
38481
  const locations = d["locations"];
38386
38482
  if (!Array.isArray(locations)) return void 0;
38387
- const out = locations.filter((item) => Boolean(record3(item)));
38483
+ const out = locations.filter((item) => Boolean(record4(item)));
38388
38484
  return out.length ? out : void 0;
38389
38485
  }
38390
38486
  function statusOf(d) {
@@ -38435,6 +38531,8 @@ function normalizeUpdateType(t) {
38435
38531
  toolcallfinished: "tool_call_update",
38436
38532
  toolcallcompleted: "tool_call_update",
38437
38533
  usageupdate: "usage_update",
38534
+ usage: "usage_update",
38535
+ tokenusage: "usage_update",
38438
38536
  turnend: "turn_end",
38439
38537
  endturn: "turn_end"
38440
38538
  }[key] ?? "";
@@ -38733,7 +38831,10 @@ var init_acp = __esm({
38733
38831
  const msg = detail ? `${p2.method}: ${err.message} (code=${err.code}, data=${detail})` : `${p2.method}: ${err.message} (code=${err.code})`;
38734
38832
  p2.reject(Object.assign(new Error(msg), { code: err.code, data: detail }));
38735
38833
  } else {
38736
- if (p2.method === "session/prompt") this.extractStopReason(raw["result"]);
38834
+ if (p2.method === "session/prompt") {
38835
+ this.extractStopReason(raw["result"]);
38836
+ this.handleUsageFallback(raw["result"]);
38837
+ }
38737
38838
  p2.resolve(raw["result"]);
38738
38839
  }
38739
38840
  }
@@ -38772,18 +38873,15 @@ var init_acp = __esm({
38772
38873
  case "turn_end":
38773
38874
  this.flushTextBuffers();
38774
38875
  this.extractStopReason(updateData);
38876
+ this.handleUsageFallback(updateData);
38775
38877
  break;
38776
38878
  }
38777
38879
  }
38778
38880
  handleUsageUpdate(data) {
38779
- const d = record3(data);
38780
- if (!d) return;
38781
- const usage = record3(d["usage"]) ?? d;
38782
- const n = (v2) => typeof v2 === "number" && Number.isFinite(v2) ? v2 : 0;
38783
- this.usage.inputTokens += n(usage["inputTokens"] ?? usage["input_tokens"]);
38784
- this.usage.outputTokens += n(usage["outputTokens"] ?? usage["output_tokens"]);
38785
- this.usage.cacheReadTokens += n(usage["cachedReadTokens"] ?? usage["cached_read_tokens"] ?? usage["cacheReadTokens"]);
38786
- this.usage.cacheCreationTokens += n(usage["cacheCreationTokens"] ?? usage["cache_creation_input_tokens"]);
38881
+ accumulateUsage(this.usage, data);
38882
+ }
38883
+ handleUsageFallback(data) {
38884
+ if (!hasUsage(this.usage)) this.handleUsageUpdate(data);
38787
38885
  }
38788
38886
  extractStopReason(data) {
38789
38887
  this.flushTextBuffers();
@@ -38815,11 +38913,11 @@ var init_acp = __esm({
38815
38913
  this.flushTextBuffer("message");
38816
38914
  }
38817
38915
  handleAgentMessage(data) {
38818
- const text = textFromUnknown(record3(data)?.["content"] ?? data);
38916
+ const text = textFromUnknown(record4(data)?.["content"] ?? data);
38819
38917
  if (text) this.appendText("message", text);
38820
38918
  }
38821
38919
  handleAgentThought(data) {
38822
- const text = textFromUnknown(record3(data)?.["content"] ?? data);
38920
+ const text = textFromUnknown(record4(data)?.["content"] ?? data);
38823
38921
  if (text) this.appendText("thought", text);
38824
38922
  }
38825
38923
  handleToolCallStart(data) {
@@ -54396,10 +54494,10 @@ async function startServe(opts) {
54396
54494
  let nodeStore = await FileNodeStore.open(path16.join(opts.dir, "nodes.json"));
54397
54495
  const registryAuditFile = path16.join(opts.dir, "registry-audit.ndjson");
54398
54496
  const registryListeners = /* @__PURE__ */ new Set();
54399
- const registryAudit = (record4) => {
54400
- fs17.appendFile(registryAuditFile, JSON.stringify(record4) + "\n", () => {
54497
+ const registryAudit = (record5) => {
54498
+ fs17.appendFile(registryAuditFile, JSON.stringify(record5) + "\n", () => {
54401
54499
  });
54402
- for (const l of registryListeners) l({ kind: record4.kind, actor: record4.actor, target: record4.target, timestamp: record4.timestamp });
54500
+ for (const l of registryListeners) l({ kind: record5.kind, actor: record5.actor, target: record5.target, timestamp: record5.timestamp });
54403
54501
  };
54404
54502
  await syncRegistryRolesToKernel(registryStore, kernel);
54405
54503
  let builtinSkills = [];
@@ -57632,13 +57730,14 @@ ${res.warning}`);
57632
57730
  }
57633
57731
 
57634
57732
  // src/index.ts
57635
- var PKG_VERSION = true ? "0.1.33" : "dev";
57733
+ var PKG_VERSION = true ? "0.1.35" : "dev";
57636
57734
  var OASIS_DIR = path18.join(os10.homedir(), ".oasis");
57637
57735
  var CONFIG_FILE = path18.join(OASIS_DIR, "node-config.json");
57638
57736
  var PID_FILE = path18.join(OASIS_DIR, "node.pid");
57639
57737
  var BIN_FILE = path18.join(OASIS_DIR, "bin", "oasis.js");
57640
57738
  var LOCAL_BIN = path18.join(os10.homedir(), ".local", "bin", "oasis");
57641
57739
  var LOG_FILE = path18.join(OASIS_DIR, "node.log");
57740
+ var NPM_PREFIX = path18.join(OASIS_DIR, "npm-global");
57642
57741
  var PKG_NAME = "oasis_test";
57643
57742
  var parseFlags = (argv) => {
57644
57743
  const flags = /* @__PURE__ */ new Map();
@@ -57772,8 +57871,9 @@ function selfUpdate() {
57772
57871
  const cfg = readConfig();
57773
57872
  if (!cfg?.serverUrl) throw new Error("no config \u2014 run `oasis start` first");
57774
57873
  const nameArg = cfg.name ? ` --name '${cfg.name.replace(/'/g, "'\\''")}'` : "";
57775
- const startCmd = `"$(npm prefix -g)/bin/oasis" start --server-ws '${cfg.serverUrl}'${nameArg}`;
57776
- const inner = `sleep 2; npm install -g --prefer-online '${PKG_NAME}@latest' && ${startCmd} >> '${LOG_FILE}' 2>&1`;
57874
+ const oasisBin = path18.join(NPM_PREFIX, "bin", "oasis");
57875
+ const startCmd = `"${oasisBin}" start --server-ws '${cfg.serverUrl}'${nameArg}`;
57876
+ const inner = `{ echo "[oasis] self-update \u2192 npm install --prefix ${NPM_PREFIX} ${PKG_NAME}@latest"; sleep 2; npm install -g --prefer-online --prefix '${NPM_PREFIX}' '${PKG_NAME}@latest' && ${startCmd}; } >> '${LOG_FILE}' 2>&1`;
57777
57877
  const hasSystemd = process.platform === "linux" && (() => {
57778
57878
  try {
57779
57879
  (0, import_node_child_process15.execSync)("command -v systemd-run", { stdio: "ignore" });
@@ -57782,14 +57882,14 @@ function selfUpdate() {
57782
57882
  return false;
57783
57883
  }
57784
57884
  })();
57885
+ const log3 = fs19.openSync(LOG_FILE, "a");
57785
57886
  if (hasSystemd) {
57786
57887
  const child = (0, import_node_child_process15.spawn)("systemd-run", ["--user", "--scope", "--quiet", "sh", "-c", inner], {
57787
57888
  detached: true,
57788
- stdio: "ignore"
57889
+ stdio: ["ignore", log3, log3]
57789
57890
  });
57790
57891
  child.unref();
57791
57892
  } else {
57792
- const log3 = fs19.openSync(LOG_FILE, "a");
57793
57893
  const child = (0, import_node_child_process15.spawn)("sh", ["-c", inner], { detached: true, stdio: ["ignore", log3, log3] });
57794
57894
  child.unref();
57795
57895
  }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test",
3
- "version": "0.1.33",
3
+ "version": "0.1.35",
4
4
  "description": "Oasis node daemon + CLI — background daemon, auto-start, full server CLI",
5
5
  "bin": {
6
6
  "oasis": "./dist/index.js"