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.
- package/dist/index.js +168 -142
- 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:
|
|
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(
|
|
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(
|
|
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
|
-
|
|
152446
|
-
|
|
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 (
|
|
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
|
|
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
|
-
|
|
152487
|
-
return
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
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 =
|
|
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 (!
|
|
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
|
|
152568
|
-
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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,
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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 =
|
|
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 +=
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 =
|
|
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 (
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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,
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
156643
|
-
const
|
|
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
|
-
|
|
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
|
-
|
|
156695
|
-
|
|
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
|
|
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
|
-
|
|
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 (!
|
|
158575
|
+
if (!import_node_fs10.default.existsSync(file)) return;
|
|
158555
158576
|
let snap;
|
|
158556
158577
|
try {
|
|
158557
|
-
snap = JSON.parse(
|
|
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,
|
|
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,
|
|
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
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
161441
|
+
import_node_fs12.default.mkdirSync(import_node_path13.default.dirname(this.file), { recursive: true });
|
|
161421
161442
|
const tmp = `${this.file}.tmp`;
|
|
161422
|
-
|
|
161423
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
172765
|
+
import_node_fs13.default.mkdirSync(import_node_path15.default.dirname(this.file), { recursive: true });
|
|
172745
172766
|
const tmp = `${this.file}.tmp`;
|
|
172746
|
-
|
|
172747
|
-
|
|
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
|
|
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
|
-
|
|
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(
|
|
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
|
-
|
|
173218
|
+
import_node_fs14.default.mkdirSync(import_node_path16.default.dirname(this.file), { recursive: true });
|
|
173198
173219
|
const tmp = `${this.file}.tmp`;
|
|
173199
|
-
|
|
173200
|
-
|
|
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 (!
|
|
184108
|
+
if (!import_node_fs15.default.existsSync(file)) return { filled: 0 };
|
|
184088
184109
|
let defs;
|
|
184089
184110
|
try {
|
|
184090
|
-
defs = JSON.parse(
|
|
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
|
|
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
|
-
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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
|
|
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 (!
|
|
188292
|
+
if (!import_node_fs17.default.existsSync(dir)) return;
|
|
188267
188293
|
try {
|
|
188268
|
-
|
|
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
|
|
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,
|
|
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.
|
|
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.
|
|
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": "
|
|
29
|
+
"sourceHead": "fde786a6df90f43d10cb364cd65e3878caba3f16"
|
|
30
30
|
}
|
|
31
31
|
}
|