oasis_test_v2 2.2.34 → 2.2.35
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.js +234 -199
- package/package.json +2 -2
package/dist/index.js
CHANGED
|
@@ -149,6 +149,9 @@ function normalizeGitRemote(remote) {
|
|
|
149
149
|
function projectActorKind(actorId) {
|
|
150
150
|
return actorId.startsWith("actor:human:") ? "human" : "agent";
|
|
151
151
|
}
|
|
152
|
+
function projectIdFromUuid(uuid2) {
|
|
153
|
+
return `proj_${uuid2.replace(/-/g, "").slice(0, 8)}`;
|
|
154
|
+
}
|
|
152
155
|
var init_project = __esm({
|
|
153
156
|
"../contract/src/project.ts"() {
|
|
154
157
|
"use strict";
|
|
@@ -205734,10 +205737,10 @@ async function startOasisServer(opts) {
|
|
|
205734
205737
|
...fp(p2)
|
|
205735
205738
|
}))
|
|
205736
205739
|
] : [];
|
|
205737
|
-
const { randomUUID:
|
|
205740
|
+
const { randomUUID: randomUUID42 } = await import("node:crypto");
|
|
205738
205741
|
try {
|
|
205739
205742
|
await store.enqueuePendingMessage({
|
|
205740
|
-
id:
|
|
205743
|
+
id: randomUUID42(),
|
|
205741
205744
|
chatSessionId: input.chatSessionId,
|
|
205742
205745
|
text: input.text,
|
|
205743
205746
|
createdAt: (/* @__PURE__ */ new Date()).toISOString(),
|
|
@@ -205770,11 +205773,11 @@ async function startOasisServer(opts) {
|
|
|
205770
205773
|
...f2?.mtime ? { srcMtime: f2.mtime } : {}
|
|
205771
205774
|
};
|
|
205772
205775
|
});
|
|
205773
|
-
const { randomUUID:
|
|
205776
|
+
const { randomUUID: randomUUID42 } = await import("node:crypto");
|
|
205774
205777
|
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
205775
205778
|
try {
|
|
205776
205779
|
await store.enqueuePendingMessage({
|
|
205777
|
-
id:
|
|
205780
|
+
id: randomUUID42(),
|
|
205778
205781
|
chatSessionId: input.chatSessionId,
|
|
205779
205782
|
text: "",
|
|
205780
205783
|
createdAt: nowIso,
|
|
@@ -207102,7 +207105,7 @@ async function startOasisServer(opts) {
|
|
|
207102
207105
|
const openRoom = async () => {
|
|
207103
207106
|
let chatSessionId2;
|
|
207104
207107
|
if (chatStore) {
|
|
207105
|
-
const { randomUUID:
|
|
207108
|
+
const { randomUUID: randomUUID42 } = await import("node:crypto");
|
|
207106
207109
|
const known = discussSessions.get(itemKey);
|
|
207107
207110
|
const knownSession = known ? await chatStore.getSession(known) : null;
|
|
207108
207111
|
if (knownSession && knownSession.workspace === ctx.workspace && knownSession.humanActorId === ctx.ownerId && (!body2.escalationId || knownSession.escalationId === body2.escalationId)) chatSessionId2 = known;
|
|
@@ -207111,7 +207114,7 @@ async function startOasisServer(opts) {
|
|
|
207111
207114
|
chatSessionId2 = existing[0]?.id;
|
|
207112
207115
|
}
|
|
207113
207116
|
if (!chatSessionId2) {
|
|
207114
|
-
chatSessionId2 =
|
|
207117
|
+
chatSessionId2 = randomUUID42();
|
|
207115
207118
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
207116
207119
|
const title = `\u89E3\u51B3\uFF1A${ctx.seed.slice(ctx.seed.indexOf("\uFF1A") + 1, ctx.seed.indexOf("\uFF1A") + 25) || "\u5DE5\u5355\u5361\u70B9"}`;
|
|
207117
207120
|
const reg0 = (await resolveEngine(currentCompanyId).catch(() => null))?.registry ?? opts.registry;
|
|
@@ -207980,14 +207983,14 @@ ${composed}`;
|
|
|
207980
207983
|
runtimeSessionId: session.nativeSessionId ?? session.id
|
|
207981
207984
|
}).catch(() => void 0);
|
|
207982
207985
|
}
|
|
207983
|
-
const { randomUUID:
|
|
207986
|
+
const { randomUUID: randomUUID43 } = await import("node:crypto");
|
|
207984
207987
|
const persistAttachments = effectiveAttachments.map((a) => ({
|
|
207985
207988
|
name: a.name,
|
|
207986
207989
|
...a.blobRef !== void 0 ? { blobRef: a.blobRef } : {},
|
|
207987
207990
|
...a.contentType !== void 0 ? { contentType: a.contentType } : {}
|
|
207988
207991
|
}));
|
|
207989
207992
|
await chatStore.appendMessage({
|
|
207990
|
-
id:
|
|
207993
|
+
id: randomUUID43(),
|
|
207991
207994
|
sessionId: persistTarget.id,
|
|
207992
207995
|
role: "user",
|
|
207993
207996
|
content: persistedUserMessage,
|
|
@@ -208462,8 +208465,8 @@ ${composed}`;
|
|
|
208462
208465
|
}
|
|
208463
208466
|
}
|
|
208464
208467
|
const { spawn: spawn10 } = await import("node:child_process");
|
|
208465
|
-
const { randomUUID:
|
|
208466
|
-
const sessionId = body2.sessionId ??
|
|
208468
|
+
const { randomUUID: randomUUID42 } = await import("node:crypto");
|
|
208469
|
+
const sessionId = body2.sessionId ?? randomUUID42();
|
|
208467
208470
|
const args = [
|
|
208468
208471
|
"-p",
|
|
208469
208472
|
body2.message,
|
|
@@ -208759,8 +208762,8 @@ ${composed}`;
|
|
|
208759
208762
|
res.writeHead(400, { "content-type": "application/json" }).end(JSON.stringify({ error: `\u56DE\u8C03\u5730\u5740\u4E0D\u53EF\u7528\uFF0C\u5DF2\u4E2D\u6B62\uFF08\u907F\u514D\u5728 GitHub \u4E0A\u7559\u4E0B\u5B64\u513F App\uFF09\uFF1A${e.message}` }));
|
|
208760
208763
|
return;
|
|
208761
208764
|
}
|
|
208762
|
-
const { randomUUID:
|
|
208763
|
-
const state =
|
|
208765
|
+
const { randomUUID: randomUUID42 } = await import("node:crypto");
|
|
208766
|
+
const state = randomUUID42();
|
|
208764
208767
|
const nameSlug = (actorName || actorId?.split(":").pop() || owner?.login || "bot").toLowerCase().replace(/[^a-z0-9-]+/g, "-").replace(/^-|-$/g, "").slice(0, 24) || "bot";
|
|
208765
208768
|
const manifest = buildAppManifest({
|
|
208766
208769
|
employeeSlug: nameSlug,
|
|
@@ -212824,6 +212827,19 @@ var init_stats = __esm({
|
|
|
212824
212827
|
}
|
|
212825
212828
|
});
|
|
212826
212829
|
|
|
212830
|
+
// ../server/src/domains/projects/project-id.ts
|
|
212831
|
+
function randomProjectId() {
|
|
212832
|
+
return projectIdFromUuid((0, import_node_crypto41.randomUUID)());
|
|
212833
|
+
}
|
|
212834
|
+
var import_node_crypto41;
|
|
212835
|
+
var init_project_id = __esm({
|
|
212836
|
+
"../server/src/domains/projects/project-id.ts"() {
|
|
212837
|
+
"use strict";
|
|
212838
|
+
import_node_crypto41 = require("node:crypto");
|
|
212839
|
+
init_src();
|
|
212840
|
+
}
|
|
212841
|
+
});
|
|
212842
|
+
|
|
212827
212843
|
// ../server/src/domains/projects/service.ts
|
|
212828
212844
|
function sanitizeCreatorActorId(raw) {
|
|
212829
212845
|
const id = raw?.trim();
|
|
@@ -212965,10 +212981,6 @@ function namedError(name, message) {
|
|
|
212965
212981
|
err.name = name;
|
|
212966
212982
|
return err;
|
|
212967
212983
|
}
|
|
212968
|
-
function slugProjectId(name) {
|
|
212969
|
-
const slug6 = name.trim().toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, "");
|
|
212970
|
-
return `proj_${slug6 || Date.now()}`;
|
|
212971
|
-
}
|
|
212972
212984
|
function dirname24(path41) {
|
|
212973
212985
|
const norm = path41.replace(/^\/+|\/+$/g, "");
|
|
212974
212986
|
const idx = norm.lastIndexOf("/");
|
|
@@ -213165,6 +213177,7 @@ var init_service4 = __esm({
|
|
|
213165
213177
|
init_uncategorized_project();
|
|
213166
213178
|
init_workorders();
|
|
213167
213179
|
init_stats();
|
|
213180
|
+
init_project_id();
|
|
213168
213181
|
init_node_state();
|
|
213169
213182
|
DEFAULT_AGENT_ACTOR = "actor:agent:system";
|
|
213170
213183
|
CHAT_FOLDER_TASK_LABEL = "\u5BF9\u8BDD";
|
|
@@ -213454,9 +213467,14 @@ var init_service4 = __esm({
|
|
|
213454
213467
|
async createProject(input) {
|
|
213455
213468
|
if (!input.name.trim()) throw new Error("project name is required");
|
|
213456
213469
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
213457
|
-
|
|
213458
|
-
|
|
213459
|
-
|
|
213470
|
+
let id;
|
|
213471
|
+
if (input.id !== void 0 && input.id.trim() !== "") {
|
|
213472
|
+
id = input.id;
|
|
213473
|
+
const existing = await this.projects.getProject(id);
|
|
213474
|
+
if (existing) return this.withProjectDerivedState(existing);
|
|
213475
|
+
} else {
|
|
213476
|
+
id = await this.allocateProjectId();
|
|
213477
|
+
}
|
|
213460
213478
|
const createdById = sanitizeCreatorActorId(input.createdBy);
|
|
213461
213479
|
const project = {
|
|
213462
213480
|
id,
|
|
@@ -213492,6 +213510,14 @@ var init_service4 = __esm({
|
|
|
213492
213510
|
}
|
|
213493
213511
|
return await this.getProject(id) ?? project;
|
|
213494
213512
|
}
|
|
213513
|
+
/** 给「没带 id 的新建」挑一个本公司还没用过的随机 id(`randomProjectId`);连撞几次说明生成器坏了,直接报错。 */
|
|
213514
|
+
async allocateProjectId() {
|
|
213515
|
+
for (let attempt = 0; attempt < 5; attempt++) {
|
|
213516
|
+
const id = randomProjectId();
|
|
213517
|
+
if (!await this.projects.getProject(id)) return id;
|
|
213518
|
+
}
|
|
213519
|
+
throw new Error("project id allocation failed: random ids kept colliding");
|
|
213520
|
+
}
|
|
213495
213521
|
async getProject(id) {
|
|
213496
213522
|
if (isUncategorizedProjectId(id)) return this.buildUncategorizedProject();
|
|
213497
213523
|
const project = await this.projects.getProject(id);
|
|
@@ -214834,12 +214860,12 @@ var init_service4 = __esm({
|
|
|
214834
214860
|
});
|
|
214835
214861
|
|
|
214836
214862
|
// ../server/src/dev-store.ts
|
|
214837
|
-
var
|
|
214863
|
+
var import_node_crypto42, fs20, path21, NdjsonOplogStore, DirBlobStore, MUTATORS, FileTypeRegistryStore, FileRoleRegistryStore, FileRegistryStore, FileAssistantBindStore, FileHumanPrefsStore, FileProjectStateStore, FileArtifactStateStore, FileTraceStore, MemoryChatSessionStore, FileChatSessionStore, MemoryChatTurnStore, FileChatTurnStore, MemoryReadMarkerStore, FileReadMarkerStore;
|
|
214838
214864
|
var init_dev_store = __esm({
|
|
214839
214865
|
"../server/src/dev-store.ts"() {
|
|
214840
214866
|
"use strict";
|
|
214841
214867
|
init_src();
|
|
214842
|
-
|
|
214868
|
+
import_node_crypto42 = require("node:crypto");
|
|
214843
214869
|
fs20 = __toESM(require("node:fs"), 1);
|
|
214844
214870
|
path21 = __toESM(require("node:path"), 1);
|
|
214845
214871
|
init_src();
|
|
@@ -214893,7 +214919,7 @@ var init_dev_store = __esm({
|
|
|
214893
214919
|
return path21.join(this.dir, hash2);
|
|
214894
214920
|
}
|
|
214895
214921
|
async put(bytes2) {
|
|
214896
|
-
const hash2 = (0,
|
|
214922
|
+
const hash2 = (0, import_node_crypto42.createHash)("sha256").update(bytes2).digest("hex");
|
|
214897
214923
|
const file = this.fileOf(hash2);
|
|
214898
214924
|
if (!fs20.existsSync(file)) fs20.writeFileSync(file, bytes2);
|
|
214899
214925
|
return hash2;
|
|
@@ -216093,7 +216119,7 @@ var init_company_engine_router = __esm({
|
|
|
216093
216119
|
|
|
216094
216120
|
// ../server/src/skill-market-client.ts
|
|
216095
216121
|
function digestOf2(bytes2) {
|
|
216096
|
-
return `sha256:${(0,
|
|
216122
|
+
return `sha256:${(0, import_node_crypto43.createHash)("sha256").update(bytes2).digest("hex")}`;
|
|
216097
216123
|
}
|
|
216098
216124
|
function createSkillMarketClientFromEnv(env = process.env) {
|
|
216099
216125
|
const base = env["SKILL_MARKET_BASE_URL"];
|
|
@@ -216104,11 +216130,11 @@ function createSkillMarketClientFromEnv(env = process.env) {
|
|
|
216104
216130
|
function sleep4(ms) {
|
|
216105
216131
|
return new Promise((r) => setTimeout(r, ms));
|
|
216106
216132
|
}
|
|
216107
|
-
var
|
|
216133
|
+
var import_node_crypto43, DisabledSkillMarketClient, HttpSkillMarketClient;
|
|
216108
216134
|
var init_skill_market_client = __esm({
|
|
216109
216135
|
"../server/src/skill-market-client.ts"() {
|
|
216110
216136
|
"use strict";
|
|
216111
|
-
|
|
216137
|
+
import_node_crypto43 = require("node:crypto");
|
|
216112
216138
|
init_src();
|
|
216113
216139
|
DisabledSkillMarketClient = class {
|
|
216114
216140
|
async listSkills(_input) {
|
|
@@ -217030,11 +217056,11 @@ function typeDefError(def, mode) {
|
|
|
217030
217056
|
}
|
|
217031
217057
|
return null;
|
|
217032
217058
|
}
|
|
217033
|
-
var
|
|
217059
|
+
var import_node_crypto44, RESERVED_FIELD_NAMES, ARTIFACT_TYPE_ACCENTS, TYPE_DEF_SCHEMA, TypesAdminService;
|
|
217034
217060
|
var init_types_admin = __esm({
|
|
217035
217061
|
"../server/src/types-admin.ts"() {
|
|
217036
217062
|
"use strict";
|
|
217037
|
-
|
|
217063
|
+
import_node_crypto44 = require("node:crypto");
|
|
217038
217064
|
init_zod();
|
|
217039
217065
|
init_src5();
|
|
217040
217066
|
init_config_audit();
|
|
@@ -217161,7 +217187,7 @@ var init_types_admin = __esm({
|
|
|
217161
217187
|
async trace(change, target, by, detail) {
|
|
217162
217188
|
try {
|
|
217163
217189
|
await this.audit?.({
|
|
217164
|
-
id: `reg_${(0,
|
|
217190
|
+
id: `reg_${(0, import_node_crypto44.randomUUID)()}`,
|
|
217165
217191
|
actor: by ?? SYSTEM_CONFIG_ACTOR,
|
|
217166
217192
|
kind: "registry_change",
|
|
217167
217193
|
target,
|
|
@@ -217309,11 +217335,11 @@ function roleDefError(def, mode) {
|
|
|
217309
217335
|
}
|
|
217310
217336
|
return null;
|
|
217311
217337
|
}
|
|
217312
|
-
var
|
|
217338
|
+
var import_node_crypto45, ACCENTS, ROLE_DEF_SCHEMA, RolesAdminService;
|
|
217313
217339
|
var init_roles_admin = __esm({
|
|
217314
217340
|
"../server/src/roles-admin.ts"() {
|
|
217315
217341
|
"use strict";
|
|
217316
|
-
|
|
217342
|
+
import_node_crypto45 = require("node:crypto");
|
|
217317
217343
|
init_zod();
|
|
217318
217344
|
init_src5();
|
|
217319
217345
|
init_config_audit();
|
|
@@ -217338,7 +217364,7 @@ var init_roles_admin = __esm({
|
|
|
217338
217364
|
async trace(change, target, by, detail) {
|
|
217339
217365
|
try {
|
|
217340
217366
|
await this.deps.audit?.({
|
|
217341
|
-
id: `reg_${(0,
|
|
217367
|
+
id: `reg_${(0, import_node_crypto45.randomUUID)()}`,
|
|
217342
217368
|
actor: by ?? SYSTEM_CONFIG_ACTOR,
|
|
217343
217369
|
kind: "registry_change",
|
|
217344
217370
|
target,
|
|
@@ -219589,7 +219615,7 @@ function wireRecoveredChatTurn(deps) {
|
|
|
219589
219615
|
const segText = itemLedger.projectContent();
|
|
219590
219616
|
const segParts = collectedParts();
|
|
219591
219617
|
const closingId = currentMsgId;
|
|
219592
|
-
const nextId = (0,
|
|
219618
|
+
const nextId = (0, import_node_crypto46.randomUUID)();
|
|
219593
219619
|
currentMsgId = nextId;
|
|
219594
219620
|
itemLedger.beginSegment();
|
|
219595
219621
|
live.setAssistantMessageId(nextId);
|
|
@@ -219603,7 +219629,7 @@ function wireRecoveredChatTurn(deps) {
|
|
|
219603
219629
|
...segParts.length ? { parts: segParts } : {}
|
|
219604
219630
|
}).catch(() => void 0);
|
|
219605
219631
|
await store.appendMessage({
|
|
219606
|
-
id: (0,
|
|
219632
|
+
id: (0, import_node_crypto46.randomUUID)(),
|
|
219607
219633
|
sessionId: plan.chatSessionId,
|
|
219608
219634
|
role: "user",
|
|
219609
219635
|
content: text5,
|
|
@@ -220042,11 +220068,11 @@ async function recoverChatTurnsAcrossCompanies(deps) {
|
|
|
220042
220068
|
}
|
|
220043
220069
|
return { ...result, recovered };
|
|
220044
220070
|
}
|
|
220045
|
-
var
|
|
220071
|
+
var import_node_crypto46, asObj3, partsOf, maxPartSeq, exitFailed, exitErrorText, runTerminalPatch;
|
|
220046
220072
|
var init_chat_recovery = __esm({
|
|
220047
220073
|
"../server/src/chat-recovery.ts"() {
|
|
220048
220074
|
"use strict";
|
|
220049
|
-
|
|
220075
|
+
import_node_crypto46 = require("node:crypto");
|
|
220050
220076
|
init_chat_parts();
|
|
220051
220077
|
init_sink();
|
|
220052
220078
|
init_resilient_appender();
|
|
@@ -220076,8 +220102,8 @@ var init_chat_recovery = __esm({
|
|
|
220076
220102
|
|
|
220077
220103
|
// ../server/src/auth/crypto.ts
|
|
220078
220104
|
function hashPassword(password) {
|
|
220079
|
-
const salt = (0,
|
|
220080
|
-
const dk = (0,
|
|
220105
|
+
const salt = (0, import_node_crypto47.randomBytes)(16);
|
|
220106
|
+
const dk = (0, import_node_crypto47.scryptSync)(password, salt, SCRYPT_KEYLEN, { N: SCRYPT_N, maxmem: 64 * 1024 * 1024 });
|
|
220081
220107
|
return `scrypt$${SCRYPT_N}$${salt.toString("base64url")}$${dk.toString("base64url")}`;
|
|
220082
220108
|
}
|
|
220083
220109
|
function verifyPassword(password, stored) {
|
|
@@ -220094,8 +220120,8 @@ function verifyPassword(password, stored) {
|
|
|
220094
220120
|
return false;
|
|
220095
220121
|
}
|
|
220096
220122
|
if (expected.length === 0) return false;
|
|
220097
|
-
const dk = (0,
|
|
220098
|
-
return dk.length === expected.length && (0,
|
|
220123
|
+
const dk = (0, import_node_crypto47.scryptSync)(password, salt, expected.length, { N, maxmem: 64 * 1024 * 1024 });
|
|
220124
|
+
return dk.length === expected.length && (0, import_node_crypto47.timingSafeEqual)(dk, expected);
|
|
220099
220125
|
}
|
|
220100
220126
|
function b64urlJson(value2) {
|
|
220101
220127
|
return Buffer.from(JSON.stringify(value2)).toString("base64url");
|
|
@@ -220103,17 +220129,17 @@ function b64urlJson(value2) {
|
|
|
220103
220129
|
function signSession(claims, secret) {
|
|
220104
220130
|
const head = b64urlJson({ alg: "HS256", typ: "JWT" });
|
|
220105
220131
|
const body2 = b64urlJson(claims);
|
|
220106
|
-
const sig = (0,
|
|
220132
|
+
const sig = (0, import_node_crypto47.createHmac)("sha256", secret).update(`${head}.${body2}`).digest("base64url");
|
|
220107
220133
|
return `${head}.${body2}.${sig}`;
|
|
220108
220134
|
}
|
|
220109
220135
|
function verifySession(token, secret, nowMs) {
|
|
220110
220136
|
const parts = token.split(".");
|
|
220111
220137
|
if (parts.length !== 3) return null;
|
|
220112
220138
|
const [head, body2, sig] = parts;
|
|
220113
|
-
const expected = (0,
|
|
220139
|
+
const expected = (0, import_node_crypto47.createHmac)("sha256", secret).update(`${head}.${body2}`).digest("base64url");
|
|
220114
220140
|
const got = Buffer.from(sig);
|
|
220115
220141
|
const exp = Buffer.from(expected);
|
|
220116
|
-
if (got.length !== exp.length || !(0,
|
|
220142
|
+
if (got.length !== exp.length || !(0, import_node_crypto47.timingSafeEqual)(got, exp)) return null;
|
|
220117
220143
|
let claims;
|
|
220118
220144
|
try {
|
|
220119
220145
|
claims = JSON.parse(Buffer.from(body2, "base64url").toString("utf8"));
|
|
@@ -220125,21 +220151,21 @@ function verifySession(token, secret, nowMs) {
|
|
|
220125
220151
|
return claims;
|
|
220126
220152
|
}
|
|
220127
220153
|
function generateCode() {
|
|
220128
|
-
return String((0,
|
|
220154
|
+
return String((0, import_node_crypto47.randomInt)(0, 1e6)).padStart(6, "0");
|
|
220129
220155
|
}
|
|
220130
220156
|
function hashCode(code2, secret) {
|
|
220131
|
-
return (0,
|
|
220157
|
+
return (0, import_node_crypto47.createHmac)("sha256", secret).update(`code:${code2}`).digest("base64url");
|
|
220132
220158
|
}
|
|
220133
220159
|
function safeEqualHash(a, b2) {
|
|
220134
220160
|
const ba = Buffer.from(a);
|
|
220135
220161
|
const bb = Buffer.from(b2);
|
|
220136
|
-
return ba.length === bb.length && (0,
|
|
220162
|
+
return ba.length === bb.length && (0, import_node_crypto47.timingSafeEqual)(ba, bb);
|
|
220137
220163
|
}
|
|
220138
|
-
var
|
|
220164
|
+
var import_node_crypto47, SCRYPT_N, SCRYPT_KEYLEN;
|
|
220139
220165
|
var init_crypto2 = __esm({
|
|
220140
220166
|
"../server/src/auth/crypto.ts"() {
|
|
220141
220167
|
"use strict";
|
|
220142
|
-
|
|
220168
|
+
import_node_crypto47 = require("node:crypto");
|
|
220143
220169
|
SCRYPT_N = 16384;
|
|
220144
220170
|
SCRYPT_KEYLEN = 32;
|
|
220145
220171
|
}
|
|
@@ -221289,16 +221315,16 @@ function variableKeyFromEnv(env = process.env) {
|
|
|
221289
221315
|
return buf;
|
|
221290
221316
|
}
|
|
221291
221317
|
if (env.NODE_ENV === "production") throw new Error("OASIS_VAR_KEY is required in production");
|
|
221292
|
-
return (0,
|
|
221318
|
+
return (0, import_node_crypto48.createHash)("sha256").update("oasis-dev-only-variable-key").digest();
|
|
221293
221319
|
}
|
|
221294
221320
|
function dedupe(ids2) {
|
|
221295
221321
|
return [...new Set(ids2.filter((x2) => typeof x2 === "string" && x2.length > 0))];
|
|
221296
221322
|
}
|
|
221297
|
-
var
|
|
221323
|
+
var import_node_crypto48, REDACTED_MARKER, ActorsService, mask, changedKeys;
|
|
221298
221324
|
var init_service5 = __esm({
|
|
221299
221325
|
"../server/src/domains/actors/service.ts"() {
|
|
221300
221326
|
"use strict";
|
|
221301
|
-
|
|
221327
|
+
import_node_crypto48 = require("node:crypto");
|
|
221302
221328
|
init_skill_fetcher();
|
|
221303
221329
|
init_identity();
|
|
221304
221330
|
init_migrate();
|
|
@@ -221862,7 +221888,7 @@ ${input.description}
|
|
|
221862
221888
|
*/
|
|
221863
221889
|
buildSkillFile(skillId, path41, content3, now) {
|
|
221864
221890
|
const bytes2 = new TextEncoder().encode(content3);
|
|
221865
|
-
const blobHash = (0,
|
|
221891
|
+
const blobHash = (0, import_node_crypto48.createHash)("sha256").update(bytes2).digest("hex");
|
|
221866
221892
|
return { skillId, path: path41, content: content3, blobHash, size: bytes2.length, updatedAt: now };
|
|
221867
221893
|
}
|
|
221868
221894
|
/**
|
|
@@ -222514,15 +222540,15 @@ ${input.description}
|
|
|
222514
222540
|
return hit ? { value: hit.value, ...hit.origin ? { origin: hit.origin } : {} } : null;
|
|
222515
222541
|
}
|
|
222516
222542
|
encrypt(plain) {
|
|
222517
|
-
const iv = (0,
|
|
222518
|
-
const cipher = (0,
|
|
222543
|
+
const iv = (0, import_node_crypto48.randomBytes)(12);
|
|
222544
|
+
const cipher = (0, import_node_crypto48.createCipheriv)("aes-256-gcm", this.opts.variableKey, iv);
|
|
222519
222545
|
const enc4 = Buffer.concat([cipher.update(plain, "utf8"), cipher.final()]);
|
|
222520
222546
|
return [iv.toString("base64"), cipher.getAuthTag().toString("base64"), enc4.toString("base64")].join(".");
|
|
222521
222547
|
}
|
|
222522
222548
|
decrypt(packed) {
|
|
222523
222549
|
const [iv, tag, data] = packed.split(".");
|
|
222524
222550
|
if (!iv || !tag || typeof data !== "string") throw new Error("malformed ciphertext");
|
|
222525
|
-
const decipher = (0,
|
|
222551
|
+
const decipher = (0, import_node_crypto48.createDecipheriv)("aes-256-gcm", this.opts.variableKey, Buffer.from(iv, "base64"));
|
|
222526
222552
|
decipher.setAuthTag(Buffer.from(tag, "base64"));
|
|
222527
222553
|
return Buffer.concat([decipher.update(Buffer.from(data, "base64")), decipher.final()]).toString("utf8");
|
|
222528
222554
|
}
|
|
@@ -223140,7 +223166,7 @@ async function listSkillMetadataForActor(args) {
|
|
|
223140
223166
|
usedDirs.add(dir);
|
|
223141
223167
|
const sorted = [...metas].sort((a, b2) => a.path.localeCompare(b2.path));
|
|
223142
223168
|
let latest = "1970-01-01T00:00:00.000Z";
|
|
223143
|
-
const hasher = (0,
|
|
223169
|
+
const hasher = (0, import_node_crypto49.createHash)("sha256");
|
|
223144
223170
|
for (const m2 of sorted) {
|
|
223145
223171
|
if (m2.updatedAt > latest) latest = m2.updatedAt;
|
|
223146
223172
|
hasher.update(m2.path);
|
|
@@ -223165,11 +223191,11 @@ async function listSkillMetadataForActor(args) {
|
|
|
223165
223191
|
const dir = sanitizeSkillDir(c.name, c.slug);
|
|
223166
223192
|
if (usedDirs.has(dir)) continue;
|
|
223167
223193
|
usedDirs.add(dir);
|
|
223168
|
-
const hasher = (0,
|
|
223194
|
+
const hasher = (0, import_node_crypto49.createHash)("sha256");
|
|
223169
223195
|
for (const p2 of paths) {
|
|
223170
223196
|
hasher.update(p2);
|
|
223171
223197
|
hasher.update("\0");
|
|
223172
|
-
hasher.update((0,
|
|
223198
|
+
hasher.update((0, import_node_crypto49.createHash)("sha256").update(c.files[p2]).digest("hex"));
|
|
223173
223199
|
hasher.update("\0");
|
|
223174
223200
|
}
|
|
223175
223201
|
out.push({
|
|
@@ -223190,11 +223216,11 @@ async function listSkillMetadataForActor(args) {
|
|
|
223190
223216
|
const dir = sanitizeSkillDir(b2.name, b2.id);
|
|
223191
223217
|
if (usedDirs.has(dir)) continue;
|
|
223192
223218
|
usedDirs.add(dir);
|
|
223193
|
-
const hasher = (0,
|
|
223219
|
+
const hasher = (0, import_node_crypto49.createHash)("sha256");
|
|
223194
223220
|
for (const p2 of paths) {
|
|
223195
223221
|
hasher.update(p2);
|
|
223196
223222
|
hasher.update("\0");
|
|
223197
|
-
hasher.update((0,
|
|
223223
|
+
hasher.update((0, import_node_crypto49.createHash)("sha256").update(b2.files[p2]).digest("hex"));
|
|
223198
223224
|
hasher.update("\0");
|
|
223199
223225
|
}
|
|
223200
223226
|
out.push({
|
|
@@ -223214,7 +223240,7 @@ function builtinSkillToFiles(b2) {
|
|
|
223214
223240
|
skillId: `builtin:${b2.id}`,
|
|
223215
223241
|
path: path41,
|
|
223216
223242
|
content: content3,
|
|
223217
|
-
blobHash: (0,
|
|
223243
|
+
blobHash: (0, import_node_crypto49.createHash)("sha256").update(content3).digest("hex"),
|
|
223218
223244
|
size: Buffer.byteLength(content3, "utf8"),
|
|
223219
223245
|
updatedAt: "1970-01-01T00:00:00.000Z"
|
|
223220
223246
|
}));
|
|
@@ -223238,7 +223264,7 @@ function sanitizeSkillDir(name, fallbackId) {
|
|
|
223238
223264
|
if (byName) return byName;
|
|
223239
223265
|
const byId = fallbackId ? fold2(fallbackId) : "";
|
|
223240
223266
|
if (byId) return byId;
|
|
223241
|
-
return `skill-${(0,
|
|
223267
|
+
return `skill-${(0, import_node_crypto49.createHash)("sha256").update(name).digest("hex").slice(0, 8)}`;
|
|
223242
223268
|
}
|
|
223243
223269
|
async function materializeSkillFiles(args) {
|
|
223244
223270
|
const skills = await args.service.listInstalledSkillsForActor(args.actorId);
|
|
@@ -223271,7 +223297,7 @@ function connectorSkillToFiles(c) {
|
|
|
223271
223297
|
skillId: c.id,
|
|
223272
223298
|
path: path41,
|
|
223273
223299
|
content: content3,
|
|
223274
|
-
blobHash: (0,
|
|
223300
|
+
blobHash: (0, import_node_crypto49.createHash)("sha256").update(content3).digest("hex"),
|
|
223275
223301
|
size: Buffer.byteLength(content3, "utf8"),
|
|
223276
223302
|
updatedAt: "1970-01-01T00:00:00.000Z"
|
|
223277
223303
|
}));
|
|
@@ -223288,11 +223314,11 @@ function connectorSkillDisplayRows(connectorSkills, enabledConnectors) {
|
|
|
223288
223314
|
...s2.version !== void 0 ? { version: s2.version } : {}
|
|
223289
223315
|
}));
|
|
223290
223316
|
}
|
|
223291
|
-
var
|
|
223317
|
+
var import_node_crypto49;
|
|
223292
223318
|
var init_skill_materializer = __esm({
|
|
223293
223319
|
"../server/src/domains/actors/skill-materializer.ts"() {
|
|
223294
223320
|
"use strict";
|
|
223295
|
-
|
|
223321
|
+
import_node_crypto49 = require("node:crypto");
|
|
223296
223322
|
}
|
|
223297
223323
|
});
|
|
223298
223324
|
|
|
@@ -224803,7 +224829,7 @@ function createActorsDomain(opts) {
|
|
|
224803
224829
|
...kernel !== void 0 ? { onRolesChanged: (a, r) => kernel.setActorRoles(a, r) } : {},
|
|
224804
224830
|
audit: async (entry) => {
|
|
224805
224831
|
await opts.audit?.({
|
|
224806
|
-
id: `reg_${(0,
|
|
224832
|
+
id: `reg_${(0, import_node_crypto50.randomUUID)()}`,
|
|
224807
224833
|
actor: entry.by,
|
|
224808
224834
|
kind: "registry_change",
|
|
224809
224835
|
target: entry.actorId,
|
|
@@ -224843,11 +224869,11 @@ function createActorsDomain(opts) {
|
|
|
224843
224869
|
register: actorsDomain({ resolveCtx, ...opts.resolveTrace ? { resolveTrace: opts.resolveTrace } : {}, ...opts.trace ? { trace: opts.trace } : {}, ...opts.listBuiltinSkills ? { listBuiltinSkills: opts.listBuiltinSkills } : {}, ...opts.getBuiltinSkills ? { getBuiltinSkills: opts.getBuiltinSkills } : {}, ...opts.getConnectorSkills ? { getConnectorSkills: opts.getConnectorSkills } : {}, ...opts.refreshConnectorSkills ? { refreshConnectorSkills: opts.refreshConnectorSkills } : {}, ...opts.memory ? { memory: opts.memory } : {}, ...opts.resolveDispatchScope ? { resolveDispatchScope: opts.resolveDispatchScope } : {}, ...opts.projectExists ? { projectExists: opts.projectExists } : {}, ...opts.isCompanyManager ? { isCompanyManager: opts.isCompanyManager } : {}, ...opts.credentialAudit ? { credentialAudit: opts.credentialAudit } : {}, ...opts.readCredentialAudit ? { readCredentialAudit: opts.readCredentialAudit } : {}, ...opts.credentialRevealLimits ? { credentialRevealLimits: opts.credentialRevealLimits } : {}, ...opts.skillMarket ? { skillMarket: opts.skillMarket } : {}, ...opts.resolveNodeTenancy ? { resolveNodeTenancy: opts.resolveNodeTenancy } : {} })
|
|
224844
224870
|
};
|
|
224845
224871
|
}
|
|
224846
|
-
var
|
|
224872
|
+
var import_node_crypto50;
|
|
224847
224873
|
var init_actors = __esm({
|
|
224848
224874
|
"../server/src/domains/actors/index.ts"() {
|
|
224849
224875
|
"use strict";
|
|
224850
|
-
|
|
224876
|
+
import_node_crypto50 = require("node:crypto");
|
|
224851
224877
|
init_service5();
|
|
224852
224878
|
init_routes3();
|
|
224853
224879
|
init_service5();
|
|
@@ -225222,7 +225248,7 @@ async function findMaterializedAttachmentCopies(messageItems, workdirItems, read
|
|
|
225222
225248
|
if (!result?.ok) continue;
|
|
225223
225249
|
const bytes2 = Buffer.from(result.contentBase64, "base64");
|
|
225224
225250
|
if (bytes2.length !== file.size) continue;
|
|
225225
|
-
const hash2 = (0,
|
|
225251
|
+
const hash2 = (0, import_node_crypto51.createHash)("sha256").update(bytes2).digest("hex");
|
|
225226
225252
|
if (candidates.some((attachment) => attachment.blob_ref === hash2)) copies.add(file.path);
|
|
225227
225253
|
} catch {
|
|
225228
225254
|
} finally {
|
|
@@ -225231,11 +225257,11 @@ async function findMaterializedAttachmentCopies(messageItems, workdirItems, read
|
|
|
225231
225257
|
}
|
|
225232
225258
|
return copies;
|
|
225233
225259
|
}
|
|
225234
|
-
var
|
|
225260
|
+
var import_node_crypto51, WORKDIR_WALK_MAX_DEPTH, WORKDIR_WALK_MAX_ENTRIES, WORKDIR_WALK_MAX_LIST_CALLS, WORKDIR_WALK_BUDGET_MS, WORKDIR_TREE_MAX_ENTRIES;
|
|
225235
225261
|
var init_files_view = __esm({
|
|
225236
225262
|
"../server/src/domains/chat-sessions/files-view.ts"() {
|
|
225237
225263
|
"use strict";
|
|
225238
|
-
|
|
225264
|
+
import_node_crypto51 = require("node:crypto");
|
|
225239
225265
|
init_chat_attachment_files();
|
|
225240
225266
|
init_src();
|
|
225241
225267
|
WORKDIR_WALK_MAX_DEPTH = 3;
|
|
@@ -228626,11 +228652,11 @@ function fromRow(row) {
|
|
|
228626
228652
|
for (const [k2, v2] of opt) if (v2 !== void 0 && v2 !== null) r[k2] = v2;
|
|
228627
228653
|
return r;
|
|
228628
228654
|
}
|
|
228629
|
-
var
|
|
228655
|
+
var import_node_crypto52, import_node_fs14, DEFAULT_PAGE, MAX_PAGE, pageSize, MemoryNotificationStore, ident3, iso2, str2, PostgresNotificationStore;
|
|
228630
228656
|
var init_notification_store = __esm({
|
|
228631
228657
|
"../server/src/domains/collab/notification-store.ts"() {
|
|
228632
228658
|
"use strict";
|
|
228633
|
-
|
|
228659
|
+
import_node_crypto52 = require("node:crypto");
|
|
228634
228660
|
import_node_fs14 = __toESM(require("node:fs"), 1);
|
|
228635
228661
|
DEFAULT_PAGE = 50;
|
|
228636
228662
|
MAX_PAGE = 200;
|
|
@@ -228663,7 +228689,7 @@ var init_notification_store = __esm({
|
|
|
228663
228689
|
async insert(n) {
|
|
228664
228690
|
const existing = this.findLive(n.recipient, n.sourceKey, n.category);
|
|
228665
228691
|
if (existing) return existing;
|
|
228666
|
-
const row = { ...n, id: `ntf:${(0,
|
|
228692
|
+
const row = { ...n, id: `ntf:${(0, import_node_crypto52.randomUUID)()}`, updatedAt: n.enteredAt };
|
|
228667
228693
|
this.rows.set(row.id, row);
|
|
228668
228694
|
this.save();
|
|
228669
228695
|
return row;
|
|
@@ -228786,7 +228812,7 @@ var init_notification_store = __esm({
|
|
|
228786
228812
|
return new _PostgresNotificationStore(sql, schema);
|
|
228787
228813
|
}
|
|
228788
228814
|
async insert(n) {
|
|
228789
|
-
const id = `ntf:${(0,
|
|
228815
|
+
const id = `ntf:${(0, import_node_crypto52.randomUUID)()}`;
|
|
228790
228816
|
const r = await this.sql.query(
|
|
228791
228817
|
`INSERT INTO ${this.t} (id, recipient, category, source_key, kind, workorder_id, node_id, card_id, actor_id,
|
|
228792
228818
|
title, workspace_title, entered_at, updated_at, status, read_at, item)
|
|
@@ -229737,13 +229763,13 @@ function nameKey(name) {
|
|
|
229737
229763
|
function cleanName(name) {
|
|
229738
229764
|
return name.trim().replace(/\s+/g, " ");
|
|
229739
229765
|
}
|
|
229740
|
-
var import_node_fs15, import_node_path20,
|
|
229766
|
+
var import_node_fs15, import_node_path20, import_node_crypto53, SEP, keyOf, prefixOf, MemoryWorkorderTagStore, FileWorkorderTagStore;
|
|
229741
229767
|
var init_tags = __esm({
|
|
229742
229768
|
"../server/src/domains/collab/tags.ts"() {
|
|
229743
229769
|
"use strict";
|
|
229744
229770
|
import_node_fs15 = __toESM(require("node:fs"), 1);
|
|
229745
229771
|
import_node_path20 = __toESM(require("node:path"), 1);
|
|
229746
|
-
|
|
229772
|
+
import_node_crypto53 = __toESM(require("node:crypto"), 1);
|
|
229747
229773
|
SEP = "::";
|
|
229748
229774
|
keyOf = (companyId, id) => `${companyId}${SEP}${id}`;
|
|
229749
229775
|
prefixOf = (companyId) => `${companyId}${SEP}`;
|
|
@@ -229761,7 +229787,7 @@ var init_tags = __esm({
|
|
|
229761
229787
|
if (!name) return null;
|
|
229762
229788
|
if (this.entries(companyId).some((t) => nameKey(t.name) === nameKey(name))) return null;
|
|
229763
229789
|
const tag = {
|
|
229764
|
-
id: `tag-${
|
|
229790
|
+
id: `tag-${import_node_crypto53.default.randomBytes(6).toString("hex")}`,
|
|
229765
229791
|
name,
|
|
229766
229792
|
...input.color?.trim() ? { color: input.color.trim() } : {},
|
|
229767
229793
|
...input.description?.trim() ? { description: input.description.trim() } : {}
|
|
@@ -231007,11 +231033,11 @@ async function isEmployedElsewhere(store, companyId, accountId) {
|
|
|
231007
231033
|
const memberships = await store.listMembershipsForAccount(accountId);
|
|
231008
231034
|
return memberships.some((m2) => m2.companyId !== companyId);
|
|
231009
231035
|
}
|
|
231010
|
-
var
|
|
231036
|
+
var import_node_crypto54, ROLES, INVITABLE_ROLES, INVITATION_TTL_MS, INVITE_LINK_TTL_MS, INVITE_LINK_TOKEN_BYTES, INVITE_LINK_ROLE, SLUG_RE, CompanyError, CompaniesService;
|
|
231011
231037
|
var init_service6 = __esm({
|
|
231012
231038
|
"../server/src/domains/companies/service.ts"() {
|
|
231013
231039
|
"use strict";
|
|
231014
|
-
|
|
231040
|
+
import_node_crypto54 = require("node:crypto");
|
|
231015
231041
|
init_console_url();
|
|
231016
231042
|
ROLES = ["owner", "admin", "member"];
|
|
231017
231043
|
INVITABLE_ROLES = ["admin", "member"];
|
|
@@ -231103,7 +231129,7 @@ var init_service6 = __esm({
|
|
|
231103
231129
|
const existing = await this.store.getAccountByEmail(normalized4);
|
|
231104
231130
|
if (existing) return existing;
|
|
231105
231131
|
const account = {
|
|
231106
|
-
id: `actor:human:${(0,
|
|
231132
|
+
id: `actor:human:${(0, import_node_crypto54.randomUUID)()}`,
|
|
231107
231133
|
email: normalized4,
|
|
231108
231134
|
name: name ?? normalized4,
|
|
231109
231135
|
status: "active"
|
|
@@ -231312,7 +231338,7 @@ var init_service6 = __esm({
|
|
|
231312
231338
|
}
|
|
231313
231339
|
const nowMs = Date.parse(this.now());
|
|
231314
231340
|
const invitation = {
|
|
231315
|
-
id: `invitation:${(0,
|
|
231341
|
+
id: `invitation:${(0, import_node_crypto54.randomUUID)()}`,
|
|
231316
231342
|
companyId,
|
|
231317
231343
|
email: mail,
|
|
231318
231344
|
role,
|
|
@@ -231443,7 +231469,7 @@ var init_service6 = __esm({
|
|
|
231443
231469
|
const nowMs = Date.parse(this.now());
|
|
231444
231470
|
const link = {
|
|
231445
231471
|
companyId,
|
|
231446
|
-
token: (0,
|
|
231472
|
+
token: (0, import_node_crypto54.randomBytes)(INVITE_LINK_TOKEN_BYTES).toString("base64url"),
|
|
231447
231473
|
role: INVITE_LINK_ROLE,
|
|
231448
231474
|
createdAt: new Date(nowMs).toISOString(),
|
|
231449
231475
|
expiresAt: new Date(nowMs + INVITE_LINK_TTL_MS).toISOString(),
|
|
@@ -231500,7 +231526,7 @@ var init_service6 = __esm({
|
|
|
231500
231526
|
const reusable = existing.find((inv) => !this.isExpired(inv));
|
|
231501
231527
|
if (reusable) return reusable;
|
|
231502
231528
|
const invitation = {
|
|
231503
|
-
id: `invitation:${(0,
|
|
231529
|
+
id: `invitation:${(0, import_node_crypto54.randomUUID)()}`,
|
|
231504
231530
|
companyId: link.companyId,
|
|
231505
231531
|
email: mail,
|
|
231506
231532
|
role: link.role,
|
|
@@ -231738,11 +231764,11 @@ var init_service6 = __esm({
|
|
|
231738
231764
|
});
|
|
231739
231765
|
|
|
231740
231766
|
// ../server/src/domains/companies/offboarding.ts
|
|
231741
|
-
var
|
|
231767
|
+
var import_node_crypto55, MemberOffboardingService;
|
|
231742
231768
|
var init_offboarding = __esm({
|
|
231743
231769
|
"../server/src/domains/companies/offboarding.ts"() {
|
|
231744
231770
|
"use strict";
|
|
231745
|
-
|
|
231771
|
+
import_node_crypto55 = require("node:crypto");
|
|
231746
231772
|
init_service6();
|
|
231747
231773
|
MemberOffboardingService = class {
|
|
231748
231774
|
store;
|
|
@@ -231814,7 +231840,7 @@ var init_offboarding = __esm({
|
|
|
231814
231840
|
const { ownedAgents, inFlight } = await this.snapshot(companyId, accountId);
|
|
231815
231841
|
const at = this.now();
|
|
231816
231842
|
const started = await this.store.startMemberOffboarding({
|
|
231817
|
-
operationId: `off:${(0,
|
|
231843
|
+
operationId: `off:${(0, import_node_crypto55.randomUUID)()}`,
|
|
231818
231844
|
companyId,
|
|
231819
231845
|
accountId,
|
|
231820
231846
|
initiatedBy,
|
|
@@ -232324,18 +232350,18 @@ var init_routes6 = __esm({
|
|
|
232324
232350
|
|
|
232325
232351
|
// ../server/src/domains/companies/agent-credentials.ts
|
|
232326
232352
|
function hashAgentToken(token, secret) {
|
|
232327
|
-
return HASH_PREFIX + (0,
|
|
232353
|
+
return HASH_PREFIX + (0, import_node_crypto56.createHmac)("sha256", secret).update(`agent-token:${token}`).digest("base64url");
|
|
232328
232354
|
}
|
|
232329
232355
|
function safeEqual(a, b2) {
|
|
232330
232356
|
const ba = Buffer.from(a);
|
|
232331
232357
|
const bb = Buffer.from(b2);
|
|
232332
|
-
return ba.length === bb.length && (0,
|
|
232358
|
+
return ba.length === bb.length && (0, import_node_crypto56.timingSafeEqual)(ba, bb);
|
|
232333
232359
|
}
|
|
232334
|
-
var
|
|
232360
|
+
var import_node_crypto56, HASH_PREFIX, TOKEN_PREFIX, AgentCredentialService;
|
|
232335
232361
|
var init_agent_credentials = __esm({
|
|
232336
232362
|
"../server/src/domains/companies/agent-credentials.ts"() {
|
|
232337
232363
|
"use strict";
|
|
232338
|
-
|
|
232364
|
+
import_node_crypto56 = require("node:crypto");
|
|
232339
232365
|
init_service6();
|
|
232340
232366
|
HASH_PREFIX = "ac1$";
|
|
232341
232367
|
TOKEN_PREFIX = "oak_";
|
|
@@ -232360,7 +232386,7 @@ var init_agent_credentials = __esm({
|
|
|
232360
232386
|
if (employee.status !== "active") {
|
|
232361
232387
|
throw new CompanyError(409, "AGENT_LEFT", `\u6570\u5B57\u5458\u5DE5\u5DF2\u79BB\u5F00\uFF0C\u4E0D\u80FD\u7B7E\u53D1\u51ED\u8BC1\uFF1A${agentId}`);
|
|
232362
232388
|
}
|
|
232363
|
-
const token = `${TOKEN_PREFIX}${(0,
|
|
232389
|
+
const token = `${TOKEN_PREFIX}${(0, import_node_crypto56.randomBytes)(32).toString("base64url")}`;
|
|
232364
232390
|
const credential = {
|
|
232365
232391
|
tokenHash: hashAgentToken(token, this.secret),
|
|
232366
232392
|
companyId,
|
|
@@ -232780,7 +232806,7 @@ function gatewayInstanceSlug(gatewayUrl) {
|
|
|
232780
232806
|
}
|
|
232781
232807
|
function connectInstanceName(gatewayUrl, token, companyId) {
|
|
232782
232808
|
const scope = companyId?.trim();
|
|
232783
|
-
const suffix = scope ? `c${(0,
|
|
232809
|
+
const suffix = scope ? `c${(0, import_node_crypto57.createHash)("sha256").update(`${gatewayUrl}\0${scope}`).digest("hex").slice(0, 10)}` : token.replace(/[^a-z0-9]/gi, "").slice(-8).toLowerCase() || "enroll";
|
|
232784
232810
|
const base = gatewayInstanceSlug(gatewayUrl);
|
|
232785
232811
|
return base.slice(0, Math.max(1, 64 - suffix.length - 1)) + "-" + suffix;
|
|
232786
232812
|
}
|
|
@@ -233109,12 +233135,12 @@ function buildNpxCmd(p2) {
|
|
|
233109
233135
|
const prefix = daemonNpmPrefix();
|
|
233110
233136
|
return `npm install -g --prefer-online --prefix ${prefix} ${DAEMON_NPM_PACKAGE}@latest && ${prefix}/bin/oasis daemon start --instance ${shellQuote(instanceName)} --server-ws ${shellQuote(p2.gatewayUrl)}${companyPart}${namePart} --pkg ${shellQuote(DAEMON_NPM_PACKAGE)} --upgrade --enroll-token ${shellQuote(p2.token)}`;
|
|
233111
233137
|
}
|
|
233112
|
-
var
|
|
233138
|
+
var import_node_crypto57;
|
|
233113
233139
|
var init_connect_script = __esm({
|
|
233114
233140
|
"../server/src/domains/nodes/connect-script.ts"() {
|
|
233115
233141
|
"use strict";
|
|
233116
233142
|
init_src();
|
|
233117
|
-
|
|
233143
|
+
import_node_crypto57 = require("node:crypto");
|
|
233118
233144
|
}
|
|
233119
233145
|
});
|
|
233120
233146
|
|
|
@@ -233675,7 +233701,7 @@ function nodesDomain(deps) {
|
|
|
233675
233701
|
}
|
|
233676
233702
|
deps.enrollTokens.setIssuedNodeId(enrollToken, nodeId);
|
|
233677
233703
|
} else {
|
|
233678
|
-
nodeId = `node-${(0,
|
|
233704
|
+
nodeId = `node-${(0, import_node_crypto58.randomUUID)().slice(0, 8)}`;
|
|
233679
233705
|
deps.enrollTokens.setIssuedNodeId(enrollToken, nodeId);
|
|
233680
233706
|
}
|
|
233681
233707
|
const existingNode = await deps.nodeStore.getNode(nodeId);
|
|
@@ -233858,13 +233884,13 @@ function normalizeGatewayUrl(raw) {
|
|
|
233858
233884
|
}
|
|
233859
233885
|
}
|
|
233860
233886
|
function newNodeId() {
|
|
233861
|
-
return "node-" + (0,
|
|
233887
|
+
return "node-" + (0, import_node_crypto58.randomUUID)().replace(/-/g, "").slice(0, 12);
|
|
233862
233888
|
}
|
|
233863
|
-
var
|
|
233889
|
+
var import_node_crypto58, import_node_fs16, import_node_url6, import_node_path21;
|
|
233864
233890
|
var init_routes7 = __esm({
|
|
233865
233891
|
"../server/src/domains/nodes/routes.ts"() {
|
|
233866
233892
|
"use strict";
|
|
233867
|
-
|
|
233893
|
+
import_node_crypto58 = require("node:crypto");
|
|
233868
233894
|
import_node_fs16 = require("node:fs");
|
|
233869
233895
|
import_node_url6 = require("node:url");
|
|
233870
233896
|
import_node_path21 = require("node:path");
|
|
@@ -235055,7 +235081,7 @@ function createBundle(root, target, input) {
|
|
|
235055
235081
|
}
|
|
235056
235082
|
}
|
|
235057
235083
|
const bytes2 = fs26.statSync(absBundle).size;
|
|
235058
|
-
const digest = (0,
|
|
235084
|
+
const digest = (0, import_node_crypto59.createHash)("sha256").update(fs26.readFileSync(absBundle)).digest("hex");
|
|
235059
235085
|
const relBase = `inputs/git-bundles/${safeRepo}-${commit.slice(0, 12)}`;
|
|
235060
235086
|
return {
|
|
235061
235087
|
absoluteBundlePath: absBundle,
|
|
@@ -235151,12 +235177,12 @@ function classifyGitError(fallback, err, where) {
|
|
|
235151
235177
|
function oneLine(msg) {
|
|
235152
235178
|
return msg.split("\n").map((s2) => s2.trim()).filter(Boolean).slice(0, 3).join(" ");
|
|
235153
235179
|
}
|
|
235154
|
-
var import_node_child_process17,
|
|
235180
|
+
var import_node_child_process17, import_node_crypto59, fs26, os7, path25, GitReadonlyBundleError, HEX40, FETCH_TIMEOUT_MS2;
|
|
235155
235181
|
var init_readonly_bundle = __esm({
|
|
235156
235182
|
"../server/src/git/readonly-bundle.ts"() {
|
|
235157
235183
|
"use strict";
|
|
235158
235184
|
import_node_child_process17 = require("node:child_process");
|
|
235159
|
-
|
|
235185
|
+
import_node_crypto59 = require("node:crypto");
|
|
235160
235186
|
fs26 = __toESM(require("node:fs"), 1);
|
|
235161
235187
|
os7 = __toESM(require("node:os"), 1);
|
|
235162
235188
|
path25 = __toESM(require("node:path"), 1);
|
|
@@ -235176,7 +235202,7 @@ var init_readonly_bundle = __esm({
|
|
|
235176
235202
|
|
|
235177
235203
|
// ../server/src/domains/collab/create-seeded-workorder.ts
|
|
235178
235204
|
function makeSeededWorkorderCreator(deps) {
|
|
235179
|
-
const genWorkspace = deps.genWorkspace ?? (() => `ws:wo-${(0,
|
|
235205
|
+
const genWorkspace = deps.genWorkspace ?? (() => `ws:wo-${(0, import_node_crypto60.randomUUID)().slice(0, 8)}`);
|
|
235180
235206
|
return async (input) => {
|
|
235181
235207
|
const company = input.companyId && deps.resolveCompany ? await deps.resolveCompany(input.companyId) : void 0;
|
|
235182
235208
|
const kernel = company?.kernel ?? deps.kernel;
|
|
@@ -235269,7 +235295,7 @@ function makeSeededWorkorderCreator(deps) {
|
|
|
235269
235295
|
};
|
|
235270
235296
|
}
|
|
235271
235297
|
function workspaceForKey(key) {
|
|
235272
|
-
return `ws:wo-${(0,
|
|
235298
|
+
return `ws:wo-${(0, import_node_crypto60.createHash)("sha256").update(key).digest("hex").slice(0, 8)}`;
|
|
235273
235299
|
}
|
|
235274
235300
|
function existingWorkorder(kernel, workspace) {
|
|
235275
235301
|
const arts = [...kernel.model.artifacts.values()].filter((a) => a.workspace === workspace);
|
|
@@ -235282,11 +235308,11 @@ function existingWorkorder(kernel, workspace) {
|
|
|
235282
235308
|
spawned: arts.map((a) => ({ id: a.id, type: a.type, owner: a.owner }))
|
|
235283
235309
|
};
|
|
235284
235310
|
}
|
|
235285
|
-
var
|
|
235311
|
+
var import_node_crypto60, enc2;
|
|
235286
235312
|
var init_create_seeded_workorder = __esm({
|
|
235287
235313
|
"../server/src/domains/collab/create-seeded-workorder.ts"() {
|
|
235288
235314
|
"use strict";
|
|
235289
|
-
|
|
235315
|
+
import_node_crypto60 = require("node:crypto");
|
|
235290
235316
|
init_uncategorized_project();
|
|
235291
235317
|
init_src();
|
|
235292
235318
|
init_planner();
|
|
@@ -236716,12 +236742,12 @@ function stateFromAttempt(attempt, handoff, checkpoint, now, stalledAfterMs, ope
|
|
|
236716
236742
|
if (attempt.status === "no-output") return handoff?.unresolvedIssues.length ? "blocked" : "no_change";
|
|
236717
236743
|
return "failed";
|
|
236718
236744
|
}
|
|
236719
|
-
var
|
|
236745
|
+
var import_node_crypto61, BLOCKING_STATES, HANDOFF_OUTCOMES2, RESUME_EXTERNAL_EFFECT_LIMIT, RESUME_SNAPSHOT_PREFIX, RESUME_SNAPSHOT_SUFFIX, ExecutionContinuityService;
|
|
236720
236746
|
var init_service8 = __esm({
|
|
236721
236747
|
"../server/src/domains/execution-continuity/service.ts"() {
|
|
236722
236748
|
"use strict";
|
|
236723
236749
|
init_src();
|
|
236724
|
-
|
|
236750
|
+
import_node_crypto61 = require("node:crypto");
|
|
236725
236751
|
init_src5();
|
|
236726
236752
|
BLOCKING_STATES = /* @__PURE__ */ new Set(["stalled", "failed", "blocked"]);
|
|
236727
236753
|
HANDOFF_OUTCOMES2 = /* @__PURE__ */ new Set(["succeeded", "no-output", "failed", "cancelled", "timeout", "orphaned"]);
|
|
@@ -236952,7 +236978,7 @@ var init_service8 = __esm({
|
|
|
236952
236978
|
if (typeof expectedHash !== "string" || !this.readBundleFile) return null;
|
|
236953
236979
|
const injectedResume = this.readBundleFile(attempt.id, "execution/RESUME.md");
|
|
236954
236980
|
if (!injectedResume) return null;
|
|
236955
|
-
const actualHash = (0,
|
|
236981
|
+
const actualHash = (0, import_node_crypto61.createHash)("sha256").update(injectedResume).digest("hex");
|
|
236956
236982
|
if (actualHash !== expectedHash) return null;
|
|
236957
236983
|
const recoverySnapshot = parseResumePackSnapshot(injectedResume);
|
|
236958
236984
|
if (!recoverySnapshot || recoverySnapshot.scenario !== "redispatch" || !recoverySnapshot.previousAttempt || recoverySnapshot.node.nodeId !== attempt.nodeId || recoverySnapshot.jobKey !== attempt.jobKey || recoverySnapshot.part !== attempt.part) return null;
|
|
@@ -237879,6 +237905,10 @@ var init_project_bundle = __esm({
|
|
|
237879
237905
|
});
|
|
237880
237906
|
|
|
237881
237907
|
// ../server/src/domains/chat-sessions/index.ts
|
|
237908
|
+
function sessionProjectIdToStore(projectId2) {
|
|
237909
|
+
if (typeof projectId2 !== "string" || projectId2.trim() === "") return null;
|
|
237910
|
+
return isUncategorizedProjectId(projectId2) ? null : projectId2;
|
|
237911
|
+
}
|
|
237882
237912
|
function parseDurationMs(raw) {
|
|
237883
237913
|
if (!raw) return null;
|
|
237884
237914
|
const m2 = /^(\d+)\s*(ms|s|m|h|d)?$/i.exec(raw.trim());
|
|
@@ -238052,7 +238082,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238052
238082
|
if (!text5.trim()) throw new ApiError(400, "BAD_REQUEST", "text required");
|
|
238053
238083
|
const now = Date.now();
|
|
238054
238084
|
sweepDrafts(now);
|
|
238055
|
-
const id = `cd_${(0,
|
|
238085
|
+
const id = `cd_${(0, import_node_crypto62.randomUUID)()}`;
|
|
238056
238086
|
drafts.set(id, { text: text5, actor: req.auth.actor, expiresAt: now + DRAFT_TTL_MS });
|
|
238057
238087
|
return { status: 201, body: { id, expiresInMs: DRAFT_TTL_MS } };
|
|
238058
238088
|
});
|
|
@@ -238104,7 +238134,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238104
238134
|
const runtimeId = await currentRuntimeId(body2.aiActorId) ?? "unknown";
|
|
238105
238135
|
const now = (/* @__PURE__ */ new Date()).toISOString();
|
|
238106
238136
|
const session = {
|
|
238107
|
-
id: (0,
|
|
238137
|
+
id: (0, import_node_crypto62.randomUUID)(),
|
|
238108
238138
|
humanActorId: req.auth.actor,
|
|
238109
238139
|
// 注:这里**刻意不写 companyId**。新会话要不要带公司归属,按 ws:wo-6d588f8e 的 ADR
|
|
238110
238140
|
// (每公司 schema、最终移除表内 company 列)统一定,不在本节点自行发明。
|
|
@@ -238117,7 +238147,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238117
238147
|
// 决策 0030 缝合:绑定是会话的语义属性(工单频道/问题会话给、脑暴省略)——发消息端据它带 workspace,
|
|
238118
238148
|
// 两个入口页面行为一致。区别于 linkWorkOrder(出处关联,建单脑暴也有、不构成绑定)。
|
|
238119
238149
|
workspace: body2.workspace ?? null,
|
|
238120
|
-
projectId: body2.projectId
|
|
238150
|
+
projectId: sessionProjectIdToStore(body2.projectId),
|
|
238121
238151
|
// 会话级模型覆盖(口径 A):建会话时就带上选择;空串/空白归 null = 沿用旧解析,不写员工全局配置。
|
|
238122
238152
|
model: normalizeModel(body2.model),
|
|
238123
238153
|
// ADR-0058:分析会话指向被分析 run;非空即"这是分析会话"(不进主聊天列表、进 trace 分析视图)。
|
|
@@ -238186,7 +238216,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238186
238216
|
...body2.runtimeId !== void 0 ? { runtimeId: body2.runtimeId } : {},
|
|
238187
238217
|
...Object.prototype.hasOwnProperty.call(body2, "runtimeSessionId") ? { runtimeSessionId: body2.runtimeSessionId } : {},
|
|
238188
238218
|
...body2.title !== void 0 ? { title: body2.title } : {},
|
|
238189
|
-
...Object.prototype.hasOwnProperty.call(body2, "projectId") ? { projectId: body2.projectId } : {},
|
|
238219
|
+
...Object.prototype.hasOwnProperty.call(body2, "projectId") ? { projectId: sessionProjectIdToStore(body2.projectId) } : {},
|
|
238190
238220
|
// 会话级模型覆盖:显式传 null / 空串 = 清除覆盖(回到旧解析);不传这一项 = 不动它。
|
|
238191
238221
|
...Object.prototype.hasOwnProperty.call(body2, "model") ? { model: normalizeModel(body2.model) } : {},
|
|
238192
238222
|
// 只有显式传了才写——改标题 / 换项目 / 换模型都不是「有新动静」,不该顶掉列表顺序与已读水位。
|
|
@@ -238210,7 +238240,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238210
238240
|
if (body2.role !== "user" && body2.role !== "assistant") throw new ApiError(400, "BAD_REQUEST", "role must be user or assistant");
|
|
238211
238241
|
const role = body2.role;
|
|
238212
238242
|
const msg = await store2.appendMessage({
|
|
238213
|
-
id: (0,
|
|
238243
|
+
id: (0, import_node_crypto62.randomUUID)(),
|
|
238214
238244
|
sessionId: req.params.id,
|
|
238215
238245
|
role,
|
|
238216
238246
|
content: role === "user" ? stripInjectedChatContext(body2.content) : body2.content,
|
|
@@ -238251,7 +238281,7 @@ function createChatSessionsDomain(opts) {
|
|
|
238251
238281
|
const known = key ? cur.find((x2) => x2.clientKey === key) : void 0;
|
|
238252
238282
|
if (!known && cur.length >= QUEUE_MAX) throw new ApiError(409, "QUEUE_FULL", `\u961F\u5217\u5DF2\u6EE1\uFF08\u4E0A\u9650 ${QUEUE_MAX} \u6761\uFF09`);
|
|
238253
238283
|
const item = await store.enqueuePendingMessage({
|
|
238254
|
-
id: (0,
|
|
238284
|
+
id: (0, import_node_crypto62.randomUUID)(),
|
|
238255
238285
|
chatSessionId: sid,
|
|
238256
238286
|
text: text5,
|
|
238257
238287
|
...attachments.length ? { attachments } : {},
|
|
@@ -238702,11 +238732,11 @@ function createChatSessionsDomain(opts) {
|
|
|
238702
238732
|
});
|
|
238703
238733
|
};
|
|
238704
238734
|
}
|
|
238705
|
-
var
|
|
238735
|
+
var import_node_crypto62, DEFAULT_SNAPSHOT_ITEMS, MAX_SNAPSHOT_ITEMS;
|
|
238706
238736
|
var init_chat_sessions2 = __esm({
|
|
238707
238737
|
"../server/src/domains/chat-sessions/index.ts"() {
|
|
238708
238738
|
"use strict";
|
|
238709
|
-
|
|
238739
|
+
import_node_crypto62 = require("node:crypto");
|
|
238710
238740
|
init_src();
|
|
238711
238741
|
init_chat_session();
|
|
238712
238742
|
init_files_view();
|
|
@@ -238723,6 +238753,7 @@ var init_chat_sessions2 = __esm({
|
|
|
238723
238753
|
init_company_data_store_router();
|
|
238724
238754
|
init_workorder_terminal();
|
|
238725
238755
|
init_session_workdir();
|
|
238756
|
+
init_uncategorized_project();
|
|
238726
238757
|
init_project_bundle();
|
|
238727
238758
|
DEFAULT_SNAPSHOT_ITEMS = 400;
|
|
238728
238759
|
MAX_SNAPSHOT_ITEMS = 1e3;
|
|
@@ -240110,7 +240141,7 @@ function busyError(chatSessionId, blockedBy) {
|
|
|
240110
240141
|
return `\u76EE\u6807\u4F1A\u8BDD ${chatSessionId} \u6B63\u6709\u4E00\u8F6E\u5728\u8DD1${blockedBy ? `\uFF08${blockedBy}\uFF09` : ""}\u2014\u2014\u672C\u6B21\u89E6\u53D1\u5DF2\u4E22\u5F03\uFF0C\u4E0D\u6392\u961F\u3001\u4E0D\u8865\u8DD1`;
|
|
240111
240142
|
}
|
|
240112
240143
|
function genWebhookToken() {
|
|
240113
|
-
return `owt_${(0,
|
|
240144
|
+
return `owt_${(0, import_node_crypto63.randomBytes)(32).toString("base64url")}`;
|
|
240114
240145
|
}
|
|
240115
240146
|
function validateTitleTemplate(tpl) {
|
|
240116
240147
|
const residue = tpl.replace(DATE_TOKEN, "");
|
|
@@ -240166,11 +240197,11 @@ function appendSourceNote(brief, automation, source, atIso) {
|
|
|
240166
240197
|
---
|
|
240167
240198
|
\u672C\u5DE5\u5355\u7531\u81EA\u52A8\u5316\u300C${automation.name}\u300D\u4E8E ${atIso} \u89E6\u53D1\uFF08\u6765\u6E90\uFF1A${source}\uFF09\u3002\u5F00\u5DE5\u540E\u8BF7\u628A\u5DE5\u5355\u6807\u9898\u6539\u6210\u51C6\u786E\u53CD\u6620\u5B9E\u9645\u5DE5\u4F5C\u7684\u63CF\u8FF0\u3002`;
|
|
240168
240199
|
}
|
|
240169
|
-
var
|
|
240200
|
+
var import_node_crypto63, DATE_TOKEN, AutomationsService, EVENT_RETRY_BASE_MS, EVENT_RETRY_MAX_MS, EVENT_RETRY_MAX_ATTEMPTS, eventAttempts, eventLastAttemptAt, eventLastError, CHAT_REPLY_MAX;
|
|
240170
240201
|
var init_service9 = __esm({
|
|
240171
240202
|
"../server/src/domains/automations/service.ts"() {
|
|
240172
240203
|
"use strict";
|
|
240173
|
-
|
|
240204
|
+
import_node_crypto63 = require("node:crypto");
|
|
240174
240205
|
init_src();
|
|
240175
240206
|
init_registry3();
|
|
240176
240207
|
init_attribution();
|
|
@@ -240984,11 +241015,11 @@ function verifySignature(rawBody, headers, secret) {
|
|
|
240984
241015
|
if (!secret) return "not_required";
|
|
240985
241016
|
const given = header1(headers, "x-hub-signature-256");
|
|
240986
241017
|
if (!given) return "missing";
|
|
240987
|
-
const expected = `sha256=${(0,
|
|
241018
|
+
const expected = `sha256=${(0, import_node_crypto64.createHmac)("sha256", secret).update(rawBody).digest("hex")}`;
|
|
240988
241019
|
const a = Buffer.from(given);
|
|
240989
241020
|
const b2 = Buffer.from(expected);
|
|
240990
241021
|
if (a.length !== b2.length) return "invalid";
|
|
240991
|
-
return (0,
|
|
241022
|
+
return (0, import_node_crypto64.timingSafeEqual)(a, b2) ? "valid" : "invalid";
|
|
240992
241023
|
}
|
|
240993
241024
|
function eventAllowed(filters, envelope) {
|
|
240994
241025
|
if (!filters || filters.length === 0) return true;
|
|
@@ -241018,11 +241049,11 @@ function splitEvent(envelope) {
|
|
|
241018
241049
|
}
|
|
241019
241050
|
return { eventName, actionCandidates: candidates };
|
|
241020
241051
|
}
|
|
241021
|
-
var
|
|
241052
|
+
var import_node_crypto64, MAX_BODY_BYTES, AutomationWebhookService, header1, PROVIDER_PREFIXES;
|
|
241022
241053
|
var init_webhook = __esm({
|
|
241023
241054
|
"../server/src/domains/automations/webhook.ts"() {
|
|
241024
241055
|
"use strict";
|
|
241025
|
-
|
|
241056
|
+
import_node_crypto64 = require("node:crypto");
|
|
241026
241057
|
MAX_BODY_BYTES = 256 * 1024;
|
|
241027
241058
|
AutomationWebhookService = class {
|
|
241028
241059
|
store;
|
|
@@ -242178,7 +242209,7 @@ function playbooksDomain(opts) {
|
|
|
242178
242209
|
opts.overrides.set(companyOf(req), ref2, nodeKey, nextOverride);
|
|
242179
242210
|
try {
|
|
242180
242211
|
await opts.audit?.({
|
|
242181
|
-
id: `reg_${(0,
|
|
242212
|
+
id: `reg_${(0, import_node_crypto65.randomUUID)()}`,
|
|
242182
242213
|
actor: req.auth.actor,
|
|
242183
242214
|
kind: "registry_change",
|
|
242184
242215
|
target: `playbook:${ref2}#${nodeKey}`,
|
|
@@ -242195,11 +242226,11 @@ function playbooksDomain(opts) {
|
|
|
242195
242226
|
});
|
|
242196
242227
|
};
|
|
242197
242228
|
}
|
|
242198
|
-
var
|
|
242229
|
+
var import_node_crypto65;
|
|
242199
242230
|
var init_routes12 = __esm({
|
|
242200
242231
|
"../server/src/domains/playbooks/routes.ts"() {
|
|
242201
242232
|
"use strict";
|
|
242202
|
-
|
|
242233
|
+
import_node_crypto65 = require("node:crypto");
|
|
242203
242234
|
init_router();
|
|
242204
242235
|
init_registry3();
|
|
242205
242236
|
init_planner();
|
|
@@ -242313,17 +242344,17 @@ function completionFingerprint(workspace, members) {
|
|
|
242313
242344
|
workspace,
|
|
242314
242345
|
members: [...members].sort((a, b2) => a.artifactId < b2.artifactId ? -1 : a.artifactId > b2.artifactId ? 1 : 0).map((m2) => ({ artifactId: m2.artifactId, currentRevisionId: m2.currentRevisionId ?? null }))
|
|
242315
242346
|
});
|
|
242316
|
-
return (0,
|
|
242347
|
+
return (0, import_node_crypto66.createHash)("sha256").update(canonical).digest("hex");
|
|
242317
242348
|
}
|
|
242318
242349
|
function eventConsumptionKey(args) {
|
|
242319
242350
|
const raw = `project-event:${EVENT_KEY_VERSION}:${args.triggerId}:${args.event}:${args.workspace}:${args.fingerprint}`;
|
|
242320
|
-
return raw.length <= 200 ? raw : `project-event:${EVENT_KEY_VERSION}:sha256:${(0,
|
|
242351
|
+
return raw.length <= 200 ? raw : `project-event:${EVENT_KEY_VERSION}:sha256:${(0, import_node_crypto66.createHash)("sha256").update(raw).digest("hex")}`;
|
|
242321
242352
|
}
|
|
242322
|
-
var
|
|
242353
|
+
var import_node_crypto66, EVENT_KEY_VERSION, EMPTY_METRICS, AUTOMATION_EVENT_HANDLERS, ProjectEventPoller;
|
|
242323
242354
|
var init_project_event_poller = __esm({
|
|
242324
242355
|
"../server/src/automations/project-event-poller.ts"() {
|
|
242325
242356
|
"use strict";
|
|
242326
|
-
|
|
242357
|
+
import_node_crypto66 = require("node:crypto");
|
|
242327
242358
|
EVENT_KEY_VERSION = "v1";
|
|
242328
242359
|
EMPTY_METRICS = () => ({
|
|
242329
242360
|
scanDurationMs: 0,
|
|
@@ -242534,7 +242565,7 @@ function remoteAppendInput(hub, nodeId, dispatchId, entry, input, timeoutMs) {
|
|
|
242534
242565
|
if (input.requireConsumptionReceipt && !hub.supportsInputConsumptionReceipts?.(dispatchId)) {
|
|
242535
242566
|
return Promise.resolve({ accepted: false, reason: "consumption-unsupported" });
|
|
242536
242567
|
}
|
|
242537
|
-
const requestId = (0,
|
|
242568
|
+
const requestId = (0, import_node_crypto67.randomUUID)();
|
|
242538
242569
|
const sent = routeToSession(hub, nodeId, dispatchId, { type: "append_input", dispatchId, input, requestId });
|
|
242539
242570
|
if (!sent) return Promise.resolve({ accepted: false, reason: "session-closing", ...unknownIfInterrupting });
|
|
242540
242571
|
return new Promise((resolve10) => {
|
|
@@ -242547,11 +242578,11 @@ function remoteAppendInput(hub, nodeId, dispatchId, entry, input, timeoutMs) {
|
|
|
242547
242578
|
entry.appendWaiters.push({ requestId, requireConsumptionReceipt: input.requireConsumptionReceipt, resolve: resolve10, timer });
|
|
242548
242579
|
});
|
|
242549
242580
|
}
|
|
242550
|
-
var
|
|
242581
|
+
var import_node_crypto67, STASH_TTL_MS, STASH_MAX_FRAMES_PER_ID, STASH_MAX_IDS, DaemonHubAdapter, BindingRouterAdapter, WorkdirBridge;
|
|
242551
242582
|
var init_daemon_adapter = __esm({
|
|
242552
242583
|
"../server/src/daemon-adapter.ts"() {
|
|
242553
242584
|
"use strict";
|
|
242554
|
-
|
|
242585
|
+
import_node_crypto67 = require("node:crypto");
|
|
242555
242586
|
init_src();
|
|
242556
242587
|
STASH_TTL_MS = 5 * 6e4;
|
|
242557
242588
|
STASH_MAX_FRAMES_PER_ID = 500;
|
|
@@ -242901,7 +242932,7 @@ var init_daemon_adapter = __esm({
|
|
|
242901
242932
|
async spawn(job) {
|
|
242902
242933
|
const nodeId = job.binding?.nodeId;
|
|
242903
242934
|
if (!nodeId) throw new Error("DaemonHubAdapter \u9700\u8981 job.binding.nodeId\uFF08\u8DEF\u7531\u9519\u8BEF\uFF09");
|
|
242904
|
-
const dispatchId = job.dispatchId ?? `dispatch:${(0,
|
|
242935
|
+
const dispatchId = job.dispatchId ?? `dispatch:${(0, import_node_crypto67.randomUUID)()}`;
|
|
242905
242936
|
if (job.dispatchId && this.pending.has(dispatchId)) {
|
|
242906
242937
|
return this.recover(dispatchId, nodeId, job.binding?.runtimeKind, job.actor);
|
|
242907
242938
|
}
|
|
@@ -243138,7 +243169,7 @@ var init_daemon_adapter = __esm({
|
|
|
243138
243169
|
return daemon?.meta.supportsWorkdirWalk === true;
|
|
243139
243170
|
}
|
|
243140
243171
|
request(nodeId, buildFrame) {
|
|
243141
|
-
const requestId = (0,
|
|
243172
|
+
const requestId = (0, import_node_crypto67.randomUUID)();
|
|
243142
243173
|
const sent = this.hub.dispatch(nodeId, buildFrame(requestId));
|
|
243143
243174
|
if (!sent) return Promise.resolve({ ok: false, code: "NODE_OFFLINE" });
|
|
243144
243175
|
return new Promise((resolve10) => {
|
|
@@ -243246,13 +243277,13 @@ function classifyPage(page, lastPushedHash, serviceAccount) {
|
|
|
243246
243277
|
if (sha(body2) === lastPushedHash) return { kind: "echo" };
|
|
243247
243278
|
return { kind: "human-edit", content: body2, updatedBy: page.updatedBy };
|
|
243248
243279
|
}
|
|
243249
|
-
var
|
|
243280
|
+
var import_node_crypto68, sha, enc3, dec, MirrorEngine, MapMirrorIdentities;
|
|
243250
243281
|
var init_engine = __esm({
|
|
243251
243282
|
"../server/src/mirror/engine.ts"() {
|
|
243252
243283
|
"use strict";
|
|
243253
|
-
|
|
243284
|
+
import_node_crypto68 = require("node:crypto");
|
|
243254
243285
|
init_src();
|
|
243255
|
-
sha = (s2) => (0,
|
|
243286
|
+
sha = (s2) => (0, import_node_crypto68.createHash)("sha256").update(s2, "utf8").digest("hex");
|
|
243256
243287
|
enc3 = (s2) => new TextEncoder().encode(s2);
|
|
243257
243288
|
dec = (b2) => new TextDecoder().decode(b2);
|
|
243258
243289
|
MirrorEngine = class {
|
|
@@ -243499,11 +243530,11 @@ function humanExitCause(exit3) {
|
|
|
243499
243530
|
const base = (exit3.reason ? label[exit3.reason] : void 0) ?? `\u4F1A\u8BDD\u5F02\u5E38\u7ED3\u675F\uFF08${exit3.reason ?? "\u65E0\u9000\u51FA\u4FE1\u606F"}\uFF09`;
|
|
243500
243531
|
return exit3.errorMessage ? `${base}\uFF1A${exit3.errorMessage.slice(0, 200)}` : base;
|
|
243501
243532
|
}
|
|
243502
|
-
var
|
|
243533
|
+
var import_node_crypto69, AUTONOMOUS_ETHOS, CONVERSATIONAL_ETHOS, SHARED_GRAPH_BODY, AUTONOMOUS_RECOVERY_TOOLS, HIGH_RISK_COMMANDS, COORDINATOR_SYSTEM_PROMPT, CONVERSATIONAL_RECOVERY_TOOLS, CONVERSATIONAL_ESCALATION_TOOLS, CONVERSATIONAL_MANAGER_BODY, MACHINE_EXIT_CODES, CoordinatorWorker;
|
|
243503
243534
|
var init_worker = __esm({
|
|
243504
243535
|
"../server/src/coordinator/worker.ts"() {
|
|
243505
243536
|
"use strict";
|
|
243506
|
-
|
|
243537
|
+
import_node_crypto69 = require("node:crypto");
|
|
243507
243538
|
init_src5();
|
|
243508
243539
|
init_identity();
|
|
243509
243540
|
AUTONOMOUS_ETHOS = `\u4F60\u662F\u8FD9\u4E2A\u5DE5\u5355\u7684**\u7BA1\u7406\u8005**\u2014\u2014\u804C\u8D23\u662F\u8BA9\u5B83\u987A\u7545\u8DD1\u5B8C\u3002\u7CFB\u7EDF\u5728\u67D0\u4E2A\u8282\u70B9\u5361\u4F4F\u3001\u673A\u68B0\u5206\u8BCA\u786E\u8BA4"\u9700\u8981\u4F60"\u65F6\u5524\u8D77\u4F60\uFF08\u65E0\u4EBA\u5728\u573A\uFF0C\u4F60\u8FD9\u4E00\u8F6E\u628A\u80FD\u505A\u7684\u505A\u6389\uFF09\u3002\u4F60\u7684\u624B\u6BB5\u5F88\u5BBD\uFF1A
|
|
@@ -243772,7 +243803,7 @@ ${HIGH_RISK_COMMANDS}`;
|
|
|
243772
243803
|
return this.deps.kernel.model.lastSeq.get(artifactId) ?? 0;
|
|
243773
243804
|
}
|
|
243774
243805
|
evaluationKey(kind, artifactId, evidence) {
|
|
243775
|
-
const fingerprint2 = (0,
|
|
243806
|
+
const fingerprint2 = (0, import_node_crypto69.createHash)("sha256").update(JSON.stringify(evidence)).digest("hex");
|
|
243776
243807
|
return `${kind}:${artifactId}:${fingerprint2}`;
|
|
243777
243808
|
}
|
|
243778
243809
|
artifactEvidence(id) {
|
|
@@ -244151,8 +244182,8 @@ ${ctx.nodeFault}
|
|
|
244151
244182
|
this.deps.log?.(`[coordinator] ${workspace} \u5168\u5C40\u4E0A\u4E0B\u6587\u8BFB\u53D6\u5931\u8D25\uFF0C\u7EE7\u7EED\u6CBF\u7528\u539F\u534F\u8C03\u8005\u4EFB\u52A1\uFF1A${String(error2)}`);
|
|
244152
244183
|
}
|
|
244153
244184
|
}
|
|
244154
|
-
const runtimeSessionId = opts?.resumeSessionId ?? (0,
|
|
244155
|
-
const coordinatorRunId = `coordinate:${(0,
|
|
244185
|
+
const runtimeSessionId = opts?.resumeSessionId ?? (0, import_node_crypto69.randomUUID)();
|
|
244186
|
+
const coordinatorRunId = `coordinate:${(0, import_node_crypto69.randomUUID)()}`;
|
|
244156
244187
|
const taskWithContext = coordinatorContext ? [
|
|
244157
244188
|
task,
|
|
244158
244189
|
``,
|
|
@@ -244196,7 +244227,7 @@ ${ctx.nodeFault}
|
|
|
244196
244227
|
const startedAtMs = Date.now();
|
|
244197
244228
|
let trajectoryStarted = false;
|
|
244198
244229
|
if (this.deps.trajectory) {
|
|
244199
|
-
const bundleManifest = Object.fromEntries(Object.entries(job.bundle.files).map(([name, content3]) => [name, (0,
|
|
244230
|
+
const bundleManifest = Object.fromEntries(Object.entries(job.bundle.files).map(([name, content3]) => [name, (0, import_node_crypto69.createHash)("sha256").update(content3).digest("hex")]));
|
|
244200
244231
|
const session = {
|
|
244201
244232
|
runId: coordinatorRunId,
|
|
244202
244233
|
runtimeSessionId,
|
|
@@ -244401,11 +244432,11 @@ var init_pg_ident = __esm({
|
|
|
244401
244432
|
});
|
|
244402
244433
|
|
|
244403
244434
|
// ../storage/src/postgres.ts
|
|
244404
|
-
var
|
|
244435
|
+
var import_node_crypto70, ident4, isUniqueViolation, PostgresOplogStore, PostgresBlobStore;
|
|
244405
244436
|
var init_postgres = __esm({
|
|
244406
244437
|
"../storage/src/postgres.ts"() {
|
|
244407
244438
|
"use strict";
|
|
244408
|
-
|
|
244439
|
+
import_node_crypto70 = require("node:crypto");
|
|
244409
244440
|
init_pg_ident();
|
|
244410
244441
|
init_esm();
|
|
244411
244442
|
init_src();
|
|
@@ -244585,7 +244616,7 @@ var init_postgres = __esm({
|
|
|
244585
244616
|
return new _PostgresBlobStore(pool, schema);
|
|
244586
244617
|
}
|
|
244587
244618
|
async put(bytes2) {
|
|
244588
|
-
const hash2 = (0,
|
|
244619
|
+
const hash2 = (0, import_node_crypto70.createHash)("sha256").update(bytes2).digest("hex");
|
|
244589
244620
|
await this.pool.query(
|
|
244590
244621
|
`INSERT INTO ${this.t} (hash, bytes, size, content_type) VALUES ($1, $2, $3, $4) ON CONFLICT (hash) DO NOTHING`,
|
|
244591
244622
|
[hash2, Buffer.from(bytes2), bytes2.byteLength, sniffContentType(bytes2) ?? null]
|
|
@@ -253212,11 +253243,11 @@ var init_postgres_delegations = __esm({
|
|
|
253212
253243
|
});
|
|
253213
253244
|
|
|
253214
253245
|
// ../storage/src/postgres-nodes.ts
|
|
253215
|
-
var
|
|
253246
|
+
var import_node_crypto71, ident13, PostgresNodeStore, PostgresNodeTokenStore, rowToNode, rowToRuntime;
|
|
253216
253247
|
var init_postgres_nodes = __esm({
|
|
253217
253248
|
"../storage/src/postgres-nodes.ts"() {
|
|
253218
253249
|
"use strict";
|
|
253219
|
-
|
|
253250
|
+
import_node_crypto71 = require("node:crypto");
|
|
253220
253251
|
init_pg_ident();
|
|
253221
253252
|
init_esm();
|
|
253222
253253
|
ident13 = (s2) => {
|
|
@@ -253433,7 +253464,7 @@ var init_postgres_nodes = __esm({
|
|
|
253433
253464
|
return store;
|
|
253434
253465
|
}
|
|
253435
253466
|
issue(nodeId) {
|
|
253436
|
-
const token = `ont_${(0,
|
|
253467
|
+
const token = `ont_${(0, import_node_crypto71.randomBytes)(24).toString("base64url")}`;
|
|
253437
253468
|
this.cache.set(token, nodeId);
|
|
253438
253469
|
void this.pool.query(`INSERT INTO ${this.s}.node_tokens (token,node_id) VALUES ($1,$2)`, [token, nodeId]);
|
|
253439
253470
|
return token;
|
|
@@ -253699,11 +253730,11 @@ var init_postgres_type_registry = __esm({
|
|
|
253699
253730
|
});
|
|
253700
253731
|
|
|
253701
253732
|
// ../storage/src/postgres-actor-memory.ts
|
|
253702
|
-
var
|
|
253733
|
+
var import_node_crypto72, matchClause, ident15, PostgresActorMemoryStore, rowToIndexEntry, rowToRecord;
|
|
253703
253734
|
var init_postgres_actor_memory = __esm({
|
|
253704
253735
|
"../storage/src/postgres-actor-memory.ts"() {
|
|
253705
253736
|
"use strict";
|
|
253706
|
-
|
|
253737
|
+
import_node_crypto72 = require("node:crypto");
|
|
253707
253738
|
init_pg_ident();
|
|
253708
253739
|
init_src();
|
|
253709
253740
|
matchClause = (q2) => q2.requireMatch && q2.keywords.length > 0 ? " WHERE m > 0" : "";
|
|
@@ -253913,7 +253944,7 @@ var init_postgres_actor_memory = __esm({
|
|
|
253913
253944
|
}
|
|
253914
253945
|
async write(input, now) {
|
|
253915
253946
|
if (input.memId === void 0) {
|
|
253916
|
-
const memId = `mem:${(0,
|
|
253947
|
+
const memId = `mem:${(0, import_node_crypto72.randomUUID)()}`;
|
|
253917
253948
|
const r2 = await this.pool.query(
|
|
253918
253949
|
`INSERT INTO ${this.s}.actor_memories
|
|
253919
253950
|
(mem_id, actor_id, project_id, keywords, content, version, created_at, updated_at, accessed_at, source_artifact_id, source_session_id)
|
|
@@ -255360,14 +255391,14 @@ function companySchemaName(companyId) {
|
|
|
255360
255391
|
if (typeof companyId !== "string" || !companyId.trim()) {
|
|
255361
255392
|
throw new Error("company schema mapping \u9700\u8981\u975E\u7A7A companyId\uFF08fail-closed\uFF1A\u4E0D\u56DE\u9000\u9ED8\u8BA4\u516C\u53F8\uFF09");
|
|
255362
255393
|
}
|
|
255363
|
-
const hex = (0,
|
|
255394
|
+
const hex = (0, import_node_crypto73.createHash)("sha256").update(companyId, "utf8").digest("hex");
|
|
255364
255395
|
return `${COMPANY_SCHEMA_PREFIX}${hex.slice(0, DIGEST_HEX_LEN)}`;
|
|
255365
255396
|
}
|
|
255366
|
-
var
|
|
255397
|
+
var import_node_crypto73, COMPANY_SCHEMA_PREFIX, DIGEST_HEX_LEN, SchemaMappingConflictError, TenantStorageLocationStore;
|
|
255367
255398
|
var init_tenant_schema_mapping = __esm({
|
|
255368
255399
|
"../storage/src/tenant-schema-mapping.ts"() {
|
|
255369
255400
|
"use strict";
|
|
255370
|
-
|
|
255401
|
+
import_node_crypto73 = require("node:crypto");
|
|
255371
255402
|
init_esm();
|
|
255372
255403
|
init_pg_ident();
|
|
255373
255404
|
COMPANY_SCHEMA_PREFIX = "c_";
|
|
@@ -255441,7 +255472,7 @@ var init_tenant_schema_mapping = __esm({
|
|
|
255441
255472
|
|
|
255442
255473
|
// ../storage/src/company-data-plane-schema.ts
|
|
255443
255474
|
function canonicalTypeDefHash(def) {
|
|
255444
|
-
return `sha256:${(0,
|
|
255475
|
+
return `sha256:${(0, import_node_crypto74.createHash)("sha256").update(JSON.stringify(def), "utf8").digest("hex")}`;
|
|
255445
255476
|
}
|
|
255446
255477
|
function defaultArtifactTypeTemplate() {
|
|
255447
255478
|
return [
|
|
@@ -255623,11 +255654,11 @@ async function seedDefaultArtifactTypes(pool, schema, templates = defaultArtifac
|
|
|
255623
255654
|
}
|
|
255624
255655
|
return { inserted };
|
|
255625
255656
|
}
|
|
255626
|
-
var
|
|
255657
|
+
var import_node_crypto74, DEFAULT_ARTIFACT_TYPE_TEMPLATE_VERSION;
|
|
255627
255658
|
var init_company_data_plane_schema = __esm({
|
|
255628
255659
|
"../storage/src/company-data-plane-schema.ts"() {
|
|
255629
255660
|
"use strict";
|
|
255630
|
-
|
|
255661
|
+
import_node_crypto74 = require("node:crypto");
|
|
255631
255662
|
init_esm();
|
|
255632
255663
|
init_pg_ident();
|
|
255633
255664
|
DEFAULT_ARTIFACT_TYPE_TEMPLATE_VERSION = "4c368e5c-types-v1";
|
|
@@ -255707,11 +255738,11 @@ function rowToFile2(row) {
|
|
|
255707
255738
|
updatedAt: new Date(row.updated_at).toISOString()
|
|
255708
255739
|
};
|
|
255709
255740
|
}
|
|
255710
|
-
var
|
|
255741
|
+
var import_node_crypto75, COMPANY_CONFLICT_MSG, CompanyIdentifierConflictError, CompanyOwnedRegistryStore;
|
|
255711
255742
|
var init_company_owned_registry_store = __esm({
|
|
255712
255743
|
"../storage/src/company-owned-registry-store.ts"() {
|
|
255713
255744
|
"use strict";
|
|
255714
|
-
|
|
255745
|
+
import_node_crypto75 = require("node:crypto");
|
|
255715
255746
|
init_esm();
|
|
255716
255747
|
init_src();
|
|
255717
255748
|
init_pg_ident();
|
|
@@ -256097,7 +256128,7 @@ var init_company_owned_registry_store = __esm({
|
|
|
256097
256128
|
enabled: skill.enabled,
|
|
256098
256129
|
files: files.map((f2) => ({ path: f2.path, blobHash: f2.blobHash }))
|
|
256099
256130
|
});
|
|
256100
|
-
return (0,
|
|
256131
|
+
return (0, import_node_crypto75.createHash)("sha256").update(body2).digest("hex");
|
|
256101
256132
|
}
|
|
256102
256133
|
};
|
|
256103
256134
|
}
|
|
@@ -258694,7 +258725,7 @@ function sourceSetConservation(input) {
|
|
|
258694
258725
|
return input.sourceFinal === input.copied + input.approvedRuntimeConversion + input.approvedArchive + input.approvedDiscard;
|
|
258695
258726
|
}
|
|
258696
258727
|
function payloadChecksum(value2) {
|
|
258697
|
-
return (0,
|
|
258728
|
+
return (0, import_node_crypto76.createHash)("sha256").update(JSON.stringify(value2)).digest("hex");
|
|
258698
258729
|
}
|
|
258699
258730
|
async function copyWorkorderDraftsIdempotent(pool, companyId, companySchema, manifestId, opts) {
|
|
258700
258731
|
const cs = quoteIdent2(companySchema);
|
|
@@ -259082,11 +259113,11 @@ async function copyTraceFamilyIdempotent(pool, companyId, companySchema, manifes
|
|
|
259082
259113
|
sequences
|
|
259083
259114
|
};
|
|
259084
259115
|
}
|
|
259085
|
-
var
|
|
259116
|
+
var import_node_crypto76, MissingInstallerActorsError, TypeCatalogNotCoveredError, ORG_REGISTRY_TABLES, TRACE_FAMILY;
|
|
259086
259117
|
var init_tenant_migration_operator = __esm({
|
|
259087
259118
|
"../storage/src/tenant-migration-operator.ts"() {
|
|
259088
259119
|
"use strict";
|
|
259089
|
-
|
|
259120
|
+
import_node_crypto76 = require("node:crypto");
|
|
259090
259121
|
init_esm();
|
|
259091
259122
|
init_pg_ident();
|
|
259092
259123
|
init_tenancy_attribution();
|
|
@@ -259318,8 +259349,8 @@ var init_tenant_new_company_provision = __esm({
|
|
|
259318
259349
|
// ../storage/src/knowledge-snapshot-crypto.ts
|
|
259319
259350
|
function sealSnapshot(snapshot, key) {
|
|
259320
259351
|
if (snapshot.content.startsWith(PREFIX3)) return structuredClone(snapshot);
|
|
259321
|
-
const iv = (0,
|
|
259322
|
-
const cipher = (0,
|
|
259352
|
+
const iv = (0, import_node_crypto77.randomBytes)(12);
|
|
259353
|
+
const cipher = (0, import_node_crypto77.createCipheriv)("aes-256-gcm", bytes(key), iv);
|
|
259323
259354
|
cipher.setAAD(aad2(snapshot));
|
|
259324
259355
|
const encrypted = Buffer.concat([cipher.update(snapshot.content, "utf8"), cipher.final()]);
|
|
259325
259356
|
return { ...structuredClone(snapshot), content: `${PREFIX3}${iv.toString("base64url")}.${cipher.getAuthTag().toString("base64url")}.${encrypted.toString("base64url")}` };
|
|
@@ -259329,7 +259360,7 @@ function openSnapshot(snapshot, key) {
|
|
|
259329
259360
|
const packed = snapshot.content.slice(PREFIX3.length).split(".");
|
|
259330
259361
|
if (packed.length !== 3 || packed.some((part) => !part)) throw new Error(`knowledge snapshot ${snapshot.ref} ciphertext is malformed`);
|
|
259331
259362
|
const [iv, tag, data] = packed;
|
|
259332
|
-
const decipher = (0,
|
|
259363
|
+
const decipher = (0, import_node_crypto77.createDecipheriv)("aes-256-gcm", bytes(key), Buffer.from(iv, "base64url"));
|
|
259333
259364
|
decipher.setAAD(aad2(snapshot));
|
|
259334
259365
|
decipher.setAuthTag(Buffer.from(tag, "base64url"));
|
|
259335
259366
|
return {
|
|
@@ -259337,11 +259368,11 @@ function openSnapshot(snapshot, key) {
|
|
|
259337
259368
|
content: Buffer.concat([decipher.update(Buffer.from(data, "base64url")), decipher.final()]).toString("utf8")
|
|
259338
259369
|
};
|
|
259339
259370
|
}
|
|
259340
|
-
var
|
|
259371
|
+
var import_node_crypto77, PREFIX3, bytes, aad2;
|
|
259341
259372
|
var init_knowledge_snapshot_crypto = __esm({
|
|
259342
259373
|
"../storage/src/knowledge-snapshot-crypto.ts"() {
|
|
259343
259374
|
"use strict";
|
|
259344
|
-
|
|
259375
|
+
import_node_crypto77 = require("node:crypto");
|
|
259345
259376
|
PREFIX3 = "oasis-knowledge:v1:";
|
|
259346
259377
|
bytes = (key) => {
|
|
259347
259378
|
const value2 = Buffer.from(key);
|
|
@@ -261588,20 +261619,20 @@ var fs45 = __toESM(require("node:fs"));
|
|
|
261588
261619
|
var os14 = __toESM(require("node:os"));
|
|
261589
261620
|
var path40 = __toESM(require("node:path"));
|
|
261590
261621
|
var import_node_child_process23 = require("node:child_process");
|
|
261591
|
-
var
|
|
261622
|
+
var import_node_crypto84 = require("node:crypto");
|
|
261592
261623
|
|
|
261593
261624
|
// ../cli/src/cli.ts
|
|
261594
261625
|
var fs40 = __toESM(require("node:fs"), 1);
|
|
261595
261626
|
var os12 = __toESM(require("node:os"), 1);
|
|
261596
261627
|
var path35 = __toESM(require("node:path"), 1);
|
|
261597
|
-
var
|
|
261628
|
+
var import_node_crypto82 = require("node:crypto");
|
|
261598
261629
|
|
|
261599
261630
|
// ../cli/src/serve.ts
|
|
261600
261631
|
var fs34 = __toESM(require("node:fs"), 1);
|
|
261601
261632
|
var os8 = __toESM(require("node:os"), 1);
|
|
261602
261633
|
var path29 = __toESM(require("node:path"), 1);
|
|
261603
261634
|
var import_node_child_process18 = require("node:child_process");
|
|
261604
|
-
var
|
|
261635
|
+
var import_node_crypto78 = require("node:crypto");
|
|
261605
261636
|
var import_node_url7 = require("node:url");
|
|
261606
261637
|
|
|
261607
261638
|
// ../cli/src/artifact-discovery-source.ts
|
|
@@ -262347,7 +262378,7 @@ init_src9();
|
|
|
262347
262378
|
init_src();
|
|
262348
262379
|
init_trajectory();
|
|
262349
262380
|
function deterministicUuid2(seed) {
|
|
262350
|
-
const h = (0,
|
|
262381
|
+
const h = (0, import_node_crypto78.createHash)("sha256").update(seed).digest();
|
|
262351
262382
|
const b2 = Buffer.from(h.subarray(0, 16));
|
|
262352
262383
|
b2[6] = b2[6] & 15 | 80;
|
|
262353
262384
|
b2[8] = b2[8] & 63 | 128;
|
|
@@ -262547,7 +262578,7 @@ function oasisWrapperScript() {
|
|
|
262547
262578
|
const repoRoot = (0, import_node_url7.fileURLToPath)(new URL("../../../", __esm_import_meta_url));
|
|
262548
262579
|
const tsx = path29.join(repoRoot, "node_modules/.bin/tsx");
|
|
262549
262580
|
const main = path29.join(repoRoot, "packages/cli/src/main.ts");
|
|
262550
|
-
const key = (0,
|
|
262581
|
+
const key = (0, import_node_crypto78.createHash)("sha256").update(repoRoot).digest("hex").slice(0, 12);
|
|
262551
262582
|
const uid = typeof process.getuid === "function" ? process.getuid() : "na";
|
|
262552
262583
|
const stable = path29.join(os8.tmpdir(), `oasis-cli-wrapper-${uid}-${key}`);
|
|
262553
262584
|
let dir;
|
|
@@ -262928,7 +262959,7 @@ async function startServe(opts) {
|
|
|
262928
262959
|
if (!hub) return Promise.resolve({ ok: false, reason: "\u672C\u8FDB\u7A0B\u6CA1\u6709\u8282\u70B9\u7F51\u5173" });
|
|
262929
262960
|
const online = hub.connectedDaemons().some((d) => d.daemonId === nodeId);
|
|
262930
262961
|
if (!online) return Promise.resolve({ ok: false, reason: "\u8282\u70B9\u5F53\u524D\u4E0D\u5728\u7EBF\uFF0C\u7528\u7684\u662F\u5B83\u4E0A\u6B21\u62A5\u7684\u6E05\u5355" });
|
|
262931
|
-
const requestId = (0,
|
|
262962
|
+
const requestId = (0, import_node_crypto78.randomUUID)();
|
|
262932
262963
|
const task = new Promise((resolve10) => {
|
|
262933
262964
|
const timer = setTimeout(() => {
|
|
262934
262965
|
modelRefreshWaiters.delete(requestId);
|
|
@@ -263680,7 +263711,7 @@ async function startServe(opts) {
|
|
|
263680
263711
|
const finishedAt = (/* @__PURE__ */ new Date()).toISOString();
|
|
263681
263712
|
if (buf || session.runId) {
|
|
263682
263713
|
await turnStore.appendMessage({
|
|
263683
|
-
id: (0,
|
|
263714
|
+
id: (0, import_node_crypto78.randomUUID)(),
|
|
263684
263715
|
sessionId: chatSessionId,
|
|
263685
263716
|
role: "assistant",
|
|
263686
263717
|
content: buf,
|
|
@@ -263726,7 +263757,7 @@ async function startServe(opts) {
|
|
|
263726
263757
|
chatTargets: {
|
|
263727
263758
|
inspect: inspectChatTarget,
|
|
263728
263759
|
createTargetSession: async ({ companyId, agentId, ownerHumanActorId, title }) => {
|
|
263729
|
-
const sessionId = (0,
|
|
263760
|
+
const sessionId = (0, import_node_crypto78.randomUUID)();
|
|
263730
263761
|
const nowIso = (/* @__PURE__ */ new Date()).toISOString();
|
|
263731
263762
|
const binding = await registryStore.getBinding(agentId).catch(() => null);
|
|
263732
263763
|
await (await chatStoreFor(companyId)).createSession({
|
|
@@ -264771,7 +264802,7 @@ async function startServe(opts) {
|
|
|
264771
264802
|
}));
|
|
264772
264803
|
}
|
|
264773
264804
|
const limits = { wallClockMs: wallClockForKind("planner") };
|
|
264774
|
-
const artifactId = `artifact:planner:${(0,
|
|
264805
|
+
const artifactId = `artifact:planner:${(0, import_node_crypto78.randomUUID)()}`;
|
|
264775
264806
|
const handle = await chatRemoteAdapter.spawn({
|
|
264776
264807
|
actor: planner.id,
|
|
264777
264808
|
// companyId 同协调者:planner 用的就是默认公司的 actors 服务,漏签会让它一调公司域端点就 404。
|
|
@@ -265673,10 +265704,10 @@ async function startServe(opts) {
|
|
|
265673
265704
|
if (isDeletedActor(dispatchTarget)) {
|
|
265674
265705
|
throw new ApiError(409, ACTOR_DELETED_ERROR_CODE, ACTOR_DELETED_CHAT_MESSAGE);
|
|
265675
265706
|
}
|
|
265676
|
-
const runtimeSessionId = sessionId ?? (requestDispatchId ? deterministicUuid2(`chat-runtime:${requestDispatchId}`) : (0,
|
|
265707
|
+
const runtimeSessionId = sessionId ?? (requestDispatchId ? deterministicUuid2(`chat-runtime:${requestDispatchId}`) : (0, import_node_crypto78.randomUUID)());
|
|
265677
265708
|
const resumeRuntimeSession = Boolean(sessionId);
|
|
265678
|
-
const traceRunId = requestDispatchId ? `chat-run:${deterministicUuid2(`chat-trace:${requestDispatchId}`)}` : `chat-run:${(0,
|
|
265679
|
-
const artifactId = requestDispatchId ? `artifact:chat:${deterministicUuid2(`chat-artifact:${requestDispatchId}`)}` : `artifact:chat:${(0,
|
|
265709
|
+
const traceRunId = requestDispatchId ? `chat-run:${deterministicUuid2(`chat-trace:${requestDispatchId}`)}` : `chat-run:${(0, import_node_crypto78.randomUUID)()}`;
|
|
265710
|
+
const artifactId = requestDispatchId ? `artifact:chat:${deterministicUuid2(`chat-artifact:${requestDispatchId}`)}` : `artifact:chat:${(0, import_node_crypto78.randomUUID)()}`;
|
|
265680
265711
|
let stableDispatch = requestDispatchId ? await resolveStableChatDispatch({ store: await traceStoreFor(runCompanyId), runId: traceRunId }) : null;
|
|
265681
265712
|
if (stableDispatch && !stableDispatch.shouldDispatch) {
|
|
265682
265713
|
return {
|
|
@@ -266803,7 +266834,7 @@ async function startServe(opts) {
|
|
|
266803
266834
|
console.log(`[new-engine] dispatchWork ${workId} \u662F human work\u2014\u2014\u4E0D\u6D3E runtime\uFF0C\u7B49\u5F85\u4EBA\u5DE5\u5904\u7406`);
|
|
266804
266835
|
return;
|
|
266805
266836
|
}
|
|
266806
|
-
const ledgerId = `dispatch:${(0,
|
|
266837
|
+
const ledgerId = `dispatch:${(0, import_node_crypto78.randomUUID)()}`;
|
|
266807
266838
|
try {
|
|
266808
266839
|
await (await dispatchLedgerFor(companyId)).insertOpen({
|
|
266809
266840
|
id: ledgerId,
|
|
@@ -266888,7 +266919,7 @@ async function startServe(opts) {
|
|
|
266888
266919
|
const kernelModel = newKernel.model;
|
|
266889
266920
|
const art = kernelModel.artifacts.get(nodeId);
|
|
266890
266921
|
const revWid = art?.workspace ?? "";
|
|
266891
|
-
const ledgerId = `dispatch:${(0,
|
|
266922
|
+
const ledgerId = `dispatch:${(0, import_node_crypto78.randomUUID)()}`;
|
|
266892
266923
|
try {
|
|
266893
266924
|
await (await dispatchLedgerFor(companyId)).insertOpen({
|
|
266894
266925
|
id: ledgerId,
|
|
@@ -267266,7 +267297,7 @@ async function startServe(opts) {
|
|
|
267266
267297
|
resolveSupplementalContext: server.knowledgeGovernance ? async ({ actorId, artifactId, workOrderId, action, part, runtimeKind, taskMarkdown }) => {
|
|
267267
267298
|
try {
|
|
267268
267299
|
const governance = server.knowledgeGovernance;
|
|
267269
|
-
const taskFingerprint = (0,
|
|
267300
|
+
const taskFingerprint = (0, import_node_crypto78.createHash)("sha256").update(JSON.stringify({ artifactId, workOrderId, action, part: part ?? null, taskMarkdown })).digest("hex");
|
|
267270
267301
|
const requestContext = {
|
|
267271
267302
|
organizationId: companyId,
|
|
267272
267303
|
actorId,
|
|
@@ -269214,7 +269245,7 @@ var SessionProcessState = class {
|
|
|
269214
269245
|
// ../cli/src/daemon/ws-client.ts
|
|
269215
269246
|
init_wrapper();
|
|
269216
269247
|
var import_node_os9 = require("node:os");
|
|
269217
|
-
var
|
|
269248
|
+
var import_node_crypto79 = require("node:crypto");
|
|
269218
269249
|
init_src8();
|
|
269219
269250
|
init_src6();
|
|
269220
269251
|
|
|
@@ -269986,7 +270017,7 @@ var DaemonWsClient = class {
|
|
|
269986
270017
|
*/
|
|
269987
270018
|
async queryArtifactStates(artifactIds, timeoutMs = 15e3) {
|
|
269988
270019
|
if (artifactIds.length === 0) return {};
|
|
269989
|
-
const requestId = (0,
|
|
270020
|
+
const requestId = (0, import_node_crypto79.randomUUID)();
|
|
269990
270021
|
return new Promise((resolve10, reject) => {
|
|
269991
270022
|
const timer = setTimeout(() => {
|
|
269992
270023
|
this.gcPending.delete(requestId);
|
|
@@ -270388,7 +270419,7 @@ function forwardSignal(child, sig, killGroup = (pgid, signal) => {
|
|
|
270388
270419
|
// ../cli/src/daemon/machine-id.ts
|
|
270389
270420
|
var import_node_child_process21 = require("node:child_process");
|
|
270390
270421
|
var import_node_fs22 = require("node:fs");
|
|
270391
|
-
var
|
|
270422
|
+
var import_node_crypto80 = require("node:crypto");
|
|
270392
270423
|
var import_node_os12 = require("node:os");
|
|
270393
270424
|
function linuxMachineId() {
|
|
270394
270425
|
for (const p2 of ["/etc/machine-id", "/var/lib/dbus/machine-id"]) {
|
|
@@ -270454,7 +270485,7 @@ var defaultSources = {
|
|
|
270454
270485
|
function resolveNodeId(sources = {}) {
|
|
270455
270486
|
const s2 = { ...defaultSources, ...sources };
|
|
270456
270487
|
const material = `${s2.machineFingerprint()}:${s2.osUser()}`;
|
|
270457
|
-
const digest = (0,
|
|
270488
|
+
const digest = (0, import_node_crypto80.createHash)("sha256").update(material).digest("hex").slice(0, 12);
|
|
270458
270489
|
return `node-${digest}`;
|
|
270459
270490
|
}
|
|
270460
270491
|
|
|
@@ -271465,7 +271496,7 @@ var COMMAND_DECLS = {
|
|
|
271465
271496
|
flags: [
|
|
271466
271497
|
{ name: "name", desc: "\u9879\u76EE\u540D", required: true },
|
|
271467
271498
|
{ name: "goal", desc: "\u9879\u76EE\u76EE\u6807" },
|
|
271468
|
-
{ name: "slug", desc: "
|
|
271499
|
+
{ name: "slug", desc: "\u81EA\u5B9A\u4E49\u9879\u76EE id\uFF08\u53EF\u9009\uFF09\u3002\u4E0D\u7ED9\u5219\u968F\u673A\u751F\u6210 proj_xxxxxxxx\uFF1B\u7ED9\u4E86\u4E14\u8BE5 id \u5DF2\u5B58\u5728\uFF0C\u8FD4\u56DE\u7684\u662F\u5DF2\u6709\u9879\u76EE\uFF08\u4F1A\u63D0\u793A\uFF09" },
|
|
271469
271500
|
{ name: "members", desc: "\u6210\u5458 JSON \u6570\u7EC4" }
|
|
271470
271501
|
],
|
|
271471
271502
|
examples: ['oasis project create --name "My Project" --goal "\u6784\u5EFA\u534F\u4F5C\u5E73\u53F0"']
|
|
@@ -272225,13 +272256,13 @@ function ownFlagsFromDecl(command) {
|
|
|
272225
272256
|
}
|
|
272226
272257
|
|
|
272227
272258
|
// ../cli/src/connector-effect-runner.ts
|
|
272228
|
-
var
|
|
272259
|
+
var import_node_crypto81 = require("node:crypto");
|
|
272229
272260
|
var import_node_child_process22 = require("node:child_process");
|
|
272230
272261
|
init_src8();
|
|
272231
272262
|
function stableKey(effect) {
|
|
272232
272263
|
const keyFields = Object.fromEntries(Object.entries(effect.keyFields).sort(([a], [b2]) => a.localeCompare(b2)));
|
|
272233
272264
|
const canonical = JSON.stringify({ kind: effect.kind, target: effect.target, keyFields });
|
|
272234
|
-
return `sha256:${(0,
|
|
272265
|
+
return `sha256:${(0, import_node_crypto81.createHash)("sha256").update(canonical).digest("hex")}`;
|
|
272235
272266
|
}
|
|
272236
272267
|
async function runConnectorEffect(connector, toolArgs, deps) {
|
|
272237
272268
|
const effect = connector.describeExternalEffect?.(toolArgs) ?? null;
|
|
@@ -272467,7 +272498,7 @@ async function waitForCommandAuthorization(base, headers, draftId, fallback) {
|
|
|
272467
272498
|
const timeoutMs = resolveAuthWaitMs();
|
|
272468
272499
|
const controller = new AbortController();
|
|
272469
272500
|
const timer = setTimeout(() => controller.abort(), timeoutMs);
|
|
272470
|
-
const waiterId = (0,
|
|
272501
|
+
const waiterId = (0, import_node_crypto82.randomUUID)();
|
|
272471
272502
|
process.stderr.write(
|
|
272472
272503
|
`\u7B49\u5F85\u4EBA\u5DE5\u6388\u6743\u4E2D\u2026\u2026\u6700\u591A ${Math.round(timeoutMs / 1e3)} \u79D2\uFF0C\u8D85\u65F6\u4F1A\u81EA\u52A8\u8F6C\u4E3A\u5F85\u5BA1\uFF1B\u8FD9\u4E0D\u662F\u9519\u8BEF\uFF0C\u8BF7\u52FF\u91CD\u8BD5\u540C\u4E00\u6761\u547D\u4EE4\u3002
|
|
272473
272504
|
`
|
|
@@ -272890,7 +272921,7 @@ async function runCli(argv, println = console.log, progressln = console.error) {
|
|
|
272890
272921
|
const store = createNodeTokenStore(path35.join(dir, "node-tokens.json"));
|
|
272891
272922
|
const sub = positional[0];
|
|
272892
272923
|
if (sub === "issue") {
|
|
272893
|
-
const id = flags.get("id") ?? `node-${(0,
|
|
272924
|
+
const id = flags.get("id") ?? `node-${(0, import_node_crypto82.randomUUID)()}`;
|
|
272894
272925
|
const token2 = store.issue(id);
|
|
272895
272926
|
println(token2);
|
|
272896
272927
|
process.stderr.write(
|
|
@@ -273914,7 +273945,8 @@ ${t.ref} ${t.name} [\u5267\u672C=${t.playbookRef}]`);
|
|
|
273914
273945
|
const name = need(flags, "name").trim();
|
|
273915
273946
|
if (!name) throw new Error("\u9879\u76EE\u540D\u79F0\u4E0D\u80FD\u4E3A\u7A7A");
|
|
273916
273947
|
const goal = flags.get("goal")?.trim();
|
|
273917
|
-
const
|
|
273948
|
+
const slug6 = flags.get("slug");
|
|
273949
|
+
const id = slug6 !== void 0 ? projectSlug(slug6) : projectIdFromUuid((0, import_node_crypto82.randomUUID)());
|
|
273918
273950
|
const result = await api.request("POST", "/api/projects", {
|
|
273919
273951
|
...id ? { id } : {},
|
|
273920
273952
|
name,
|
|
@@ -273922,6 +273954,9 @@ ${t.ref} ${t.name} [\u5267\u672C=${t.playbookRef}]`);
|
|
|
273922
273954
|
...flags.has("members") ? { member_ids: parseStringArrayFlag(flags.get("members"), "members") } : {}
|
|
273923
273955
|
});
|
|
273924
273956
|
println(JSON.stringify(result, null, 2));
|
|
273957
|
+
if (typeof result?.name === "string" && result.name !== name) {
|
|
273958
|
+
println(`\u26A0\uFE0F \u9879\u76EE id\u300C${result.project_id ?? id}\u300D\u5DF2\u88AB\u300C${result.name}\u300D\u5360\u7528\uFF0C\u4E0A\u9762\u8FD4\u56DE\u7684\u662F\u90A3\u4E2A\u5DF2\u6709\u9879\u76EE\uFF0C\u6CA1\u6709\u65B0\u5EFA\u3002\u6362\u4E00\u4E2A --slug \u6216\u53BB\u6389 --slug \u91CD\u8BD5\u3002`);
|
|
273959
|
+
}
|
|
273925
273960
|
break;
|
|
273926
273961
|
}
|
|
273927
273962
|
if (positional[0] === "member") {
|
|
@@ -275903,13 +275938,13 @@ var LEGACY_SYSTEMD_UNIT = "oasis-node.service";
|
|
|
275903
275938
|
var LEGACY_LAUNCHD_LABEL = "com.oasis.node";
|
|
275904
275939
|
|
|
275905
275940
|
// src/install.ts
|
|
275906
|
-
var
|
|
275941
|
+
var import_node_crypto83 = require("node:crypto");
|
|
275907
275942
|
var fs44 = __toESM(require("node:fs"));
|
|
275908
275943
|
var path39 = __toESM(require("node:path"));
|
|
275909
275944
|
function versionLabel(sourceFile, pkgVersion, npmPrefixDir, pkgName = LEGACY_PKG_NAME) {
|
|
275910
275945
|
const tag = pkgName === LEGACY_PKG_NAME ? "" : `+pkg.${pkgName.replace(/[^A-Za-z0-9-]/g, "-")}`;
|
|
275911
275946
|
if (isFromNpmPrefix(sourceFile, npmPrefixDir)) return `${pkgVersion}${tag}`;
|
|
275912
|
-
const digest = (0,
|
|
275947
|
+
const digest = (0, import_node_crypto83.createHash)("sha256").update(fs44.readFileSync(sourceFile)).digest("hex").slice(0, 8);
|
|
275913
275948
|
return tag ? `${pkgVersion}${tag}.local.${digest}` : `${pkgVersion}+local.${digest}`;
|
|
275914
275949
|
}
|
|
275915
275950
|
function isFromNpmPrefix(sourceFile, npmPrefixDir) {
|
|
@@ -276032,7 +276067,7 @@ function shimScript() {
|
|
|
276032
276067
|
}
|
|
276033
276068
|
|
|
276034
276069
|
// src/index.ts
|
|
276035
|
-
var PKG_VERSION = true ? "2.2.
|
|
276070
|
+
var PKG_VERSION = true ? "2.2.35" : "dev";
|
|
276036
276071
|
var LOCAL_BIN = localBin();
|
|
276037
276072
|
var NPM_PREFIX = npmPrefix();
|
|
276038
276073
|
var INSTANCE = DEFAULT_INSTANCE;
|
|
@@ -276317,7 +276352,7 @@ function newInstanceName() {
|
|
|
276317
276352
|
const existing = new Set(listInstances());
|
|
276318
276353
|
if (!existing.has(DEFAULT_INSTANCE)) return DEFAULT_INSTANCE;
|
|
276319
276354
|
for (; ; ) {
|
|
276320
|
-
const n = `inst-${(0,
|
|
276355
|
+
const n = `inst-${(0, import_node_crypto84.randomBytes)(3).toString("hex")}`;
|
|
276321
276356
|
if (!existing.has(n)) return n;
|
|
276322
276357
|
}
|
|
276323
276358
|
}
|