oasis_test 0.1.73 → 0.1.74

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 -142
  2. package/package.json +2 -2
package/dist/index.js CHANGED
@@ -142983,13 +142983,13 @@ async function startOasisServer(opts) {
142983
142983
  const actorCtx = await opts.resolveActorContext(body.actorId).catch(() => null);
142984
142984
  if (actorCtx) {
142985
142985
  const { mkdtempSync: mkdtempSync5, mkdirSync: mkdirSync20, writeFileSync: writeFileSync13 } = await import("node:fs");
142986
- const { join: join28, dirname: dirname25 } = await import("node:path");
142986
+ const { join: join28, dirname: dirname24 } = await import("node:path");
142987
142987
  const { tmpdir: tmpdir9 } = await import("node:os");
142988
142988
  const dir = mkdtempSync5(join28(tmpdir9(), "oasis-chat-"));
142989
142989
  if (actorCtx.config?.prompt) {
142990
142990
  for (const [rel, content] of Object.entries(splitIdentityFiles2(actorCtx.config.prompt))) {
142991
142991
  const file = join28(dir, rel);
142992
- mkdirSync20(dirname25(file), { recursive: true });
142992
+ mkdirSync20(dirname24(file), { recursive: true });
142993
142993
  writeFileSync13(file, content);
142994
142994
  }
142995
142995
  }
@@ -143006,7 +143006,7 @@ async function startOasisServer(opts) {
143006
143006
  const skillFiles = await opts.materializeSkills(body.actorId, "claude").catch(() => ({}));
143007
143007
  for (const [rel, content] of Object.entries(skillFiles)) {
143008
143008
  const file = join28(dir, rel);
143009
- mkdirSync20(dirname25(file), { recursive: true });
143009
+ mkdirSync20(dirname24(file), { recursive: true });
143010
143010
  writeFileSync13(file, content);
143011
143011
  }
143012
143012
  }
@@ -152106,6 +152106,73 @@ var init_registry2 = __esm({
152106
152106
  }
152107
152107
  });
152108
152108
 
152109
+ // ../connectors/src/logger.ts
152110
+ function ts() {
152111
+ return (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
152112
+ }
152113
+ function log(tag, msg, extra) {
152114
+ const suffix = extra ? " " + JSON.stringify(extra) : "";
152115
+ console.log(`[${ts()}] ${tag} ${msg}${suffix}`);
152116
+ }
152117
+ var init_logger = __esm({
152118
+ "../connectors/src/logger.ts"() {
152119
+ "use strict";
152120
+ }
152121
+ });
152122
+
152123
+ // ../connectors/src/prepare-job.ts
152124
+ async function prepareConnectorsForJob(job) {
152125
+ const creds = job.connectorCreds ?? [];
152126
+ const remoteWrappers = job.wrapperPaths ?? [];
152127
+ const localWrappers = [];
152128
+ const cleanups = [];
152129
+ const envOverrides = {};
152130
+ for (const { slug: slug5, credentials } of creds) {
152131
+ const connector = createConnectorBySlug(slug5);
152132
+ if (!connector) {
152133
+ log("[node-connectors]", `unknown connector slug from server: ${slug5}\uFF08\u8DF3\u8FC7\uFF09`);
152134
+ continue;
152135
+ }
152136
+ try {
152137
+ const sessionEnv = /* @__PURE__ */ new Map();
152138
+ await connector.inject(credentials, sessionEnv);
152139
+ for (const [k2, v2] of sessionEnv) envOverrides[k2] = v2;
152140
+ const staged = stageConnectorWrapper(connector);
152141
+ if (staged) localWrappers.push(staged);
152142
+ cleanups.push(() => connector.cleanup(sessionEnv));
152143
+ log("[node-connectors]", `${slug5}: creds + wrapper \u5DF2\u843D\u5728\u672C\u673A`);
152144
+ } catch (err) {
152145
+ log("[node-connectors]", `${slug5}: \u672C\u5730\u6CE8\u5165\u5931\u8D25\uFF08\u8BE5 connector \u672C\u8F6E\u4E0D\u53EF\u7528\uFF09: ${String(err)}`);
152146
+ }
152147
+ }
152148
+ const keptRemote = remoteWrappers.filter((p2) => (0, import_node_fs5.existsSync)(p2));
152149
+ const dropped = remoteWrappers.length - keptRemote.length;
152150
+ if (dropped > 0) log("[node-connectors]", `\u4E22\u5F03 ${dropped} \u6761\u672C\u673A\u4E0D\u5B58\u5728\u7684 wrapper \u8DEF\u5F84\uFF08server \u4FA7\u8DEF\u5F84\uFF09`);
152151
+ const basePath = job.env?.["PATH"] ?? process.env["PATH"] ?? "";
152152
+ const toolsBin = connectorToolsBinDir();
152153
+ const pathWithTools = basePath.split(":").includes(toolsBin) ? basePath : [toolsBin, basePath].filter(Boolean).join(":");
152154
+ const preparedJob = {
152155
+ ...job,
152156
+ env: { ...job.env ?? {}, ...envOverrides, PATH: pathWithTools },
152157
+ wrapperPaths: [...localWrappers, ...keptRemote]
152158
+ };
152159
+ const cleanup = async () => {
152160
+ for (const fn of cleanups) await fn().catch(() => {
152161
+ });
152162
+ };
152163
+ return { job: preparedJob, cleanup };
152164
+ }
152165
+ var import_node_fs5;
152166
+ var init_prepare_job = __esm({
152167
+ "../connectors/src/prepare-job.ts"() {
152168
+ "use strict";
152169
+ import_node_fs5 = require("node:fs");
152170
+ init_base();
152171
+ init_registry2();
152172
+ init_logger();
152173
+ }
152174
+ });
152175
+
152109
152176
  // ../adapters/src/open-design/driver.ts
152110
152177
  function deriveBoardKey(artifactId) {
152111
152178
  const tail = artifactId.split(":").pop() ?? artifactId;
@@ -152442,8 +152509,8 @@ function materializeFiles(dir, files) {
152442
152509
  for (const [rel, content] of Object.entries(files)) {
152443
152510
  try {
152444
152511
  const file = import_node_path7.default.join(dir, rel);
152445
- import_node_fs5.default.mkdirSync(import_node_path7.default.dirname(file), { recursive: true });
152446
- import_node_fs5.default.writeFileSync(file, content);
152512
+ import_node_fs6.default.mkdirSync(import_node_path7.default.dirname(file), { recursive: true });
152513
+ import_node_fs6.default.writeFileSync(file, content);
152447
152514
  } catch {
152448
152515
  }
152449
152516
  }
@@ -152476,26 +152543,26 @@ function sessionDirKind(runtimeKind) {
152476
152543
  }
152477
152544
  function resolveSessionDirWithLegacy(args) {
152478
152545
  const fresh = sessionDirFor(args.workRoot, args.runtimeKind, args.workdirKey);
152479
- if (import_node_fs5.default.existsSync(fresh)) return fresh;
152546
+ if (import_node_fs6.default.existsSync(fresh)) return fresh;
152480
152547
  if (!args.rtId) return fresh;
152481
152548
  const legacy = legacyChatSessionDir(args.workRoot, args.rtId);
152482
- return import_node_fs5.default.existsSync(legacy) ? legacy : fresh;
152549
+ return import_node_fs6.default.existsSync(legacy) ? legacy : fresh;
152483
152550
  }
152484
152551
  function oneShotDirFor(workRoot, runtimeKind) {
152485
152552
  const base = import_node_path7.default.join(resolveWorkRoot(workRoot), "tmp");
152486
- import_node_fs5.default.mkdirSync(base, { recursive: true });
152487
- return import_node_fs5.default.mkdtempSync(import_node_path7.default.join(base, `${runtimeKind}-`));
152553
+ import_node_fs6.default.mkdirSync(base, { recursive: true });
152554
+ return import_node_fs6.default.mkdtempSync(import_node_path7.default.join(base, `${runtimeKind}-`));
152488
152555
  }
152489
152556
  function writeMeta(dir, meta) {
152490
152557
  try {
152491
- import_node_fs5.default.writeFileSync(import_node_path7.default.join(dir, META_FILE), `${JSON.stringify(meta, null, 2)}
152558
+ import_node_fs6.default.writeFileSync(import_node_path7.default.join(dir, META_FILE), `${JSON.stringify(meta, null, 2)}
152492
152559
  `);
152493
152560
  } catch {
152494
152561
  }
152495
152562
  }
152496
152563
  function readMeta(dir) {
152497
152564
  try {
152498
- const raw = JSON.parse(import_node_fs5.default.readFileSync(import_node_path7.default.join(dir, META_FILE), "utf8"));
152565
+ const raw = JSON.parse(import_node_fs6.default.readFileSync(import_node_path7.default.join(dir, META_FILE), "utf8"));
152499
152566
  if (!raw || typeof raw !== "object") return null;
152500
152567
  const m2 = raw;
152501
152568
  return typeof m2.kind === "string" && typeof m2.createdAt === "string" ? m2 : null;
@@ -152524,14 +152591,14 @@ function lockWorkdir(dir, pid, holder, workdirKey) {
152524
152591
  ...workdirKey !== void 0 ? { workdirKey } : {}
152525
152592
  };
152526
152593
  try {
152527
- import_node_fs5.default.writeFileSync(import_node_path7.default.join(dir, LOCK_FILE), `${JSON.stringify(lock)}
152594
+ import_node_fs6.default.writeFileSync(import_node_path7.default.join(dir, LOCK_FILE), `${JSON.stringify(lock)}
152528
152595
  `);
152529
152596
  } catch {
152530
152597
  }
152531
152598
  }
152532
152599
  function readLock(dir) {
152533
152600
  try {
152534
- const raw = JSON.parse(import_node_fs5.default.readFileSync(import_node_path7.default.join(dir, LOCK_FILE), "utf8"));
152601
+ const raw = JSON.parse(import_node_fs6.default.readFileSync(import_node_path7.default.join(dir, LOCK_FILE), "utf8"));
152535
152602
  if (!raw || typeof raw !== "object") return null;
152536
152603
  const l = raw;
152537
152604
  return Number.isInteger(l.pid) && l.pid > 0 ? l : null;
@@ -152541,14 +152608,14 @@ function readLock(dir) {
152541
152608
  }
152542
152609
  function unlockWorkdir(dir) {
152543
152610
  try {
152544
- import_node_fs5.default.unlinkSync(import_node_path7.default.join(dir, LOCK_FILE));
152611
+ import_node_fs6.default.unlinkSync(import_node_path7.default.join(dir, LOCK_FILE));
152545
152612
  } catch {
152546
152613
  }
152547
152614
  }
152548
152615
  function isWorkdirLive(dir) {
152549
152616
  let raw;
152550
152617
  try {
152551
- raw = import_node_fs5.default.readFileSync(import_node_path7.default.join(dir, LOCK_FILE), "utf8");
152618
+ raw = import_node_fs6.default.readFileSync(import_node_path7.default.join(dir, LOCK_FILE), "utf8");
152552
152619
  } catch {
152553
152620
  return false;
152554
152621
  }
@@ -152557,15 +152624,15 @@ function isWorkdirLive(dir) {
152557
152624
  return isRunning(lock.pid);
152558
152625
  }
152559
152626
  function clearWorkdir(dir) {
152560
- if (!import_node_fs5.default.existsSync(dir)) return;
152627
+ if (!import_node_fs6.default.existsSync(dir)) return;
152561
152628
  if (isWorkdirLive(dir)) {
152562
152629
  const lock = readLock(dir);
152563
152630
  throw new Error(
152564
152631
  `refusing to clear live workdir ${dir}` + (lock ? ` (held by pid ${lock.pid}, holder=${lock.holder}, since ${lock.startedAt})` : " (lock unreadable)")
152565
152632
  );
152566
152633
  }
152567
- for (const entry of import_node_fs5.default.readdirSync(dir)) {
152568
- import_node_fs5.default.rmSync(import_node_path7.default.join(dir, entry), { recursive: true, force: true });
152634
+ for (const entry of import_node_fs6.default.readdirSync(dir)) {
152635
+ import_node_fs6.default.rmSync(import_node_path7.default.join(dir, entry), { recursive: true, force: true });
152569
152636
  }
152570
152637
  }
152571
152638
  function prepareWorkdir(args) {
@@ -152582,7 +152649,7 @@ function prepareWorkdir(args) {
152582
152649
  workdirKey: args.workdirKey,
152583
152650
  rtId: args.meta.runtimeSessionId
152584
152651
  });
152585
- import_node_fs5.default.mkdirSync(dir, { recursive: true });
152652
+ import_node_fs6.default.mkdirSync(dir, { recursive: true });
152586
152653
  if (args.freshWorkdir) clearWorkdir(dir);
152587
152654
  const prev = readMeta(dir);
152588
152655
  writeMeta(dir, {
@@ -152597,12 +152664,12 @@ function prepareWorkdir(args) {
152597
152664
  function legacyChatSessionDir(workRoot, rtId) {
152598
152665
  return import_node_path7.default.join(resolveLegacyWorkRoot(workRoot), "oasis-chat-sessions", rtId.replace(/[^a-zA-Z0-9_-]+/g, "_"));
152599
152666
  }
152600
- var import_node_crypto16, import_node_fs5, import_node_os5, import_node_path7, META_FILE, LOCK_FILE, NEW_WORK_ROOT, LEGACY_ROOTS, LEGACY_ONESHOT_PREFIX;
152667
+ var import_node_crypto16, import_node_fs6, import_node_os5, import_node_path7, META_FILE, LOCK_FILE, NEW_WORK_ROOT, LEGACY_ROOTS, LEGACY_ONESHOT_PREFIX;
152601
152668
  var init_session_paths = __esm({
152602
152669
  "../adapters/src/_core/session-paths.ts"() {
152603
152670
  "use strict";
152604
152671
  import_node_crypto16 = require("node:crypto");
152605
- import_node_fs5 = __toESM(require("node:fs"), 1);
152672
+ import_node_fs6 = __toESM(require("node:fs"), 1);
152606
152673
  import_node_os5 = __toESM(require("node:os"), 1);
152607
152674
  import_node_path7 = __toESM(require("node:path"), 1);
152608
152675
  META_FILE = ".oasis-meta.json";
@@ -153772,7 +153839,7 @@ async function discoverACPModels(bin, provider, args = ["acp"]) {
153772
153839
  }
153773
153840
  if (tmpDir) {
153774
153841
  try {
153775
- (0, import_node_fs6.rmSync)(tmpDir, { recursive: true, force: true });
153842
+ (0, import_node_fs7.rmSync)(tmpDir, { recursive: true, force: true });
153776
153843
  } catch {
153777
153844
  }
153778
153845
  }
@@ -153801,7 +153868,7 @@ async function discoverACPModels(bin, provider, args = ["acp"]) {
153801
153868
  clientCapabilities: {}
153802
153869
  });
153803
153870
  try {
153804
- tmpDir = (0, import_node_fs6.mkdtempSync)((0, import_node_path8.join)((0, import_node_os6.tmpdir)(), `oasis-acp-${provider}-`));
153871
+ tmpDir = (0, import_node_fs7.mkdtempSync)((0, import_node_path8.join)((0, import_node_os6.tmpdir)(), `oasis-acp-${provider}-`));
153805
153872
  } catch {
153806
153873
  return fail();
153807
153874
  }
@@ -153857,12 +153924,12 @@ function parseACPSessionNewModels(result) {
153857
153924
  async function discoverOpenclawModels(bin) {
153858
153925
  throw new Error("discoverOpenclawModels: TODO");
153859
153926
  }
153860
- var import_node_child_process10, import_node_fs6, import_node_os6, import_node_path8, modelCache, CACHE_TTL_MS2;
153927
+ var import_node_child_process10, import_node_fs7, import_node_os6, import_node_path8, modelCache, CACHE_TTL_MS2;
153861
153928
  var init_models = __esm({
153862
153929
  "../adapters/src/_core/models.ts"() {
153863
153930
  "use strict";
153864
153931
  import_node_child_process10 = require("node:child_process");
153865
- import_node_fs6 = require("node:fs");
153932
+ import_node_fs7 = require("node:fs");
153866
153933
  import_node_os6 = require("node:os");
153867
153934
  import_node_path8 = require("node:path");
153868
153935
  modelCache = /* @__PURE__ */ new Map();
@@ -156414,7 +156481,7 @@ function dirSizeBytes(dir) {
156414
156481
  const walk = (d) => {
156415
156482
  let entries;
156416
156483
  try {
156417
- entries = import_node_fs7.default.readdirSync(d, { withFileTypes: true });
156484
+ entries = import_node_fs8.default.readdirSync(d, { withFileTypes: true });
156418
156485
  } catch {
156419
156486
  return;
156420
156487
  }
@@ -156426,7 +156493,7 @@ function dirSizeBytes(dir) {
156426
156493
  continue;
156427
156494
  }
156428
156495
  try {
156429
- total += import_node_fs7.default.statSync(p2).size;
156496
+ total += import_node_fs8.default.statSync(p2).size;
156430
156497
  } catch {
156431
156498
  }
156432
156499
  }
@@ -156438,10 +156505,10 @@ function listWorkdirs(workRoot, legacyRoot) {
156438
156505
  const out = [];
156439
156506
  const sessions = import_node_path9.default.join(workRoot, "sessions");
156440
156507
  try {
156441
- for (const kind of import_node_fs7.default.readdirSync(sessions)) {
156508
+ for (const kind of import_node_fs8.default.readdirSync(sessions)) {
156442
156509
  const kindDir = import_node_path9.default.join(sessions, kind);
156443
156510
  try {
156444
- for (const slug5 of import_node_fs7.default.readdirSync(kindDir)) out.push(import_node_path9.default.join(kindDir, slug5));
156511
+ for (const slug5 of import_node_fs8.default.readdirSync(kindDir)) out.push(import_node_path9.default.join(kindDir, slug5));
156445
156512
  } catch {
156446
156513
  }
156447
156514
  }
@@ -156449,18 +156516,18 @@ function listWorkdirs(workRoot, legacyRoot) {
156449
156516
  }
156450
156517
  const tmp = import_node_path9.default.join(workRoot, "tmp");
156451
156518
  try {
156452
- for (const d of import_node_fs7.default.readdirSync(tmp)) out.push(import_node_path9.default.join(tmp, d));
156519
+ for (const d of import_node_fs8.default.readdirSync(tmp)) out.push(import_node_path9.default.join(tmp, d));
156453
156520
  } catch {
156454
156521
  }
156455
156522
  for (const legacy of LEGACY_ROOTS) {
156456
156523
  const root = import_node_path9.default.join(legacyRoot, legacy);
156457
156524
  try {
156458
- for (const d of import_node_fs7.default.readdirSync(root)) out.push(import_node_path9.default.join(root, d));
156525
+ for (const d of import_node_fs8.default.readdirSync(root)) out.push(import_node_path9.default.join(root, d));
156459
156526
  } catch {
156460
156527
  }
156461
156528
  }
156462
156529
  try {
156463
- for (const d of import_node_fs7.default.readdirSync(legacyRoot)) {
156530
+ for (const d of import_node_fs8.default.readdirSync(legacyRoot)) {
156464
156531
  if (d.startsWith(LEGACY_ONESHOT_PREFIX)) out.push(import_node_path9.default.join(legacyRoot, d));
156465
156532
  }
156466
156533
  } catch {
@@ -156478,7 +156545,7 @@ function observe(dir) {
156478
156545
  const meta = readMeta(dir);
156479
156546
  let mtimeMs = 0;
156480
156547
  try {
156481
- mtimeMs = import_node_fs7.default.statSync(dir).mtimeMs;
156548
+ mtimeMs = import_node_fs8.default.statSync(dir).mtimeMs;
156482
156549
  } catch {
156483
156550
  }
156484
156551
  return { dir, meta, sizeBytes: dirSizeBytes(dir), mtimeMs, live: isWorkdirLive(dir) };
@@ -156511,14 +156578,14 @@ async function runGcSweep(deps) {
156511
156578
  let deleted = 0;
156512
156579
  for (const d of decisions) {
156513
156580
  if (d.action !== "delete") continue;
156514
- if (import_node_fs7.default.existsSync(import_node_path9.default.join(d.dir, LOCK_FILE)) && isWorkdirLive(d.dir)) {
156581
+ if (import_node_fs8.default.existsSync(import_node_path9.default.join(d.dir, LOCK_FILE)) && isWorkdirLive(d.dir)) {
156515
156582
  log3(`[gc] \u8DF3\u8FC7 ${d.dir}\uFF1A\u6267\u884C\u524D\u590D\u67E5\u53D1\u73B0\u5DF2\u88AB\u5360\u7528`);
156516
156583
  continue;
156517
156584
  }
156518
156585
  const kind = candidates.find((c) => c.dir === d.dir)?.meta?.runtimeKind ?? kindFromPath(deps.workRoot, d.dir);
156519
156586
  try {
156520
156587
  deps.reapRuntimeState?.(d.dir, kind);
156521
- import_node_fs7.default.rmSync(d.dir, { recursive: true, force: true });
156588
+ import_node_fs8.default.rmSync(d.dir, { recursive: true, force: true });
156522
156589
  deleted++;
156523
156590
  log3(`[gc] \u6536 ${d.dir}\uFF08${d.reason}, ${(d.sizeBytes / 1024 ** 2).toFixed(1)}MB\uFF09`);
156524
156591
  } catch (e) {
@@ -156562,11 +156629,11 @@ function startGcLoop(deps) {
156562
156629
  clearInterval(timer);
156563
156630
  };
156564
156631
  }
156565
- var import_node_fs7, import_node_path9;
156632
+ var import_node_fs8, import_node_path9;
156566
156633
  var init_gc_loop = __esm({
156567
156634
  "../adapters/src/_core/gc-loop.ts"() {
156568
156635
  "use strict";
156569
- import_node_fs7 = __toESM(require("node:fs"), 1);
156636
+ import_node_fs8 = __toESM(require("node:fs"), 1);
156570
156637
  import_node_path9 = __toESM(require("node:path"), 1);
156571
156638
  init_session_paths();
156572
156639
  init_workdir_gc();
@@ -156602,32 +156669,18 @@ var init_src5 = __esm({
156602
156669
  }
156603
156670
  });
156604
156671
 
156605
- // ../connectors/src/logger.ts
156606
- function ts() {
156607
- return (/* @__PURE__ */ new Date()).toISOString().slice(11, 23);
156608
- }
156609
- function log(tag, msg, extra) {
156610
- const suffix = extra ? " " + JSON.stringify(extra) : "";
156611
- console.log(`[${ts()}] ${tag} ${msg}${suffix}`);
156612
- }
156613
- var init_logger = __esm({
156614
- "../connectors/src/logger.ts"() {
156615
- "use strict";
156616
- }
156617
- });
156618
-
156619
156672
  // ../connectors/src/connector-adapter.ts
156620
- var import_promises3, import_node_fs8, import_node_os7, import_node_path10, ConnectorAwareAdapter;
156673
+ var import_promises3, import_node_fs9, import_node_os7, import_node_path10, ConnectorAwareAdapter;
156621
156674
  var init_connector_adapter = __esm({
156622
156675
  "../connectors/src/connector-adapter.ts"() {
156623
156676
  "use strict";
156624
156677
  import_promises3 = require("node:fs/promises");
156625
- import_node_fs8 = require("node:fs");
156678
+ import_node_fs9 = require("node:fs");
156626
156679
  import_node_os7 = require("node:os");
156627
156680
  import_node_path10 = require("node:path");
156628
156681
  init_src5();
156629
156682
  init_base();
156630
- init_registry2();
156683
+ init_prepare_job();
156631
156684
  init_logger();
156632
156685
  ConnectorAwareAdapter = class {
156633
156686
  constructor(baseOpts = {}) {
@@ -156639,40 +156692,13 @@ var init_connector_adapter = __esm({
156639
156692
  const missing = await ensureConnectorTools(job.requiredTools);
156640
156693
  if (missing.length) log("[adapter]", ` connector tools still missing (agent may fail): ${missing.join(", ")}`);
156641
156694
  }
156642
- const sentinelWrappers = Object.entries(job.env ?? {}).filter(([k2]) => k2.endsWith("_WRAPPER")).map(([, v2]) => v2);
156643
- const remoteWrappers = [...job.wrapperPaths ?? [], ...sentinelWrappers];
156644
- const wrapperPaths = remoteWrappers.filter((p2) => (0, import_node_fs8.existsSync)(p2));
156645
- const droppedWrappers = remoteWrappers.length - wrapperPaths.length;
156695
+ const prepared = await prepareConnectorsForJob(job);
156696
+ const sentinelWrappers = Object.entries(prepared.job.env ?? {}).filter(([k2]) => k2.endsWith("_WRAPPER")).map(([, v2]) => v2).filter((p2) => (0, import_node_fs9.existsSync)(p2));
156646
156697
  const strippedEnv = Object.fromEntries(
156647
- Object.entries(job.env ?? {}).filter(([k2]) => !k2.endsWith("_WRAPPER"))
156698
+ Object.entries(prepared.job.env ?? {}).filter(([k2]) => !k2.endsWith("_WRAPPER"))
156648
156699
  );
156700
+ const wrapperPaths = [...prepared.job.wrapperPaths ?? [], ...sentinelWrappers];
156649
156701
  let extraEnv = { ...strippedEnv };
156650
- const toolsBin = connectorToolsBinDir();
156651
- const inheritedPath = process.env["PATH"] ?? "";
156652
- const localBinDirs = [];
156653
- const localCleanups = [];
156654
- for (const { slug: slug5, credentials } of job.connectorCreds ?? []) {
156655
- const connector = createConnectorBySlug(slug5);
156656
- if (!connector) {
156657
- log("[adapter]", ` unknown connector slug from server: ${slug5}\uFF08\u8DF3\u8FC7\uFF09`);
156658
- continue;
156659
- }
156660
- try {
156661
- const sessionEnv = /* @__PURE__ */ new Map();
156662
- await connector.inject(credentials, sessionEnv);
156663
- for (const [k2, v2] of sessionEnv) extraEnv[k2] = v2;
156664
- const staged = stageConnectorWrapper(connector);
156665
- if (staged) localBinDirs.push((0, import_node_path10.dirname)(staged));
156666
- localCleanups.push(() => connector.cleanup(sessionEnv));
156667
- log("[adapter]", ` ${slug5} injected locally creds+wrapper on this node`);
156668
- } catch (err) {
156669
- log("[adapter]", ` ${slug5} local inject failed\uFF08\u8BE5 connector \u672C\u8F6E\u4E0D\u53EF\u7528\uFF09: ${String(err)}`);
156670
- }
156671
- }
156672
- if (droppedWrappers > 0) {
156673
- log("[adapter]", ` dropped ${droppedWrappers} wrapper path(s) not present on this node\uFF08server \u4FA7\u8DEF\u5F84\uFF0C\u5DF2\u7531\u672C\u5730\u6CE8\u5165\u63A5\u7BA1\uFF09`);
156674
- }
156675
- const pathParts = [...localBinDirs];
156676
156702
  if (wrapperPaths.length > 0) {
156677
156703
  const wrapperBinDir = await (0, import_promises3.mkdtemp)((0, import_node_path10.join)((0, import_node_os7.tmpdir)(), "oasis-wrappers-"));
156678
156704
  await (0, import_promises3.mkdir)(wrapperBinDir, { recursive: true });
@@ -156680,23 +156706,17 @@ var init_connector_adapter = __esm({
156680
156706
  const linkName = (0, import_node_path10.basename)(wp).replace(/\.sh$/, "");
156681
156707
  await (0, import_promises3.symlink)(wp, (0, import_node_path10.join)(wrapperBinDir, linkName));
156682
156708
  }
156683
- pathParts.push(wrapperBinDir);
156684
- }
156685
- pathParts.push(toolsBin, inheritedPath);
156686
- extraEnv = { ...extraEnv, PATH: pathParts.filter(Boolean).join(":") };
156687
- if (localBinDirs.length > 0 || wrapperPaths.length > 0) {
156688
- log("[adapter]", ` connectors injected +${Date.now() - t0}ms local=${localBinDirs.length} remote_wrappers=${wrapperPaths.length} env_keys=${Object.keys(job.env ?? {}).join(",")}`);
156709
+ extraEnv = { ...extraEnv, PATH: [wrapperBinDir, extraEnv["PATH"] ?? ""].filter(Boolean).join(":") };
156710
+ log("[adapter]", ` connectors injected +${Date.now() - t0}ms wrappers=${wrapperPaths.length}`);
156689
156711
  } else {
156690
156712
  log("[adapter]", ` no connectors +${Date.now() - t0}ms`);
156691
156713
  }
156692
156714
  const jobAdapter = new ClaudeCodeAdapter({ ...this.baseOpts, env: extraEnv });
156693
- const handle = await jobAdapter.spawn(job);
156694
- if (localCleanups.length > 0) {
156695
- handle.onExit(() => {
156696
- for (const fn of localCleanups) void fn().catch(() => {
156697
- });
156715
+ const handle = await jobAdapter.spawn(prepared.job);
156716
+ handle.onExit(() => {
156717
+ void prepared.cleanup().catch(() => {
156698
156718
  });
156699
- }
156719
+ });
156700
156720
  return handle;
156701
156721
  }
156702
156722
  };
@@ -156714,6 +156734,7 @@ var init_src6 = __esm({
156714
156734
  init_well_known_skills();
156715
156735
  init_github();
156716
156736
  init_registry2();
156737
+ init_prepare_job();
156717
156738
  init_connector_adapter();
156718
156739
  }
156719
156740
  });
@@ -158509,11 +158530,11 @@ var init_routes2 = __esm({
158509
158530
  });
158510
158531
 
158511
158532
  // ../server/src/domains/projects/postgres-documents.ts
158512
- var import_node_fs9, ident2, PostgresProjectDocumentStore;
158533
+ var import_node_fs10, ident2, PostgresProjectDocumentStore;
158513
158534
  var init_postgres_documents = __esm({
158514
158535
  "../server/src/domains/projects/postgres-documents.ts"() {
158515
158536
  "use strict";
158516
- import_node_fs9 = __toESM(require("node:fs"), 1);
158537
+ import_node_fs10 = __toESM(require("node:fs"), 1);
158517
158538
  init_service2();
158518
158539
  ident2 = (s2) => {
158519
158540
  if (!/^[a-z_][a-z0-9_]*$/.test(s2)) throw new Error(`invalid schema name: ${s2}`);
@@ -158551,10 +158572,10 @@ var init_postgres_documents = __esm({
158551
158572
  async backfillFromFile(file) {
158552
158573
  const counted = await this.sql.query(`SELECT count(*) AS n FROM ${this.s}.project_document_spaces`);
158553
158574
  if (Number(counted.rows[0]?.["n"] ?? 0) > 0) return;
158554
- if (!import_node_fs9.default.existsSync(file)) return;
158575
+ if (!import_node_fs10.default.existsSync(file)) return;
158555
158576
  let snap;
158556
158577
  try {
158557
- snap = JSON.parse(import_node_fs9.default.readFileSync(file, "utf8"));
158578
+ snap = JSON.parse(import_node_fs10.default.readFileSync(file, "utf8"));
158558
158579
  } catch {
158559
158580
  console.warn(`[projectdoc-backfill] ${file} \u89E3\u6790\u5931\u8D25\uFF0C\u8DF3\u8FC7\u56DE\u586B\uFF08\u7A7A\u95F4\u5C06\u6309\u9700\u91CD\u65B0\u521D\u59CB\u5316\uFF09`);
158560
158581
  return;
@@ -159918,7 +159939,7 @@ function nodesDomain(deps) {
159918
159939
  const here = (0, import_node_path12.dirname)((0, import_node_url4.fileURLToPath)(__esm_import_meta_url));
159919
159940
  for (const rel of ["../../../../node-daemon/package.json", "../../../../../node-daemon/package.json"]) {
159920
159941
  try {
159921
- const raw = (0, import_node_fs10.readFileSync)((0, import_node_path12.resolve)(here, rel), "utf8");
159942
+ const raw = (0, import_node_fs11.readFileSync)((0, import_node_path12.resolve)(here, rel), "utf8");
159922
159943
  const pkg = JSON.parse(raw);
159923
159944
  if (pkg.version) return { version: pkg.version, source: "monorepo" };
159924
159945
  } catch {
@@ -160272,12 +160293,12 @@ function nodesDomain(deps) {
160272
160293
  });
160273
160294
  };
160274
160295
  }
160275
- var import_node_crypto24, import_node_fs10, import_node_url4, import_node_path12;
160296
+ var import_node_crypto24, import_node_fs11, import_node_url4, import_node_path12;
160276
160297
  var init_routes4 = __esm({
160277
160298
  "../server/src/domains/nodes/routes.ts"() {
160278
160299
  "use strict";
160279
160300
  import_node_crypto24 = require("node:crypto");
160280
- import_node_fs10 = require("node:fs");
160301
+ import_node_fs11 = require("node:fs");
160281
160302
  import_node_url4 = require("node:url");
160282
160303
  import_node_path12 = require("node:path");
160283
160304
  init_src5();
@@ -161326,11 +161347,11 @@ function nameKey(name) {
161326
161347
  function cleanName(name) {
161327
161348
  return name.trim().replace(/\s+/g, " ");
161328
161349
  }
161329
- var import_node_fs11, import_node_path13, import_node_crypto25, SEP, keyOf, prefixOf, MemoryWorkorderTagStore, FileWorkorderTagStore;
161350
+ var import_node_fs12, import_node_path13, import_node_crypto25, SEP, keyOf, prefixOf, MemoryWorkorderTagStore, FileWorkorderTagStore;
161330
161351
  var init_tags = __esm({
161331
161352
  "../server/src/domains/collab/tags.ts"() {
161332
161353
  "use strict";
161333
- import_node_fs11 = __toESM(require("node:fs"), 1);
161354
+ import_node_fs12 = __toESM(require("node:fs"), 1);
161334
161355
  import_node_path13 = __toESM(require("node:path"), 1);
161335
161356
  import_node_crypto25 = __toESM(require("node:crypto"), 1);
161336
161357
  SEP = "::";
@@ -161408,7 +161429,7 @@ var init_tags = __esm({
161408
161429
  super();
161409
161430
  this.file = file;
161410
161431
  try {
161411
- const raw = JSON.parse(import_node_fs11.default.readFileSync(file, "utf8"));
161432
+ const raw = JSON.parse(import_node_fs12.default.readFileSync(file, "utf8"));
161412
161433
  for (const [k2, v2] of Object.entries(raw)) {
161413
161434
  if (v2 && typeof v2 === "object" && typeof v2.id === "string" && typeof v2.name === "string") this.map.set(k2, v2);
161414
161435
  }
@@ -161417,10 +161438,10 @@ var init_tags = __esm({
161417
161438
  }
161418
161439
  persist() {
161419
161440
  try {
161420
- import_node_fs11.default.mkdirSync(import_node_path13.default.dirname(this.file), { recursive: true });
161441
+ import_node_fs12.default.mkdirSync(import_node_path13.default.dirname(this.file), { recursive: true });
161421
161442
  const tmp = `${this.file}.tmp`;
161422
- import_node_fs11.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
161423
- import_node_fs11.default.renameSync(tmp, this.file);
161443
+ import_node_fs12.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
161444
+ import_node_fs12.default.renameSync(tmp, this.file);
161424
161445
  } catch {
161425
161446
  }
161426
161447
  }
@@ -172697,11 +172718,11 @@ function normalize(patch) {
172697
172718
  ...reviewRoles !== void 0 ? { reviewRoles: [...new Set(reviewRoles.map((r) => r.trim()).filter(Boolean))] } : {}
172698
172719
  };
172699
172720
  }
172700
- var import_node_fs12, import_node_path15, SEP2, keyOf2, prefixOf2, MemoryPlaybookOverrideStore, FilePlaybookOverrideStore;
172721
+ var import_node_fs13, import_node_path15, SEP2, keyOf2, prefixOf2, MemoryPlaybookOverrideStore, FilePlaybookOverrideStore;
172701
172722
  var init_overrides = __esm({
172702
172723
  "../server/src/domains/playbooks/overrides.ts"() {
172703
172724
  "use strict";
172704
- import_node_fs12 = __toESM(require("node:fs"), 1);
172725
+ import_node_fs13 = __toESM(require("node:fs"), 1);
172705
172726
  import_node_path15 = __toESM(require("node:path"), 1);
172706
172727
  SEP2 = "::";
172707
172728
  keyOf2 = (companyId, ref2, nodeKey) => `${companyId}${SEP2}${ref2}${SEP2}${nodeKey}`;
@@ -172732,7 +172753,7 @@ var init_overrides = __esm({
172732
172753
  super();
172733
172754
  this.file = file;
172734
172755
  try {
172735
- const raw = JSON.parse(import_node_fs12.default.readFileSync(file, "utf8"));
172756
+ const raw = JSON.parse(import_node_fs13.default.readFileSync(file, "utf8"));
172736
172757
  for (const [k2, v2] of Object.entries(raw)) {
172737
172758
  if (v2 && typeof v2 === "object") this.map.set(k2, v2);
172738
172759
  }
@@ -172741,10 +172762,10 @@ var init_overrides = __esm({
172741
172762
  }
172742
172763
  persist() {
172743
172764
  try {
172744
- import_node_fs12.default.mkdirSync(import_node_path15.default.dirname(this.file), { recursive: true });
172765
+ import_node_fs13.default.mkdirSync(import_node_path15.default.dirname(this.file), { recursive: true });
172745
172766
  const tmp = `${this.file}.tmp`;
172746
- import_node_fs12.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
172747
- import_node_fs12.default.renameSync(tmp, this.file);
172767
+ import_node_fs13.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
172768
+ import_node_fs13.default.renameSync(tmp, this.file);
172748
172769
  } catch {
172749
172770
  }
172750
172771
  }
@@ -173162,17 +173183,17 @@ var init_daemon_adapter = __esm({
173162
173183
  });
173163
173184
 
173164
173185
  // ../server/src/side-map.ts
173165
- var import_node_fs13, import_node_path16, FileSideMap;
173186
+ var import_node_fs14, import_node_path16, FileSideMap;
173166
173187
  var init_side_map = __esm({
173167
173188
  "../server/src/side-map.ts"() {
173168
173189
  "use strict";
173169
- import_node_fs13 = __toESM(require("node:fs"), 1);
173190
+ import_node_fs14 = __toESM(require("node:fs"), 1);
173170
173191
  import_node_path16 = __toESM(require("node:path"), 1);
173171
173192
  FileSideMap = class {
173172
173193
  constructor(file) {
173173
173194
  this.file = file;
173174
173195
  try {
173175
- const raw = JSON.parse(import_node_fs13.default.readFileSync(file, "utf8"));
173196
+ const raw = JSON.parse(import_node_fs14.default.readFileSync(file, "utf8"));
173176
173197
  for (const [k2, v2] of Object.entries(raw)) if (typeof v2 === "string") this.map.set(k2, v2);
173177
173198
  } catch {
173178
173199
  }
@@ -173194,10 +173215,10 @@ var init_side_map = __esm({
173194
173215
  }
173195
173216
  persist() {
173196
173217
  try {
173197
- import_node_fs13.default.mkdirSync(import_node_path16.default.dirname(this.file), { recursive: true });
173218
+ import_node_fs14.default.mkdirSync(import_node_path16.default.dirname(this.file), { recursive: true });
173198
173219
  const tmp = `${this.file}.tmp`;
173199
- import_node_fs13.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
173200
- import_node_fs13.default.renameSync(tmp, this.file);
173220
+ import_node_fs14.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
173221
+ import_node_fs14.default.renameSync(tmp, this.file);
173201
173222
  } catch {
173202
173223
  }
173203
173224
  }
@@ -184084,10 +184105,10 @@ var init_postgres_model_prices = __esm({
184084
184105
  // ../storage/src/postgres-type-registry.ts
184085
184106
  async function backfillTypeRegistryFromFile(store, file) {
184086
184107
  if ((await store.list()).length > 0) return { filled: 0 };
184087
- if (!import_node_fs14.default.existsSync(file)) return { filled: 0 };
184108
+ if (!import_node_fs15.default.existsSync(file)) return { filled: 0 };
184088
184109
  let defs;
184089
184110
  try {
184090
- defs = JSON.parse(import_node_fs14.default.readFileSync(file, "utf8"));
184111
+ defs = JSON.parse(import_node_fs15.default.readFileSync(file, "utf8"));
184091
184112
  } catch {
184092
184113
  console.warn(`[type-registry-backfill] ${file} \u89E3\u6790\u5931\u8D25\uFF0C\u8DF3\u8FC7\u56DE\u586B\uFF08serve \u5C06\u7528\u4EE3\u7801\u5E38\u91CF\u64AD\u79CD\uFF09`);
184093
184114
  return { filled: 0 };
@@ -184097,11 +184118,11 @@ async function backfillTypeRegistryFromFile(store, file) {
184097
184118
  console.log(`[type-registry-backfill] \u51B3\u7B56 0062 \u56DE\u586B\uFF1A${defs.length} \u4E2A\u4EA7\u7269\u7C7B\u578B\u5DF2\u8FC1\u5165 Postgres`);
184098
184119
  return { filled: defs.length };
184099
184120
  }
184100
- var import_node_fs14, ident13, PostgresTypeRegistryStore;
184121
+ var import_node_fs15, ident13, PostgresTypeRegistryStore;
184101
184122
  var init_postgres_type_registry = __esm({
184102
184123
  "../storage/src/postgres-type-registry.ts"() {
184103
184124
  "use strict";
184104
- import_node_fs14 = __toESM(require("node:fs"), 1);
184125
+ import_node_fs15 = __toESM(require("node:fs"), 1);
184105
184126
  init_esm2();
184106
184127
  ident13 = (s2) => {
184107
184128
  if (!/^[a-z_][a-z0-9_]*$/.test(s2)) throw new Error(`invalid schema name: ${s2}`);
@@ -187654,7 +187675,7 @@ function detectRuntimes() {
187654
187675
  }
187655
187676
 
187656
187677
  // ../cli/src/daemon/workdir-handler.ts
187657
- var import_node_fs15 = __toESM(require("node:fs"), 1);
187678
+ var import_node_fs16 = __toESM(require("node:fs"), 1);
187658
187679
  var import_node_path18 = __toESM(require("node:path"), 1);
187659
187680
  init_src5();
187660
187681
  init_src();
@@ -187690,7 +187711,7 @@ async function trustedCanonicalContainer(req, logicalBase, dirKind) {
187690
187711
  const trustedRoot = isLegacy ? resolveLegacyWorkRoot(req.workRoot) : resolveWorkRoot(req.workRoot);
187691
187712
  let trustedRootReal;
187692
187713
  try {
187693
- trustedRootReal = await import_node_fs15.default.promises.realpath(trustedRoot);
187714
+ trustedRootReal = await import_node_fs16.default.promises.realpath(trustedRoot);
187694
187715
  } catch {
187695
187716
  return null;
187696
187717
  }
@@ -187708,7 +187729,7 @@ async function resolveWithinWorkdir(req) {
187708
187729
  if (canonicalContainer === null) return { ok: false, code: "NOT_FOUND" };
187709
187730
  let base;
187710
187731
  try {
187711
- base = await import_node_fs15.default.promises.realpath(logicalBase);
187732
+ base = await import_node_fs16.default.promises.realpath(logicalBase);
187712
187733
  } catch {
187713
187734
  return { ok: false, code: "NOT_FOUND" };
187714
187735
  }
@@ -187720,7 +187741,7 @@ async function resolveWithinWorkdir(req) {
187720
187741
  if (relPathIsSensitive(cleanRel)) return { ok: false, code: "SENSITIVE" };
187721
187742
  let real;
187722
187743
  try {
187723
- real = await import_node_fs15.default.promises.realpath(requested);
187744
+ real = await import_node_fs16.default.promises.realpath(requested);
187724
187745
  } catch (e) {
187725
187746
  if (e.code === "ENOENT") return { ok: false, code: "NOT_FOUND" };
187726
187747
  return { ok: false, code: "PATH_ESCAPE" };
@@ -187737,7 +187758,7 @@ async function handleWorkdirList(req) {
187737
187758
  const { base, real } = resolved;
187738
187759
  let dh;
187739
187760
  try {
187740
- dh = await import_node_fs15.default.promises.open(real, import_node_fs15.default.constants.O_RDONLY | import_node_fs15.default.constants.O_NOFOLLOW | import_node_fs15.default.constants.O_NONBLOCK);
187761
+ dh = await import_node_fs16.default.promises.open(real, import_node_fs16.default.constants.O_RDONLY | import_node_fs16.default.constants.O_NOFOLLOW | import_node_fs16.default.constants.O_NONBLOCK);
187741
187762
  } catch (e) {
187742
187763
  const code = e.code;
187743
187764
  if (code === "ELOOP") return { ok: false, code: "PATH_ESCAPE" };
@@ -187751,7 +187772,7 @@ async function handleWorkdirList(req) {
187751
187772
  const anchor = verified.anchor;
187752
187773
  const dst = await dh.stat();
187753
187774
  if (!dst.isDirectory()) return { ok: false, code: "NOT_FOUND" };
187754
- const dirents = await import_node_fs15.default.promises.readdir(anchor, { withFileTypes: true });
187775
+ const dirents = await import_node_fs16.default.promises.readdir(anchor, { withFileTypes: true });
187755
187776
  const visible = dirents.filter((d) => !isSensitiveSegment(d.name));
187756
187777
  visible.sort((a, b2) => {
187757
187778
  const ad = a.isDirectory() ? 0 : 1;
@@ -187764,7 +187785,7 @@ async function handleWorkdirList(req) {
187764
187785
  for (const d of slice) {
187765
187786
  const abs = import_node_path18.default.join(anchor, d.name);
187766
187787
  try {
187767
- const st = await import_node_fs15.default.promises.lstat(abs);
187788
+ const st = await import_node_fs16.default.promises.lstat(abs);
187768
187789
  if (st.isSymbolicLink()) continue;
187769
187790
  entries.push({
187770
187791
  name: d.name,
@@ -187785,7 +187806,7 @@ async function handleWorkdirList(req) {
187785
187806
  }
187786
187807
  async function fdCanonicalPath(fh) {
187787
187808
  try {
187788
- return await import_node_fs15.default.promises.readlink(`/proc/self/fd/${fh.fd}`);
187809
+ return await import_node_fs16.default.promises.readlink(`/proc/self/fd/${fh.fd}`);
187789
187810
  } catch {
187790
187811
  return null;
187791
187812
  }
@@ -187806,7 +187827,7 @@ async function handleWorkdirRead(req) {
187806
187827
  const { base, real } = resolved;
187807
187828
  let fh;
187808
187829
  try {
187809
- fh = await import_node_fs15.default.promises.open(real, import_node_fs15.default.constants.O_RDONLY | import_node_fs15.default.constants.O_NOFOLLOW | import_node_fs15.default.constants.O_NONBLOCK);
187830
+ fh = await import_node_fs16.default.promises.open(real, import_node_fs16.default.constants.O_RDONLY | import_node_fs16.default.constants.O_NOFOLLOW | import_node_fs16.default.constants.O_NONBLOCK);
187810
187831
  } catch (e) {
187811
187832
  const code = e.code;
187812
187833
  if (code === "ELOOP") return { ok: false, code: "PATH_ESCAPE" };
@@ -188051,7 +188072,12 @@ var DaemonWsClient = class {
188051
188072
  const missing = await ensureConnectorTools(job.requiredTools);
188052
188073
  if (missing.length) log2("[node-cli]", ` connector tools still missing (agent may fail): ${missing.join(", ")}`);
188053
188074
  }
188054
- const handle = await this.sessions.getAdapter().spawn(job);
188075
+ const prepared = await prepareConnectorsForJob(job);
188076
+ const handle = await this.sessions.getAdapter().spawn(prepared.job);
188077
+ handle.onExit(() => {
188078
+ void prepared.cleanup().catch(() => {
188079
+ });
188080
+ });
188055
188081
  this.sessions.register(dispatchId, handle, {
188056
188082
  ...job.jobKey ? { jobKey: job.jobKey } : {},
188057
188083
  jobArtifactId: job.artifactId,
@@ -188250,7 +188276,7 @@ var RuntimeRouterAdapter = class {
188250
188276
  };
188251
188277
 
188252
188278
  // ../cli/src/daemon/reap-claude-projects.ts
188253
- var import_node_fs16 = __toESM(require("node:fs"), 1);
188279
+ var import_node_fs17 = __toESM(require("node:fs"), 1);
188254
188280
  var import_node_os9 = __toESM(require("node:os"), 1);
188255
188281
  var import_node_path19 = __toESM(require("node:path"), 1);
188256
188282
  function claudeProjectSlug(cwd) {
@@ -188263,9 +188289,9 @@ function claudeProjectsRoot() {
188263
188289
  function reapClaudeProjects(workdir, runtimeKind) {
188264
188290
  if (runtimeKind !== "claude" && runtimeKind !== "claude-code") return;
188265
188291
  const dir = import_node_path19.default.join(claudeProjectsRoot(), claudeProjectSlug(workdir));
188266
- if (!import_node_fs16.default.existsSync(dir)) return;
188292
+ if (!import_node_fs17.default.existsSync(dir)) return;
188267
188293
  try {
188268
- import_node_fs16.default.rmSync(dir, { recursive: true, force: true });
188294
+ import_node_fs17.default.rmSync(dir, { recursive: true, force: true });
188269
188295
  } catch {
188270
188296
  }
188271
188297
  }
@@ -188369,13 +188395,13 @@ async function startNode(opts) {
188369
188395
 
188370
188396
  // ../cli/src/daemon/machine-id.ts
188371
188397
  var import_node_child_process16 = require("node:child_process");
188372
- var import_node_fs17 = require("node:fs");
188398
+ var import_node_fs18 = require("node:fs");
188373
188399
  var import_node_crypto38 = require("node:crypto");
188374
188400
  var import_node_os11 = require("node:os");
188375
188401
  function linuxMachineId() {
188376
188402
  for (const p2 of ["/etc/machine-id", "/var/lib/dbus/machine-id"]) {
188377
188403
  try {
188378
- const v2 = (0, import_node_fs17.readFileSync)(p2, "utf8").trim();
188404
+ const v2 = (0, import_node_fs18.readFileSync)(p2, "utf8").trim();
188379
188405
  if (v2) return v2;
188380
188406
  } catch {
188381
188407
  }
@@ -190600,7 +190626,7 @@ ${res.warning}`);
190600
190626
  init_src6();
190601
190627
 
190602
190628
  // src/index.ts
190603
- var PKG_VERSION = true ? "0.1.73" : "dev";
190629
+ var PKG_VERSION = true ? "0.1.74" : "dev";
190604
190630
  var OASIS_DIR = path28.join(os9.homedir(), ".oasis");
190605
190631
  var CONFIG_FILE = path28.join(OASIS_DIR, "node-config.json");
190606
190632
  var PID_FILE = path28.join(OASIS_DIR, "node.pid");
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "oasis_test",
3
- "version": "0.1.73",
3
+ "version": "0.1.74",
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": "d0ee4c4d3e4ff3fb73c414c8a84c9eab1b20916d"
29
+ "sourceHead": "fde786a6df90f43d10cb364cd65e3878caba3f16"
30
30
  }
31
31
  }