replicas-engine 0.1.740 → 0.1.742
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/src/asp-host-X2J4FDK2.js +15 -0
- package/dist/src/{chunk-ZZRN6VSK.js → chunk-6X53Z7IV.js} +36 -111
- package/dist/src/chunk-AKQ6IVUU.js +73 -0
- package/dist/src/chunk-K5IXJ5WS.js +419 -0
- package/dist/src/{chunk-3Z7CQNGC.js → chunk-OGIXPGJ6.js} +4 -66
- package/dist/src/{chunk-7SUFESKA.js → chunk-PNTBK7LZ.js} +1 -1
- package/dist/src/{chunk-YPAI4W4G.js → chunk-RYGOTMEM.js} +32 -17
- package/dist/src/chunk-Z6P6S5HL.js +95 -0
- package/dist/src/command-protection-hook.js +3 -2
- package/dist/src/deepseek-command-protection-plugin.js +4 -3
- package/dist/src/headless-agent.js +6 -4
- package/dist/src/index.js +84 -451
- package/dist/src/post-tool-pr-hook.js +2 -2
- package/package.json +1 -1
|
@@ -7,15 +7,12 @@ import {
|
|
|
7
7
|
agentCredentialSnapshotSchema,
|
|
8
8
|
createErrorResult,
|
|
9
9
|
createSuccessResult,
|
|
10
|
-
extractCommandProtectionCommandText,
|
|
11
10
|
fallbackPlanResponseSchema,
|
|
12
|
-
findGitCommitSignals,
|
|
13
|
-
findPrMergeSignals,
|
|
14
11
|
isRecord,
|
|
15
12
|
isValidAgentProvider,
|
|
16
13
|
parsePosixEnvFile,
|
|
17
14
|
readReplicasRuntimeEnv
|
|
18
|
-
} from "./chunk-
|
|
15
|
+
} from "./chunk-RYGOTMEM.js";
|
|
19
16
|
|
|
20
17
|
// src/engine-env.ts
|
|
21
18
|
import { readFileSync as readFileSync2 } from "fs";
|
|
@@ -129,6 +126,8 @@ function loadEngineEnv() {
|
|
|
129
126
|
REPLICAS_SLACK_THREAD_TS: readReplicasRuntimeEnv(readEnv, REPLICAS_RUNTIME_ENV_ALIASES.slackThreadTs),
|
|
130
127
|
ANTHROPIC_API_KEY: readEnv("ANTHROPIC_API_KEY"),
|
|
131
128
|
OPENAI_API_KEY: readEnv("OPENAI_API_KEY"),
|
|
129
|
+
CODEX_OPENAI_BASE_URL: readEnv("CODEX_OPENAI_BASE_URL"),
|
|
130
|
+
CODEX_OPENAI_AUTHORIZATION_HEADER: readEnv("CODEX_OPENAI_AUTHORIZATION_HEADER"),
|
|
132
131
|
CURSOR_API_KEY: readEnv("CURSOR_API_KEY"),
|
|
133
132
|
AI_GATEWAY_API_KEY: readEnv("AI_GATEWAY_API_KEY"),
|
|
134
133
|
CLAUDE_CODE_USE_BEDROCK: readEnv("CLAUDE_CODE_USE_BEDROCK"),
|
|
@@ -232,71 +231,10 @@ var MonolithService = class {
|
|
|
232
231
|
};
|
|
233
232
|
var monolithService = new MonolithService();
|
|
234
233
|
|
|
235
|
-
// src/services/command-protection-service.ts
|
|
236
|
-
var DEFAULT_COMMAND_PROTECTION_BLOCK_MESSAGE = "Blocked by Replicas command protection.";
|
|
237
|
-
function asCommandProtectionResponse(value) {
|
|
238
|
-
if (typeof value !== "object" || value === null) return null;
|
|
239
|
-
const candidate = value;
|
|
240
|
-
return typeof candidate.allowed === "boolean" && typeof candidate.enabled === "boolean" ? candidate : null;
|
|
241
|
-
}
|
|
242
|
-
function failClosed(reason, matchedSignals) {
|
|
243
|
-
return {
|
|
244
|
-
allowed: false,
|
|
245
|
-
enabled: true,
|
|
246
|
-
reason,
|
|
247
|
-
matchedSignals
|
|
248
|
-
};
|
|
249
|
-
}
|
|
250
|
-
async function evaluateCommandProtection(request, signal) {
|
|
251
|
-
const matchedSignals = [...findGitCommitSignals(request), ...findPrMergeSignals(request)];
|
|
252
|
-
if (matchedSignals.length === 0) {
|
|
253
|
-
return { allowed: true, enabled: true };
|
|
254
|
-
}
|
|
255
|
-
let response;
|
|
256
|
-
try {
|
|
257
|
-
response = await monolithRequest("/v1/engine/command-protection/evaluate", {
|
|
258
|
-
body: request,
|
|
259
|
-
signal
|
|
260
|
-
});
|
|
261
|
-
} catch (error) {
|
|
262
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
263
|
-
return failClosed(`Command protection failed closed: ${detail}`, matchedSignals);
|
|
264
|
-
}
|
|
265
|
-
if (!response.ok) {
|
|
266
|
-
const detail = await response.text().catch(() => "");
|
|
267
|
-
return failClosed(`Command protection failed closed: ${response.status} ${detail}`, matchedSignals);
|
|
268
|
-
}
|
|
269
|
-
let payload;
|
|
270
|
-
try {
|
|
271
|
-
payload = await response.json();
|
|
272
|
-
} catch (error) {
|
|
273
|
-
const detail = error instanceof Error ? error.message : String(error);
|
|
274
|
-
return failClosed(`Command protection failed closed: ${detail}`, matchedSignals);
|
|
275
|
-
}
|
|
276
|
-
return asCommandProtectionResponse(payload) ?? failClosed("Command protection failed closed: invalid response from policy service", matchedSignals);
|
|
277
|
-
}
|
|
278
|
-
function extractToolCommand(input) {
|
|
279
|
-
return extractCommandProtectionCommandText({ toolInput: input }, { stringifyFallback: false });
|
|
280
|
-
}
|
|
281
|
-
function reportCommandProtectionBlock(options) {
|
|
282
|
-
const message = options.result.reason || DEFAULT_COMMAND_PROTECTION_BLOCK_MESSAGE;
|
|
283
|
-
console.warn(`[${options.managerName}] blocked ${options.action} by command protection: ${message}`);
|
|
284
|
-
options.recordHistoryEvent(options.eventType, {
|
|
285
|
-
type: "error",
|
|
286
|
-
message,
|
|
287
|
-
...options.context,
|
|
288
|
-
command: options.command
|
|
289
|
-
}, options.historyFile);
|
|
290
|
-
return message;
|
|
291
|
-
}
|
|
292
|
-
|
|
293
234
|
export {
|
|
294
235
|
IS_WARMING_MODE,
|
|
295
236
|
ENGINE_ENV,
|
|
296
237
|
setAgentCredentialSnapshot,
|
|
297
238
|
monolithRequest,
|
|
298
|
-
monolithService
|
|
299
|
-
evaluateCommandProtection,
|
|
300
|
-
extractToolCommand,
|
|
301
|
-
reportCommandProtectionBlock
|
|
239
|
+
monolithService
|
|
302
240
|
};
|
|
@@ -289,6 +289,9 @@ function getAgentModelOptions(provider, overrides) {
|
|
|
289
289
|
var CLAUDE_MODEL_MIN_SANDBOX_IMAGE = {
|
|
290
290
|
[CLAUDE_FABLE_5_1_MODEL]: "replicas-sandbox-2026-09-01-v6"
|
|
291
291
|
};
|
|
292
|
+
var CODEX_MODEL_MIN_SANDBOX_IMAGE = {
|
|
293
|
+
[GPT_6_ASTRA_MODEL]: "replicas-sandbox-2026-09-04-v7"
|
|
294
|
+
};
|
|
292
295
|
var MODEL_LABELS = {
|
|
293
296
|
fable: "Fable 5.1",
|
|
294
297
|
[CLAUDE_FABLE_5_1_MODEL]: "Fable 5.1",
|
|
@@ -539,6 +542,21 @@ function getCredentialMethodLabel(agent, method) {
|
|
|
539
542
|
}
|
|
540
543
|
}
|
|
541
544
|
|
|
545
|
+
// ../shared/src/result.ts
|
|
546
|
+
function createSuccessResult(data) {
|
|
547
|
+
return { ok: true, data };
|
|
548
|
+
}
|
|
549
|
+
function createErrorResult(error) {
|
|
550
|
+
return {
|
|
551
|
+
ok: false,
|
|
552
|
+
error: {
|
|
553
|
+
message: error.message,
|
|
554
|
+
code: error.code,
|
|
555
|
+
details: error.details
|
|
556
|
+
}
|
|
557
|
+
};
|
|
558
|
+
}
|
|
559
|
+
|
|
542
560
|
// ../shared/src/analytics/types.ts
|
|
543
561
|
function hasAgentChatActivityFields(value) {
|
|
544
562
|
return isRecord(value) && typeof value.chatId === "string" && typeof value.model === "string" && (value.credentialMethod === void 0 || isAuthMethod(value.credentialMethod)) && (value.credentialScope === void 0 || isCredentialScope(value.credentialScope)) && value.credentialMethod === void 0 === (value.credentialScope === void 0) && (value.senderUserId === void 0 || typeof value.senderUserId === "string") && typeof value.occurredAt === "string";
|
|
@@ -977,21 +995,6 @@ function getMemoryOutputSafetyViolation(value, secrets, maxChars) {
|
|
|
977
995
|
return null;
|
|
978
996
|
}
|
|
979
997
|
|
|
980
|
-
// ../shared/src/result.ts
|
|
981
|
-
function createSuccessResult(data) {
|
|
982
|
-
return { ok: true, data };
|
|
983
|
-
}
|
|
984
|
-
function createErrorResult(error) {
|
|
985
|
-
return {
|
|
986
|
-
ok: false,
|
|
987
|
-
error: {
|
|
988
|
-
message: error.message,
|
|
989
|
-
code: error.code,
|
|
990
|
-
details: error.details
|
|
991
|
-
}
|
|
992
|
-
};
|
|
993
|
-
}
|
|
994
|
-
|
|
995
998
|
// ../shared/src/sandbox.ts
|
|
996
999
|
var SANDBOX_LIFECYCLE = {
|
|
997
1000
|
AUTO_STOP_MINUTES: 60,
|
|
@@ -6354,6 +6357,8 @@ function hasChatStarted(chat) {
|
|
|
6354
6357
|
// ../shared/src/routes/codex.ts
|
|
6355
6358
|
var CODEX_AUTH_ENV_KEYS = [
|
|
6356
6359
|
"OPENAI_API_KEY",
|
|
6360
|
+
"CODEX_OPENAI_BASE_URL",
|
|
6361
|
+
"CODEX_OPENAI_AUTHORIZATION_HEADER",
|
|
6357
6362
|
"AZURE_OPENAI_API_KEY",
|
|
6358
6363
|
"CODEX_FOUNDRY_BASE_URL",
|
|
6359
6364
|
"CODEX_FOUNDRY_MODEL",
|
|
@@ -6364,7 +6369,12 @@ function codexAuthEnvFromResponse(response) {
|
|
|
6364
6369
|
case "oauth":
|
|
6365
6370
|
return { REPLICAS_CODEX_AUTH_METHOD: "oauth" };
|
|
6366
6371
|
case "api_key":
|
|
6367
|
-
return {
|
|
6372
|
+
return {
|
|
6373
|
+
...response.apiKey && !response.authorizationHeader ? { OPENAI_API_KEY: response.apiKey } : {},
|
|
6374
|
+
...response.baseUrl ? { CODEX_OPENAI_BASE_URL: response.baseUrl } : {},
|
|
6375
|
+
...response.authorizationHeader ? { CODEX_OPENAI_AUTHORIZATION_HEADER: response.authorizationHeader } : {},
|
|
6376
|
+
REPLICAS_CODEX_AUTH_METHOD: "api_key"
|
|
6377
|
+
};
|
|
6368
6378
|
case "foundry":
|
|
6369
6379
|
return {
|
|
6370
6380
|
AZURE_OPENAI_API_KEY: response.apiKey,
|
|
@@ -6377,7 +6387,12 @@ function codexAuthEnvFromResponse(response) {
|
|
|
6377
6387
|
var CODEX_AUTH_ENV_KEYS_BY_METHOD = {
|
|
6378
6388
|
none: [],
|
|
6379
6389
|
oauth: ["REPLICAS_CODEX_AUTH_METHOD"],
|
|
6380
|
-
api_key: [
|
|
6390
|
+
api_key: [
|
|
6391
|
+
"OPENAI_API_KEY",
|
|
6392
|
+
"CODEX_OPENAI_BASE_URL",
|
|
6393
|
+
"CODEX_OPENAI_AUTHORIZATION_HEADER",
|
|
6394
|
+
"REPLICAS_CODEX_AUTH_METHOD"
|
|
6395
|
+
],
|
|
6381
6396
|
bedrock: [],
|
|
6382
6397
|
foundry: ["AZURE_OPENAI_API_KEY", "CODEX_FOUNDRY_BASE_URL", "CODEX_FOUNDRY_MODEL", "REPLICAS_CODEX_AUTH_METHOD"]
|
|
6383
6398
|
};
|
|
@@ -0,0 +1,95 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
|
|
3
|
+
// src/utils/presigned-upload.ts
|
|
4
|
+
import { createReadStream } from "fs";
|
|
5
|
+
import { request as httpRequest } from "http";
|
|
6
|
+
import { request as httpsRequest } from "https";
|
|
7
|
+
async function putPresignedFile(urlValue, filePath, size, contentType) {
|
|
8
|
+
await new Promise((resolve, reject) => {
|
|
9
|
+
const url = new URL(urlValue);
|
|
10
|
+
const request = (url.protocol === "https:" ? httpsRequest : httpRequest)(url, {
|
|
11
|
+
method: "PUT",
|
|
12
|
+
headers: {
|
|
13
|
+
"content-length": String(size),
|
|
14
|
+
"content-type": contentType
|
|
15
|
+
}
|
|
16
|
+
}, (response) => {
|
|
17
|
+
response.setEncoding("utf8");
|
|
18
|
+
let body = "";
|
|
19
|
+
response.on("data", (chunk) => {
|
|
20
|
+
body += chunk;
|
|
21
|
+
});
|
|
22
|
+
response.on("end", () => {
|
|
23
|
+
const status = response.statusCode ?? 0;
|
|
24
|
+
if (status >= 200 && status < 300) resolve();
|
|
25
|
+
else reject(new Error(`upload failed: ${status} ${body}`));
|
|
26
|
+
});
|
|
27
|
+
response.on("error", reject);
|
|
28
|
+
});
|
|
29
|
+
request.on("error", reject);
|
|
30
|
+
const file = size > 0 ? createReadStream(filePath, { start: 0, end: size - 1 }) : createReadStream(filePath);
|
|
31
|
+
file.on("error", (error) => request.destroy(error));
|
|
32
|
+
file.pipe(request);
|
|
33
|
+
});
|
|
34
|
+
}
|
|
35
|
+
|
|
36
|
+
// src/managers/codex-asp/notification-dispatch.ts
|
|
37
|
+
var TURN_STARTED_METHOD = "turn/started";
|
|
38
|
+
var TURN_COMPLETED_METHOD = "turn/completed";
|
|
39
|
+
var TURN_PLAN_UPDATED_METHOD = "turn/plan/updated";
|
|
40
|
+
var THREAD_GOAL_UPDATED_METHOD = "thread/goal/updated";
|
|
41
|
+
var THREAD_GOAL_CLEARED_METHOD = "thread/goal/cleared";
|
|
42
|
+
var ITEM_STARTED_METHOD = "item/started";
|
|
43
|
+
var ITEM_COMPLETED_METHOD = "item/completed";
|
|
44
|
+
var AGENT_MESSAGE_DELTA_METHOD = "item/agentMessage/delta";
|
|
45
|
+
var REASONING_SUMMARY_TEXT_DELTA_METHOD = "item/reasoning/summaryTextDelta";
|
|
46
|
+
var REASONING_TEXT_DELTA_METHOD = "item/reasoning/textDelta";
|
|
47
|
+
var REASONING_SUMMARY_PART_ADDED_METHOD = "item/reasoning/summaryPartAdded";
|
|
48
|
+
var COMMAND_EXECUTION_OUTPUT_DELTA_METHOD = "item/commandExecution/outputDelta";
|
|
49
|
+
var FILE_CHANGE_OUTPUT_DELTA_METHOD = "item/fileChange/outputDelta";
|
|
50
|
+
var ACCOUNT_RATE_LIMITS_UPDATED_METHOD = "account/rateLimits/updated";
|
|
51
|
+
var THREAD_TOKEN_USAGE_UPDATED_METHOD = "thread/tokenUsage/updated";
|
|
52
|
+
var THREAD_COMPACTED_METHOD = "thread/compacted";
|
|
53
|
+
var MODEL_REROUTED_METHOD = "model/rerouted";
|
|
54
|
+
function dispatchAspNotification(notification, handlers) {
|
|
55
|
+
const handler = handlers[notification.method];
|
|
56
|
+
if (!handler) return;
|
|
57
|
+
handler(notification);
|
|
58
|
+
}
|
|
59
|
+
function recoverCompletedTurn(turn, completedItems, agentMessageDeltas) {
|
|
60
|
+
const items = turn.items.length > 0 ? [...turn.items] : [];
|
|
61
|
+
const itemIds = new Set(items.map((item) => item.id));
|
|
62
|
+
for (const item of completedItems) {
|
|
63
|
+
if (itemIds.has(item.id)) continue;
|
|
64
|
+
items.push(item);
|
|
65
|
+
itemIds.add(item.id);
|
|
66
|
+
}
|
|
67
|
+
for (const [itemId, text] of agentMessageDeltas) {
|
|
68
|
+
if (itemIds.has(itemId)) continue;
|
|
69
|
+
items.push({ type: "agentMessage", id: itemId, text, phase: null, memoryCitation: null });
|
|
70
|
+
}
|
|
71
|
+
return items.length > 0 ? { ...turn, items, itemsView: "full" } : turn;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
export {
|
|
75
|
+
putPresignedFile,
|
|
76
|
+
TURN_STARTED_METHOD,
|
|
77
|
+
TURN_COMPLETED_METHOD,
|
|
78
|
+
TURN_PLAN_UPDATED_METHOD,
|
|
79
|
+
THREAD_GOAL_UPDATED_METHOD,
|
|
80
|
+
THREAD_GOAL_CLEARED_METHOD,
|
|
81
|
+
ITEM_STARTED_METHOD,
|
|
82
|
+
ITEM_COMPLETED_METHOD,
|
|
83
|
+
AGENT_MESSAGE_DELTA_METHOD,
|
|
84
|
+
REASONING_SUMMARY_TEXT_DELTA_METHOD,
|
|
85
|
+
REASONING_TEXT_DELTA_METHOD,
|
|
86
|
+
REASONING_SUMMARY_PART_ADDED_METHOD,
|
|
87
|
+
COMMAND_EXECUTION_OUTPUT_DELTA_METHOD,
|
|
88
|
+
FILE_CHANGE_OUTPUT_DELTA_METHOD,
|
|
89
|
+
ACCOUNT_RATE_LIMITS_UPDATED_METHOD,
|
|
90
|
+
THREAD_TOKEN_USAGE_UPDATED_METHOD,
|
|
91
|
+
THREAD_COMPACTED_METHOD,
|
|
92
|
+
MODEL_REROUTED_METHOD,
|
|
93
|
+
dispatchAspNotification,
|
|
94
|
+
recoverCompletedTurn
|
|
95
|
+
};
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
evaluateCommandProtection
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AKQ6IVUU.js";
|
|
5
|
+
import "./chunk-OGIXPGJ6.js";
|
|
5
6
|
import {
|
|
6
7
|
isRecord
|
|
7
8
|
} from "./chunk-2RB7SIP3.js";
|
|
8
|
-
import "./chunk-
|
|
9
|
+
import "./chunk-RYGOTMEM.js";
|
|
9
10
|
|
|
10
11
|
// src/command-protection-hook.ts
|
|
11
12
|
var provider = process.argv[2];
|
|
@@ -1,12 +1,13 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
3
|
evaluateCommandProtection
|
|
4
|
-
} from "./chunk-
|
|
4
|
+
} from "./chunk-AKQ6IVUU.js";
|
|
5
5
|
import {
|
|
6
6
|
notifyPostToolUse
|
|
7
|
-
} from "./chunk-
|
|
7
|
+
} from "./chunk-PNTBK7LZ.js";
|
|
8
|
+
import "./chunk-OGIXPGJ6.js";
|
|
8
9
|
import "./chunk-2RB7SIP3.js";
|
|
9
|
-
import "./chunk-
|
|
10
|
+
import "./chunk-RYGOTMEM.js";
|
|
10
11
|
|
|
11
12
|
// src/deepseek-command-protection-plugin.ts
|
|
12
13
|
function replicasCommandProtection(context) {
|
|
@@ -1,15 +1,17 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import {
|
|
3
|
-
AppServerProcess,
|
|
4
|
-
buildCodexAgentEnv,
|
|
5
3
|
putPresignedFile,
|
|
6
4
|
recoverCompletedTurn
|
|
7
|
-
} from "./chunk-
|
|
5
|
+
} from "./chunk-Z6P6S5HL.js";
|
|
6
|
+
import {
|
|
7
|
+
AppServerProcess,
|
|
8
|
+
buildCodexAgentEnv
|
|
9
|
+
} from "./chunk-6X53Z7IV.js";
|
|
8
10
|
import {
|
|
9
11
|
AGENT,
|
|
10
12
|
getMemoryOutputSafetyViolation,
|
|
11
13
|
headlessAgentRequestSchema
|
|
12
|
-
} from "./chunk-
|
|
14
|
+
} from "./chunk-RYGOTMEM.js";
|
|
13
15
|
|
|
14
16
|
// src/headless-agent.ts
|
|
15
17
|
import { createHash } from "crypto";
|