oasis_test 0.1.70 → 0.1.71
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 +144 -69
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -138897,7 +138897,7 @@ function requiresMeReasonOf(model, artifact, viewer, facts) {
|
|
|
138897
138897
|
function computeRequiresMe(model, artifact, viewer, facts) {
|
|
138898
138898
|
return requiresMeReasonOf(model, artifact, viewer, facts) !== null;
|
|
138899
138899
|
}
|
|
138900
|
-
function buildWorkorderDetail(model, workspaceId, resolveActor, resolveProject, dispatchJournal = [], dispatchPausedOf, ops = [], reviewerPreview, dispatcherSignalsOf, viewer, roleDefaultOwnerOf) {
|
|
138900
|
+
function buildWorkorderDetail(model, workspaceId, resolveActor, resolveProject, dispatchJournal = [], dispatchPausedOf, ops = [], reviewerPreview, dispatcherSignalsOf, viewer, roleDefaultOwnerOf, roleLabelOf) {
|
|
138901
138901
|
const arts = [...model.artifacts.values()].filter((a) => a.workspace === workspaceId);
|
|
138902
138902
|
if (arts.length === 0) return null;
|
|
138903
138903
|
const ref2 = (id) => {
|
|
@@ -138961,11 +138961,15 @@ function buildWorkorderDetail(model, workspaceId, resolveActor, resolveProject,
|
|
|
138961
138961
|
quorum: pv.quorum,
|
|
138962
138962
|
// 0089:每桶门槛后端给,前端别拿聚合 quorum 做减法。
|
|
138963
138963
|
// 诊断 f1641dd3-abdaa869(改 B):给角色桶补**纯展示**的 defaultOwner(该角色 RoleDef.defaultOwner
|
|
138964
|
-
// 解析成 ActorRef
|
|
138964
|
+
// 解析成 ActorRef)与 roleLabel(RoleDef.label 中文名,annotation 6e3608ee)。core 无岗位目录、
|
|
138965
|
+
// 算不出,故在此注入。未配 / 无解析器 → 不带对应字段(前端各自兜底)。
|
|
138965
138966
|
reviewerRequirements: pv.requirements.map((r) => {
|
|
138966
138967
|
if (r.source !== "type") return r;
|
|
138967
|
-
const
|
|
138968
|
-
|
|
138968
|
+
const role = r.roles?.[0];
|
|
138969
|
+
const owner = role ? roleDefaultOwnerOf?.(role) : void 0;
|
|
138970
|
+
const label = role ? roleLabelOf?.(role) : void 0;
|
|
138971
|
+
const withOwner = owner ? { ...r, defaultOwner: ref2(owner) } : r;
|
|
138972
|
+
return label ? { ...withOwner, roleLabel: label } : withOwner;
|
|
138969
138973
|
}),
|
|
138970
138974
|
// 0101:审核角色是否被覆盖过(替换了类型默认)——供详情页角色位徽标/复原判断。
|
|
138971
138975
|
...a.reviewRoles !== void 0 ? { reviewRolesOverridden: true } : {},
|
|
@@ -142560,13 +142564,13 @@ async function startOasisServer(opts) {
|
|
|
142560
142564
|
const actorCtx = await opts.resolveActorContext(body.actorId).catch(() => null);
|
|
142561
142565
|
if (actorCtx) {
|
|
142562
142566
|
const { mkdtempSync: mkdtempSync5, mkdirSync: mkdirSync20, writeFileSync: writeFileSync13 } = await import("node:fs");
|
|
142563
|
-
const { join: join28, dirname:
|
|
142567
|
+
const { join: join28, dirname: dirname25 } = await import("node:path");
|
|
142564
142568
|
const { tmpdir: tmpdir9 } = await import("node:os");
|
|
142565
142569
|
const dir = mkdtempSync5(join28(tmpdir9(), "oasis-chat-"));
|
|
142566
142570
|
if (actorCtx.config?.prompt) {
|
|
142567
142571
|
for (const [rel, content] of Object.entries(splitIdentityFiles2(actorCtx.config.prompt))) {
|
|
142568
142572
|
const file = join28(dir, rel);
|
|
142569
|
-
mkdirSync20(
|
|
142573
|
+
mkdirSync20(dirname25(file), { recursive: true });
|
|
142570
142574
|
writeFileSync13(file, content);
|
|
142571
142575
|
}
|
|
142572
142576
|
}
|
|
@@ -142583,7 +142587,7 @@ async function startOasisServer(opts) {
|
|
|
142583
142587
|
const skillFiles = await opts.materializeSkills(body.actorId, "claude").catch(() => ({}));
|
|
142584
142588
|
for (const [rel, content] of Object.entries(skillFiles)) {
|
|
142585
142589
|
const file = join28(dir, rel);
|
|
142586
|
-
mkdirSync20(
|
|
142590
|
+
mkdirSync20(dirname25(file), { recursive: true });
|
|
142587
142591
|
writeFileSync13(file, content);
|
|
142588
142592
|
}
|
|
142589
142593
|
}
|
|
@@ -151656,6 +151660,25 @@ export GITHUB_TOKEN=${shSingleQuote2(token)}
|
|
|
151656
151660
|
}
|
|
151657
151661
|
});
|
|
151658
151662
|
|
|
151663
|
+
// ../connectors/src/registry.ts
|
|
151664
|
+
function createConnectorBySlug(slug5) {
|
|
151665
|
+
switch (slug5) {
|
|
151666
|
+
case "feishu":
|
|
151667
|
+
return new FeishuConnector();
|
|
151668
|
+
case "github":
|
|
151669
|
+
return new GithubConnector();
|
|
151670
|
+
default:
|
|
151671
|
+
return null;
|
|
151672
|
+
}
|
|
151673
|
+
}
|
|
151674
|
+
var init_registry2 = __esm({
|
|
151675
|
+
"../connectors/src/registry.ts"() {
|
|
151676
|
+
"use strict";
|
|
151677
|
+
init_feishu();
|
|
151678
|
+
init_github();
|
|
151679
|
+
}
|
|
151680
|
+
});
|
|
151681
|
+
|
|
151659
151682
|
// ../adapters/src/open-design/driver.ts
|
|
151660
151683
|
function deriveBoardKey(artifactId) {
|
|
151661
151684
|
const tail = artifactId.split(":").pop() ?? artifactId;
|
|
@@ -156137,15 +156160,17 @@ var init_logger = __esm({
|
|
|
156137
156160
|
});
|
|
156138
156161
|
|
|
156139
156162
|
// ../connectors/src/connector-adapter.ts
|
|
156140
|
-
var import_promises3, import_node_os7, import_node_path10, ConnectorAwareAdapter;
|
|
156163
|
+
var import_promises3, import_node_fs8, import_node_os7, import_node_path10, ConnectorAwareAdapter;
|
|
156141
156164
|
var init_connector_adapter = __esm({
|
|
156142
156165
|
"../connectors/src/connector-adapter.ts"() {
|
|
156143
156166
|
"use strict";
|
|
156144
156167
|
import_promises3 = require("node:fs/promises");
|
|
156168
|
+
import_node_fs8 = require("node:fs");
|
|
156145
156169
|
import_node_os7 = require("node:os");
|
|
156146
156170
|
import_node_path10 = require("node:path");
|
|
156147
156171
|
init_src5();
|
|
156148
156172
|
init_base();
|
|
156173
|
+
init_registry2();
|
|
156149
156174
|
init_logger();
|
|
156150
156175
|
ConnectorAwareAdapter = class {
|
|
156151
156176
|
constructor(baseOpts = {}) {
|
|
@@ -156158,13 +156183,39 @@ var init_connector_adapter = __esm({
|
|
|
156158
156183
|
if (missing.length) log("[adapter]", ` connector tools still missing (agent may fail): ${missing.join(", ")}`);
|
|
156159
156184
|
}
|
|
156160
156185
|
const sentinelWrappers = Object.entries(job.env ?? {}).filter(([k2]) => k2.endsWith("_WRAPPER")).map(([, v2]) => v2);
|
|
156161
|
-
const
|
|
156186
|
+
const remoteWrappers = [...job.wrapperPaths ?? [], ...sentinelWrappers];
|
|
156187
|
+
const wrapperPaths = remoteWrappers.filter((p2) => (0, import_node_fs8.existsSync)(p2));
|
|
156188
|
+
const droppedWrappers = remoteWrappers.length - wrapperPaths.length;
|
|
156162
156189
|
const strippedEnv = Object.fromEntries(
|
|
156163
156190
|
Object.entries(job.env ?? {}).filter(([k2]) => !k2.endsWith("_WRAPPER"))
|
|
156164
156191
|
);
|
|
156165
156192
|
let extraEnv = { ...strippedEnv };
|
|
156166
156193
|
const toolsBin = connectorToolsBinDir();
|
|
156167
156194
|
const inheritedPath = process.env["PATH"] ?? "";
|
|
156195
|
+
const localBinDirs = [];
|
|
156196
|
+
const localCleanups = [];
|
|
156197
|
+
for (const { slug: slug5, credentials } of job.connectorCreds ?? []) {
|
|
156198
|
+
const connector = createConnectorBySlug(slug5);
|
|
156199
|
+
if (!connector) {
|
|
156200
|
+
log("[adapter]", ` unknown connector slug from server: ${slug5}\uFF08\u8DF3\u8FC7\uFF09`);
|
|
156201
|
+
continue;
|
|
156202
|
+
}
|
|
156203
|
+
try {
|
|
156204
|
+
const sessionEnv = /* @__PURE__ */ new Map();
|
|
156205
|
+
await connector.inject(credentials, sessionEnv);
|
|
156206
|
+
for (const [k2, v2] of sessionEnv) extraEnv[k2] = v2;
|
|
156207
|
+
const staged = stageConnectorWrapper(connector);
|
|
156208
|
+
if (staged) localBinDirs.push((0, import_node_path10.dirname)(staged));
|
|
156209
|
+
localCleanups.push(() => connector.cleanup(sessionEnv));
|
|
156210
|
+
log("[adapter]", ` ${slug5} injected locally creds+wrapper on this node`);
|
|
156211
|
+
} catch (err) {
|
|
156212
|
+
log("[adapter]", ` ${slug5} local inject failed\uFF08\u8BE5 connector \u672C\u8F6E\u4E0D\u53EF\u7528\uFF09: ${String(err)}`);
|
|
156213
|
+
}
|
|
156214
|
+
}
|
|
156215
|
+
if (droppedWrappers > 0) {
|
|
156216
|
+
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`);
|
|
156217
|
+
}
|
|
156218
|
+
const pathParts = [...localBinDirs];
|
|
156168
156219
|
if (wrapperPaths.length > 0) {
|
|
156169
156220
|
const wrapperBinDir = await (0, import_promises3.mkdtemp)((0, import_node_path10.join)((0, import_node_os7.tmpdir)(), "oasis-wrappers-"));
|
|
156170
156221
|
await (0, import_promises3.mkdir)(wrapperBinDir, { recursive: true });
|
|
@@ -156172,14 +156223,24 @@ var init_connector_adapter = __esm({
|
|
|
156172
156223
|
const linkName = (0, import_node_path10.basename)(wp).replace(/\.sh$/, "");
|
|
156173
156224
|
await (0, import_promises3.symlink)(wp, (0, import_node_path10.join)(wrapperBinDir, linkName));
|
|
156174
156225
|
}
|
|
156175
|
-
|
|
156176
|
-
|
|
156226
|
+
pathParts.push(wrapperBinDir);
|
|
156227
|
+
}
|
|
156228
|
+
pathParts.push(toolsBin, inheritedPath);
|
|
156229
|
+
extraEnv = { ...extraEnv, PATH: pathParts.filter(Boolean).join(":") };
|
|
156230
|
+
if (localBinDirs.length > 0 || wrapperPaths.length > 0) {
|
|
156231
|
+
log("[adapter]", ` connectors injected +${Date.now() - t0}ms local=${localBinDirs.length} remote_wrappers=${wrapperPaths.length} env_keys=${Object.keys(job.env ?? {}).join(",")}`);
|
|
156177
156232
|
} else {
|
|
156178
|
-
extraEnv = { ...extraEnv, PATH: [toolsBin, inheritedPath].filter(Boolean).join(":") };
|
|
156179
156233
|
log("[adapter]", ` no connectors +${Date.now() - t0}ms`);
|
|
156180
156234
|
}
|
|
156181
156235
|
const jobAdapter = new ClaudeCodeAdapter({ ...this.baseOpts, env: extraEnv });
|
|
156182
|
-
|
|
156236
|
+
const handle = await jobAdapter.spawn(job);
|
|
156237
|
+
if (localCleanups.length > 0) {
|
|
156238
|
+
handle.onExit(() => {
|
|
156239
|
+
for (const fn of localCleanups) void fn().catch(() => {
|
|
156240
|
+
});
|
|
156241
|
+
});
|
|
156242
|
+
}
|
|
156243
|
+
return handle;
|
|
156183
156244
|
}
|
|
156184
156245
|
};
|
|
156185
156246
|
}
|
|
@@ -156195,6 +156256,7 @@ var init_src6 = __esm({
|
|
|
156195
156256
|
init_feishu();
|
|
156196
156257
|
init_well_known_skills();
|
|
156197
156258
|
init_github();
|
|
156259
|
+
init_registry2();
|
|
156198
156260
|
init_connector_adapter();
|
|
156199
156261
|
}
|
|
156200
156262
|
});
|
|
@@ -157990,11 +158052,11 @@ var init_routes2 = __esm({
|
|
|
157990
158052
|
});
|
|
157991
158053
|
|
|
157992
158054
|
// ../server/src/domains/projects/postgres-documents.ts
|
|
157993
|
-
var
|
|
158055
|
+
var import_node_fs9, ident2, PostgresProjectDocumentStore;
|
|
157994
158056
|
var init_postgres_documents = __esm({
|
|
157995
158057
|
"../server/src/domains/projects/postgres-documents.ts"() {
|
|
157996
158058
|
"use strict";
|
|
157997
|
-
|
|
158059
|
+
import_node_fs9 = __toESM(require("node:fs"), 1);
|
|
157998
158060
|
init_service2();
|
|
157999
158061
|
ident2 = (s2) => {
|
|
158000
158062
|
if (!/^[a-z_][a-z0-9_]*$/.test(s2)) throw new Error(`invalid schema name: ${s2}`);
|
|
@@ -158032,10 +158094,10 @@ var init_postgres_documents = __esm({
|
|
|
158032
158094
|
async backfillFromFile(file) {
|
|
158033
158095
|
const counted = await this.sql.query(`SELECT count(*) AS n FROM ${this.s}.project_document_spaces`);
|
|
158034
158096
|
if (Number(counted.rows[0]?.["n"] ?? 0) > 0) return;
|
|
158035
|
-
if (!
|
|
158097
|
+
if (!import_node_fs9.default.existsSync(file)) return;
|
|
158036
158098
|
let snap;
|
|
158037
158099
|
try {
|
|
158038
|
-
snap = JSON.parse(
|
|
158100
|
+
snap = JSON.parse(import_node_fs9.default.readFileSync(file, "utf8"));
|
|
158039
158101
|
} catch {
|
|
158040
158102
|
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`);
|
|
158041
158103
|
return;
|
|
@@ -159399,7 +159461,7 @@ function nodesDomain(deps) {
|
|
|
159399
159461
|
const here = (0, import_node_path12.dirname)((0, import_node_url4.fileURLToPath)(__esm_import_meta_url));
|
|
159400
159462
|
for (const rel of ["../../../../node-daemon/package.json", "../../../../../node-daemon/package.json"]) {
|
|
159401
159463
|
try {
|
|
159402
|
-
const raw = (0,
|
|
159464
|
+
const raw = (0, import_node_fs10.readFileSync)((0, import_node_path12.resolve)(here, rel), "utf8");
|
|
159403
159465
|
const pkg = JSON.parse(raw);
|
|
159404
159466
|
if (pkg.version) return { version: pkg.version, source: "monorepo" };
|
|
159405
159467
|
} catch {
|
|
@@ -159753,12 +159815,12 @@ function nodesDomain(deps) {
|
|
|
159753
159815
|
});
|
|
159754
159816
|
};
|
|
159755
159817
|
}
|
|
159756
|
-
var import_node_crypto24,
|
|
159818
|
+
var import_node_crypto24, import_node_fs10, import_node_url4, import_node_path12;
|
|
159757
159819
|
var init_routes4 = __esm({
|
|
159758
159820
|
"../server/src/domains/nodes/routes.ts"() {
|
|
159759
159821
|
"use strict";
|
|
159760
159822
|
import_node_crypto24 = require("node:crypto");
|
|
159761
|
-
|
|
159823
|
+
import_node_fs10 = require("node:fs");
|
|
159762
159824
|
import_node_url4 = require("node:url");
|
|
159763
159825
|
import_node_path12 = require("node:path");
|
|
159764
159826
|
init_src5();
|
|
@@ -160807,11 +160869,11 @@ function nameKey(name) {
|
|
|
160807
160869
|
function cleanName(name) {
|
|
160808
160870
|
return name.trim().replace(/\s+/g, " ");
|
|
160809
160871
|
}
|
|
160810
|
-
var
|
|
160872
|
+
var import_node_fs11, import_node_path13, import_node_crypto25, SEP, keyOf, prefixOf, MemoryWorkorderTagStore, FileWorkorderTagStore;
|
|
160811
160873
|
var init_tags = __esm({
|
|
160812
160874
|
"../server/src/domains/collab/tags.ts"() {
|
|
160813
160875
|
"use strict";
|
|
160814
|
-
|
|
160876
|
+
import_node_fs11 = __toESM(require("node:fs"), 1);
|
|
160815
160877
|
import_node_path13 = __toESM(require("node:path"), 1);
|
|
160816
160878
|
import_node_crypto25 = __toESM(require("node:crypto"), 1);
|
|
160817
160879
|
SEP = "::";
|
|
@@ -160889,7 +160951,7 @@ var init_tags = __esm({
|
|
|
160889
160951
|
super();
|
|
160890
160952
|
this.file = file;
|
|
160891
160953
|
try {
|
|
160892
|
-
const raw = JSON.parse(
|
|
160954
|
+
const raw = JSON.parse(import_node_fs11.default.readFileSync(file, "utf8"));
|
|
160893
160955
|
for (const [k2, v2] of Object.entries(raw)) {
|
|
160894
160956
|
if (v2 && typeof v2 === "object" && typeof v2.id === "string" && typeof v2.name === "string") this.map.set(k2, v2);
|
|
160895
160957
|
}
|
|
@@ -160898,10 +160960,10 @@ var init_tags = __esm({
|
|
|
160898
160960
|
}
|
|
160899
160961
|
persist() {
|
|
160900
160962
|
try {
|
|
160901
|
-
|
|
160963
|
+
import_node_fs11.default.mkdirSync(import_node_path13.default.dirname(this.file), { recursive: true });
|
|
160902
160964
|
const tmp = `${this.file}.tmp`;
|
|
160903
|
-
|
|
160904
|
-
|
|
160965
|
+
import_node_fs11.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
|
|
160966
|
+
import_node_fs11.default.renameSync(tmp, this.file);
|
|
160905
160967
|
} catch {
|
|
160906
160968
|
}
|
|
160907
160969
|
}
|
|
@@ -161080,11 +161142,12 @@ function collabDomain(opts) {
|
|
|
161080
161142
|
const wsArts = [...kernel.model.artifacts.values()].filter((a) => a.workspace === req.params.id);
|
|
161081
161143
|
const ops = (await Promise.all(wsArts.map((a) => oplog.read(a.id)))).flat();
|
|
161082
161144
|
const signalsForThisCompany = opts.dispatcherSignalsOf ? (id) => opts.dispatcherSignalsOf(req.auth.companyId, id) : void 0;
|
|
161083
|
-
const
|
|
161084
|
-
const roleDefaultOwnerOf =
|
|
161085
|
-
const o =
|
|
161145
|
+
const roleDefsByName = opts.roles ? new Map((await opts.roles.list()).map((r) => [r.name, { label: r.label, defaultOwner: r.defaultOwner }])) : void 0;
|
|
161146
|
+
const roleDefaultOwnerOf = roleDefsByName ? (role) => {
|
|
161147
|
+
const o = roleDefsByName.get(role)?.defaultOwner;
|
|
161086
161148
|
return o ? o : void 0;
|
|
161087
161149
|
} : void 0;
|
|
161150
|
+
const roleLabelOf = roleDefsByName ? (role) => roleDefsByName.get(role)?.label : void 0;
|
|
161088
161151
|
const detail = buildWorkorderDetail(
|
|
161089
161152
|
kernel.model,
|
|
161090
161153
|
req.params.id,
|
|
@@ -161096,7 +161159,8 @@ function collabDomain(opts) {
|
|
|
161096
161159
|
(id) => kernel.reviewerPreview(id),
|
|
161097
161160
|
signalsForThisCompany,
|
|
161098
161161
|
req.auth.actor,
|
|
161099
|
-
roleDefaultOwnerOf
|
|
161162
|
+
roleDefaultOwnerOf,
|
|
161163
|
+
roleLabelOf
|
|
161100
161164
|
);
|
|
161101
161165
|
if (detail) return { status: 200, body: detail };
|
|
161102
161166
|
const draft = await opts.workorderDrafts?.forWorkspace(req.params.id);
|
|
@@ -171187,7 +171251,7 @@ async function caseManifests(root) {
|
|
|
171187
171251
|
return output.sort();
|
|
171188
171252
|
}
|
|
171189
171253
|
async function optionalResolvedFile(allowedRoot, referenceBase, value) {
|
|
171190
|
-
if (typeof value !== "string" || ![".md", ".yaml", ".yml", ".json"].includes((0, import_node_path14.extname)(value))) return void 0;
|
|
171254
|
+
if (typeof value !== "string" || (0, import_node_path14.isAbsolute)(value) || ![".md", ".yaml", ".yml", ".json"].includes((0, import_node_path14.extname)(value))) return void 0;
|
|
171191
171255
|
const referenced = (0, import_node_path14.resolve)(referenceBase, value);
|
|
171192
171256
|
const path28 = inside(allowedRoot, referenced, "Referenced file");
|
|
171193
171257
|
try {
|
|
@@ -171198,7 +171262,7 @@ async function optionalResolvedFile(allowedRoot, referenceBase, value) {
|
|
|
171198
171262
|
return void 0;
|
|
171199
171263
|
}
|
|
171200
171264
|
}
|
|
171201
|
-
async function resolvedEvaluator(caseDirectory, caseSpecialPath, input) {
|
|
171265
|
+
async function resolvedEvaluator(repositoryRoot, caseDirectory, caseSpecialPath, input) {
|
|
171202
171266
|
const evaluator = structuredClone(object2(input, "caseSpecial.items[].evaluator"));
|
|
171203
171267
|
const configPath = text(evaluator["config"], "caseSpecial.items[].evaluator.config");
|
|
171204
171268
|
const absoluteConfig = inside((0, import_node_path14.dirname)(caseSpecialPath), configPath, "Evaluator config");
|
|
@@ -171208,14 +171272,14 @@ async function resolvedEvaluator(caseDirectory, caseSpecialPath, input) {
|
|
|
171208
171272
|
if (!value || typeof value !== "object") return;
|
|
171209
171273
|
for (const [key, child] of Object.entries(value)) {
|
|
171210
171274
|
const childPath = keyPath ? `${keyPath}.${key}` : key;
|
|
171211
|
-
const resolved = await optionalResolvedFile(
|
|
171275
|
+
const resolved = await optionalResolvedFile(repositoryRoot, (0, import_node_path14.dirname)(absoluteConfig), child);
|
|
171212
171276
|
if (resolved !== void 0) resolvedFiles[childPath] = resolved;
|
|
171213
171277
|
await walk(child, childPath);
|
|
171214
171278
|
}
|
|
171215
171279
|
};
|
|
171216
171280
|
await walk(config2, "");
|
|
171217
171281
|
const promptRef = config2["prompt"] ?? object2(config2["protocol"] ?? {}, "evaluator.protocol")["judge_prompt"];
|
|
171218
|
-
const resolvedPrompt = await optionalResolvedFile(
|
|
171282
|
+
const resolvedPrompt = await optionalResolvedFile(repositoryRoot, (0, import_node_path14.dirname)(absoluteConfig), promptRef);
|
|
171219
171283
|
return {
|
|
171220
171284
|
...evaluator,
|
|
171221
171285
|
resolved_config: {
|
|
@@ -171226,7 +171290,7 @@ async function resolvedEvaluator(caseDirectory, caseSpecialPath, input) {
|
|
|
171226
171290
|
resolved_config_path: (0, import_node_path14.relative)(caseDirectory, absoluteConfig)
|
|
171227
171291
|
};
|
|
171228
171292
|
}
|
|
171229
|
-
async function resolveCaseSpecial(caseDirectory, manifest) {
|
|
171293
|
+
async function resolveCaseSpecial(repositoryRoot, caseDirectory, manifest) {
|
|
171230
171294
|
const evaluation = object2(manifest["evaluation"], "case.evaluation");
|
|
171231
171295
|
const caseSpecialPath = inside(
|
|
171232
171296
|
caseDirectory,
|
|
@@ -171242,7 +171306,7 @@ async function resolveCaseSpecial(caseDirectory, manifest) {
|
|
|
171242
171306
|
const oraclePath = item["oracle"];
|
|
171243
171307
|
return {
|
|
171244
171308
|
...item,
|
|
171245
|
-
evaluator: await resolvedEvaluator(caseDirectory, caseSpecialPath, item["evaluator"]),
|
|
171309
|
+
evaluator: await resolvedEvaluator(repositoryRoot, caseDirectory, caseSpecialPath, item["evaluator"]),
|
|
171246
171310
|
...typeof oraclePath === "string" ? { resolved_oracle: await yaml(inside(caseDirectory, oraclePath, "Case oracle")) } : {}
|
|
171247
171311
|
};
|
|
171248
171312
|
}))
|
|
@@ -171278,7 +171342,7 @@ async function loadCase(root, manifestPath, commonRubric, registry2) {
|
|
|
171278
171342
|
stages: Array.isArray(classification["stages"]) ? classification["stages"].map((stage) => text(stage, "case.classification.stages[]")) : [],
|
|
171279
171343
|
commonRubric,
|
|
171280
171344
|
specialtyRubric: await (0, import_promises5.readFile)(inside(root, text(rubricEntry["path"], `S rubric ${scopeType}.path`), "S rubric path"), "utf8"),
|
|
171281
|
-
caseSpecial: await resolveCaseSpecial(caseDirectory, manifest),
|
|
171345
|
+
caseSpecial: await resolveCaseSpecial(root, caseDirectory, manifest),
|
|
171282
171346
|
task: await task(caseDirectory, manifest),
|
|
171283
171347
|
evaluatorVersion: `oasis-bench/${version2}`,
|
|
171284
171348
|
rubricVersion: `oasis-bench/${version2}`
|
|
@@ -171647,7 +171711,7 @@ function resolvePlaybook2(ref2, ctx) {
|
|
|
171647
171711
|
return def ? def.resolve(ctx) : null;
|
|
171648
171712
|
}
|
|
171649
171713
|
var BUG_FIX_INPUTS, BUG_FIX_STRUCTURE, ADOPT_EXTERNAL_INPUTS, ADOPT_EXTERNAL_STRUCTURE, BUILTIN2, PLAYBOOK_REFS;
|
|
171650
|
-
var
|
|
171714
|
+
var init_registry3 = __esm({
|
|
171651
171715
|
"../server/src/domains/playbooks/registry.ts"() {
|
|
171652
171716
|
"use strict";
|
|
171653
171717
|
init_src();
|
|
@@ -172031,7 +172095,7 @@ var init_routes8 = __esm({
|
|
|
172031
172095
|
"use strict";
|
|
172032
172096
|
import_node_crypto29 = require("node:crypto");
|
|
172033
172097
|
init_router();
|
|
172034
|
-
|
|
172098
|
+
init_registry3();
|
|
172035
172099
|
init_planner();
|
|
172036
172100
|
init_config_audit();
|
|
172037
172101
|
init_migrate();
|
|
@@ -172050,11 +172114,11 @@ function normalize(patch) {
|
|
|
172050
172114
|
...reviewRoles !== void 0 ? { reviewRoles: [...new Set(reviewRoles.map((r) => r.trim()).filter(Boolean))] } : {}
|
|
172051
172115
|
};
|
|
172052
172116
|
}
|
|
172053
|
-
var
|
|
172117
|
+
var import_node_fs12, import_node_path15, SEP2, keyOf2, prefixOf2, MemoryPlaybookOverrideStore, FilePlaybookOverrideStore;
|
|
172054
172118
|
var init_overrides = __esm({
|
|
172055
172119
|
"../server/src/domains/playbooks/overrides.ts"() {
|
|
172056
172120
|
"use strict";
|
|
172057
|
-
|
|
172121
|
+
import_node_fs12 = __toESM(require("node:fs"), 1);
|
|
172058
172122
|
import_node_path15 = __toESM(require("node:path"), 1);
|
|
172059
172123
|
SEP2 = "::";
|
|
172060
172124
|
keyOf2 = (companyId, ref2, nodeKey) => `${companyId}${SEP2}${ref2}${SEP2}${nodeKey}`;
|
|
@@ -172085,7 +172149,7 @@ var init_overrides = __esm({
|
|
|
172085
172149
|
super();
|
|
172086
172150
|
this.file = file;
|
|
172087
172151
|
try {
|
|
172088
|
-
const raw = JSON.parse(
|
|
172152
|
+
const raw = JSON.parse(import_node_fs12.default.readFileSync(file, "utf8"));
|
|
172089
172153
|
for (const [k2, v2] of Object.entries(raw)) {
|
|
172090
172154
|
if (v2 && typeof v2 === "object") this.map.set(k2, v2);
|
|
172091
172155
|
}
|
|
@@ -172094,10 +172158,10 @@ var init_overrides = __esm({
|
|
|
172094
172158
|
}
|
|
172095
172159
|
persist() {
|
|
172096
172160
|
try {
|
|
172097
|
-
|
|
172161
|
+
import_node_fs12.default.mkdirSync(import_node_path15.default.dirname(this.file), { recursive: true });
|
|
172098
172162
|
const tmp = `${this.file}.tmp`;
|
|
172099
|
-
|
|
172100
|
-
|
|
172163
|
+
import_node_fs12.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
|
|
172164
|
+
import_node_fs12.default.renameSync(tmp, this.file);
|
|
172101
172165
|
} catch {
|
|
172102
172166
|
}
|
|
172103
172167
|
}
|
|
@@ -172125,7 +172189,7 @@ var init_playbooks2 = __esm({
|
|
|
172125
172189
|
"../server/src/domains/playbooks/index.ts"() {
|
|
172126
172190
|
"use strict";
|
|
172127
172191
|
init_routes8();
|
|
172128
|
-
|
|
172192
|
+
init_registry3();
|
|
172129
172193
|
init_routes8();
|
|
172130
172194
|
init_overrides();
|
|
172131
172195
|
}
|
|
@@ -172451,17 +172515,17 @@ var init_daemon_adapter = __esm({
|
|
|
172451
172515
|
});
|
|
172452
172516
|
|
|
172453
172517
|
// ../server/src/side-map.ts
|
|
172454
|
-
var
|
|
172518
|
+
var import_node_fs13, import_node_path16, FileSideMap;
|
|
172455
172519
|
var init_side_map = __esm({
|
|
172456
172520
|
"../server/src/side-map.ts"() {
|
|
172457
172521
|
"use strict";
|
|
172458
|
-
|
|
172522
|
+
import_node_fs13 = __toESM(require("node:fs"), 1);
|
|
172459
172523
|
import_node_path16 = __toESM(require("node:path"), 1);
|
|
172460
172524
|
FileSideMap = class {
|
|
172461
172525
|
constructor(file) {
|
|
172462
172526
|
this.file = file;
|
|
172463
172527
|
try {
|
|
172464
|
-
const raw = JSON.parse(
|
|
172528
|
+
const raw = JSON.parse(import_node_fs13.default.readFileSync(file, "utf8"));
|
|
172465
172529
|
for (const [k2, v2] of Object.entries(raw)) if (typeof v2 === "string") this.map.set(k2, v2);
|
|
172466
172530
|
} catch {
|
|
172467
172531
|
}
|
|
@@ -172483,10 +172547,10 @@ var init_side_map = __esm({
|
|
|
172483
172547
|
}
|
|
172484
172548
|
persist() {
|
|
172485
172549
|
try {
|
|
172486
|
-
|
|
172550
|
+
import_node_fs13.default.mkdirSync(import_node_path16.default.dirname(this.file), { recursive: true });
|
|
172487
172551
|
const tmp = `${this.file}.tmp`;
|
|
172488
|
-
|
|
172489
|
-
|
|
172552
|
+
import_node_fs13.default.writeFileSync(tmp, JSON.stringify(Object.fromEntries(this.map), null, 2));
|
|
172553
|
+
import_node_fs13.default.renameSync(tmp, this.file);
|
|
172490
172554
|
} catch {
|
|
172491
172555
|
}
|
|
172492
172556
|
}
|
|
@@ -173880,7 +173944,8 @@ ${ctx.nodeFault}
|
|
|
173880
173944
|
// OASIS_STAGE=1:本会话里 link/spawn/unlink/seal/cancel-part 进编辑缓冲、apply 才提交(react 攒事务)。
|
|
173881
173945
|
env: { ...prov?.env ?? {}, OASIS_STAGE: "1", ...workspace ? { OASIS_WORKSPACE: workspace } : {} },
|
|
173882
173946
|
...prov?.wrapperPaths && prov.wrapperPaths.length > 0 ? { wrapperPaths: prov.wrapperPaths } : {},
|
|
173883
|
-
...prov?.requiredTools && prov.requiredTools.length > 0 ? { requiredTools: prov.requiredTools } : {}
|
|
173947
|
+
...prov?.requiredTools && prov.requiredTools.length > 0 ? { requiredTools: prov.requiredTools } : {},
|
|
173948
|
+
...prov?.connectorCreds && prov.connectorCreds.length > 0 ? { connectorCreds: prov.connectorCreds } : {}
|
|
173884
173949
|
};
|
|
173885
173950
|
this.deps.log?.(`[coordinator] ${logMsg}`);
|
|
173886
173951
|
const handle = await this.deps.adapter.spawn(job);
|
|
@@ -183371,10 +183436,10 @@ var init_postgres_model_prices = __esm({
|
|
|
183371
183436
|
// ../storage/src/postgres-type-registry.ts
|
|
183372
183437
|
async function backfillTypeRegistryFromFile(store, file) {
|
|
183373
183438
|
if ((await store.list()).length > 0) return { filled: 0 };
|
|
183374
|
-
if (!
|
|
183439
|
+
if (!import_node_fs14.default.existsSync(file)) return { filled: 0 };
|
|
183375
183440
|
let defs;
|
|
183376
183441
|
try {
|
|
183377
|
-
defs = JSON.parse(
|
|
183442
|
+
defs = JSON.parse(import_node_fs14.default.readFileSync(file, "utf8"));
|
|
183378
183443
|
} catch {
|
|
183379
183444
|
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`);
|
|
183380
183445
|
return { filled: 0 };
|
|
@@ -183384,11 +183449,11 @@ async function backfillTypeRegistryFromFile(store, file) {
|
|
|
183384
183449
|
console.log(`[type-registry-backfill] \u51B3\u7B56 0062 \u56DE\u586B\uFF1A${defs.length} \u4E2A\u4EA7\u7269\u7C7B\u578B\u5DF2\u8FC1\u5165 Postgres`);
|
|
183385
183450
|
return { filled: defs.length };
|
|
183386
183451
|
}
|
|
183387
|
-
var
|
|
183452
|
+
var import_node_fs14, ident13, PostgresTypeRegistryStore;
|
|
183388
183453
|
var init_postgres_type_registry = __esm({
|
|
183389
183454
|
"../storage/src/postgres-type-registry.ts"() {
|
|
183390
183455
|
"use strict";
|
|
183391
|
-
|
|
183456
|
+
import_node_fs14 = __toESM(require("node:fs"), 1);
|
|
183392
183457
|
init_esm2();
|
|
183393
183458
|
ident13 = (s2) => {
|
|
183394
183459
|
if (!/^[a-z_][a-z0-9_]*$/.test(s2)) throw new Error(`invalid schema name: ${s2}`);
|
|
@@ -184502,6 +184567,7 @@ async function buildActorProvision(service, actorId) {
|
|
|
184502
184567
|
const raw = await service.resolveActorEnv(actorId);
|
|
184503
184568
|
const env = { ...raw };
|
|
184504
184569
|
const wrapperPaths = [oasisWrapperScript()];
|
|
184570
|
+
const connectorCreds = [];
|
|
184505
184571
|
const requiredTools = /* @__PURE__ */ new Set();
|
|
184506
184572
|
const cleanupFns = [];
|
|
184507
184573
|
const SENSITIVE_KEYS = [
|
|
@@ -184519,11 +184585,13 @@ async function buildActorProvision(service, actorId) {
|
|
|
184519
184585
|
try {
|
|
184520
184586
|
const feishu = new FeishuConnector();
|
|
184521
184587
|
const sessionEnv = /* @__PURE__ */ new Map();
|
|
184522
|
-
|
|
184588
|
+
const feishuCreds = {
|
|
184523
184589
|
app_id: raw["FEISHU_APP_ID"],
|
|
184524
184590
|
app_secret: raw["FEISHU_APP_SECRET"],
|
|
184525
184591
|
...raw["FEISHU_USER_ACCESS_TOKEN"] ? { user_access_token: raw["FEISHU_USER_ACCESS_TOKEN"] } : {}
|
|
184526
|
-
}
|
|
184592
|
+
};
|
|
184593
|
+
connectorCreds.push({ slug: feishu.config.slug, credentials: feishuCreds });
|
|
184594
|
+
await feishu.inject(feishuCreds, sessionEnv);
|
|
184527
184595
|
for (const [k2, v2] of sessionEnv) env[k2] = v2;
|
|
184528
184596
|
const staged = stageConnectorWrapper(feishu);
|
|
184529
184597
|
if (staged) wrapperPaths.push(staged);
|
|
@@ -184537,7 +184605,12 @@ async function buildActorProvision(service, actorId) {
|
|
|
184537
184605
|
try {
|
|
184538
184606
|
const github = new GithubConnector();
|
|
184539
184607
|
const sessionEnv = /* @__PURE__ */ new Map();
|
|
184540
|
-
|
|
184608
|
+
const githubCreds = {
|
|
184609
|
+
access_token: raw["GITHUB_TOKEN"],
|
|
184610
|
+
actor_name: raw["GIT_AUTHOR_NAME"] ?? actorId.split(":").pop() ?? "oasis-agent"
|
|
184611
|
+
};
|
|
184612
|
+
connectorCreds.push({ slug: github.config.slug, credentials: githubCreds });
|
|
184613
|
+
await github.inject(githubCreds, sessionEnv);
|
|
184541
184614
|
for (const [k2, v2] of sessionEnv) env[k2] = v2;
|
|
184542
184615
|
const staged = stageConnectorWrapper(github);
|
|
184543
184616
|
if (staged) wrapperPaths.push(staged);
|
|
@@ -184551,7 +184624,7 @@ async function buildActorProvision(service, actorId) {
|
|
|
184551
184624
|
for (const fn of cleanupFns) await fn().catch(() => {
|
|
184552
184625
|
});
|
|
184553
184626
|
};
|
|
184554
|
-
return { env, wrapperPaths, requiredTools: [...requiredTools], cleanup };
|
|
184627
|
+
return { env, wrapperPaths, requiredTools: [...requiredTools], connectorCreds, cleanup };
|
|
184555
184628
|
}
|
|
184556
184629
|
async function buildActorContext(service, actorId) {
|
|
184557
184630
|
const [config2, connectors, installedSkills, record6] = await Promise.all([
|
|
@@ -185318,7 +185391,8 @@ async function startServe(opts) {
|
|
|
185318
185391
|
limits,
|
|
185319
185392
|
env: provision.env,
|
|
185320
185393
|
wrapperPaths: provision.wrapperPaths,
|
|
185321
|
-
...provision.requiredTools.length > 0 ? { requiredTools: provision.requiredTools } : {}
|
|
185394
|
+
...provision.requiredTools.length > 0 ? { requiredTools: provision.requiredTools } : {},
|
|
185395
|
+
...provision.connectorCreds.length > 0 ? { connectorCreds: provision.connectorCreds } : {}
|
|
185322
185396
|
});
|
|
185323
185397
|
const chunks = [];
|
|
185324
185398
|
handle.onOutput?.((chunk) => chunks.push(chunk));
|
|
@@ -185669,7 +185743,8 @@ async function startServe(opts) {
|
|
|
185669
185743
|
...workspace ? { OASIS_WORKSPACE: workspace } : {}
|
|
185670
185744
|
},
|
|
185671
185745
|
wrapperPaths: provision.wrapperPaths,
|
|
185672
|
-
...provision.requiredTools.length > 0 ? { requiredTools: provision.requiredTools } : {}
|
|
185746
|
+
...provision.requiredTools.length > 0 ? { requiredTools: provision.requiredTools } : {},
|
|
185747
|
+
...provision.connectorCreds.length > 0 ? { connectorCreds: provision.connectorCreds } : {}
|
|
185673
185748
|
});
|
|
185674
185749
|
const chatJobKey = `chat::${artifactId}`;
|
|
185675
185750
|
chatLiveSessions.set(chatJobKey, { artifactId, sessionId: traceRunId, dispatchId: handle.id, kill: () => handle.kill() });
|
|
@@ -187230,7 +187305,7 @@ var RuntimeRouterAdapter = class {
|
|
|
187230
187305
|
};
|
|
187231
187306
|
|
|
187232
187307
|
// ../cli/src/daemon/reap-claude-projects.ts
|
|
187233
|
-
var
|
|
187308
|
+
var import_node_fs15 = __toESM(require("node:fs"), 1);
|
|
187234
187309
|
var import_node_os9 = __toESM(require("node:os"), 1);
|
|
187235
187310
|
var import_node_path18 = __toESM(require("node:path"), 1);
|
|
187236
187311
|
function claudeProjectSlug(cwd) {
|
|
@@ -187243,9 +187318,9 @@ function claudeProjectsRoot() {
|
|
|
187243
187318
|
function reapClaudeProjects(workdir, runtimeKind) {
|
|
187244
187319
|
if (runtimeKind !== "claude" && runtimeKind !== "claude-code") return;
|
|
187245
187320
|
const dir = import_node_path18.default.join(claudeProjectsRoot(), claudeProjectSlug(workdir));
|
|
187246
|
-
if (!
|
|
187321
|
+
if (!import_node_fs15.default.existsSync(dir)) return;
|
|
187247
187322
|
try {
|
|
187248
|
-
|
|
187323
|
+
import_node_fs15.default.rmSync(dir, { recursive: true, force: true });
|
|
187249
187324
|
} catch {
|
|
187250
187325
|
}
|
|
187251
187326
|
}
|
|
@@ -187346,13 +187421,13 @@ async function startNode(opts) {
|
|
|
187346
187421
|
|
|
187347
187422
|
// ../cli/src/daemon/machine-id.ts
|
|
187348
187423
|
var import_node_child_process16 = require("node:child_process");
|
|
187349
|
-
var
|
|
187424
|
+
var import_node_fs16 = require("node:fs");
|
|
187350
187425
|
var import_node_crypto38 = require("node:crypto");
|
|
187351
187426
|
var import_node_os11 = require("node:os");
|
|
187352
187427
|
function linuxMachineId() {
|
|
187353
187428
|
for (const p2 of ["/etc/machine-id", "/var/lib/dbus/machine-id"]) {
|
|
187354
187429
|
try {
|
|
187355
|
-
const v2 = (0,
|
|
187430
|
+
const v2 = (0, import_node_fs16.readFileSync)(p2, "utf8").trim();
|
|
187356
187431
|
if (v2) return v2;
|
|
187357
187432
|
} catch {
|
|
187358
187433
|
}
|
|
@@ -189577,7 +189652,7 @@ ${res.warning}`);
|
|
|
189577
189652
|
init_src6();
|
|
189578
189653
|
|
|
189579
189654
|
// src/index.ts
|
|
189580
|
-
var PKG_VERSION = true ? "0.1.
|
|
189655
|
+
var PKG_VERSION = true ? "0.1.71" : "dev";
|
|
189581
189656
|
var OASIS_DIR = path27.join(os9.homedir(), ".oasis");
|
|
189582
189657
|
var CONFIG_FILE = path27.join(OASIS_DIR, "node-config.json");
|
|
189583
189658
|
var PID_FILE = path27.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.71",
|
|
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": "d0ee4c4d3e4ff3fb73c414c8a84c9eab1b20916d"
|
|
30
30
|
}
|
|
31
31
|
}
|