replicas-engine 0.1.540 → 0.1.542
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/index.js +108 -69
- package/package.json +1 -1
package/dist/src/index.js
CHANGED
|
@@ -203,9 +203,72 @@ function detectLanguageByPath(filePath) {
|
|
|
203
203
|
return EXT_TO_LANGUAGE[ext] ?? null;
|
|
204
204
|
}
|
|
205
205
|
|
|
206
|
+
// ../shared/src/credentials/types.ts
|
|
207
|
+
var CREDENTIAL_SCOPE = {
|
|
208
|
+
USER: "user",
|
|
209
|
+
ORG: "org"
|
|
210
|
+
};
|
|
211
|
+
var CREDENTIAL_SCOPES = Object.values(CREDENTIAL_SCOPE);
|
|
212
|
+
var CREDENTIAL_SCOPE_PRIORITY = [CREDENTIAL_SCOPE.USER, CREDENTIAL_SCOPE.ORG];
|
|
213
|
+
|
|
214
|
+
// ../shared/src/credentials/agents.ts
|
|
215
|
+
var CREDENTIAL_METHOD = {
|
|
216
|
+
OAUTH: "oauth",
|
|
217
|
+
API_KEY: "api_key",
|
|
218
|
+
FOUNDRY: "foundry",
|
|
219
|
+
BEDROCK: "bedrock",
|
|
220
|
+
OPENCODE_GO: "opencode-go",
|
|
221
|
+
ASTER: "aster",
|
|
222
|
+
OPENROUTER: "openrouter"
|
|
223
|
+
};
|
|
224
|
+
var CREDENTIAL_TYPE = {
|
|
225
|
+
CLAUDE_OAUTH: "claude",
|
|
226
|
+
ANTHROPIC_API_KEY: "claude_anthropic_api_key",
|
|
227
|
+
CLAUDE_FOUNDRY: "claude_foundry",
|
|
228
|
+
CLAUDE_BEDROCK: "claude_bedrock",
|
|
229
|
+
CODEX_OAUTH: "codex",
|
|
230
|
+
OPENAI_API_KEY: "openai_api_key",
|
|
231
|
+
CODEX_FOUNDRY: "codex_foundry",
|
|
232
|
+
CURSOR_API_KEY: "cursor_api_key",
|
|
233
|
+
OPENCODE_GO_API_KEY: "opencode_go_api_key",
|
|
234
|
+
ASTER_API_KEY: "aster_api_key",
|
|
235
|
+
OPENROUTER_API_KEY: "openrouter_api_key"
|
|
236
|
+
};
|
|
237
|
+
var AGENT_CREDENTIAL_METHODS_IN_ORDER = {
|
|
238
|
+
[AGENT.CLAUDE]: [
|
|
239
|
+
{ method: CREDENTIAL_METHOD.OAUTH, credentialType: CREDENTIAL_TYPE.CLAUDE_OAUTH },
|
|
240
|
+
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.ANTHROPIC_API_KEY },
|
|
241
|
+
{ method: CREDENTIAL_METHOD.FOUNDRY, credentialType: CREDENTIAL_TYPE.CLAUDE_FOUNDRY },
|
|
242
|
+
{ method: CREDENTIAL_METHOD.BEDROCK, credentialType: CREDENTIAL_TYPE.CLAUDE_BEDROCK }
|
|
243
|
+
],
|
|
244
|
+
[AGENT.CODEX]: [
|
|
245
|
+
{ method: CREDENTIAL_METHOD.OAUTH, credentialType: CREDENTIAL_TYPE.CODEX_OAUTH },
|
|
246
|
+
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.OPENAI_API_KEY },
|
|
247
|
+
{ method: CREDENTIAL_METHOD.FOUNDRY, credentialType: CREDENTIAL_TYPE.CODEX_FOUNDRY }
|
|
248
|
+
],
|
|
249
|
+
[AGENT.CURSOR]: [
|
|
250
|
+
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.CURSOR_API_KEY }
|
|
251
|
+
],
|
|
252
|
+
[AGENT.OPENCODE]: [
|
|
253
|
+
{ method: CREDENTIAL_METHOD.OPENCODE_GO, credentialType: CREDENTIAL_TYPE.OPENCODE_GO_API_KEY },
|
|
254
|
+
{ method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
|
|
255
|
+
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
256
|
+
],
|
|
257
|
+
[AGENT.PI]: [
|
|
258
|
+
{ method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
|
|
259
|
+
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
260
|
+
]
|
|
261
|
+
};
|
|
262
|
+
|
|
206
263
|
// ../shared/src/chat-turn-usage.ts
|
|
264
|
+
function isAuthMethod(value) {
|
|
265
|
+
return typeof value === "string" && Object.values(CREDENTIAL_METHOD).some((method) => method === value);
|
|
266
|
+
}
|
|
267
|
+
function isCredentialScope(value) {
|
|
268
|
+
return typeof value === "string" && CREDENTIAL_SCOPES.some((scope) => scope === value);
|
|
269
|
+
}
|
|
207
270
|
function isChatTurnUsageRecord(value) {
|
|
208
|
-
return isRecord(value) && typeof value.turnId === "string" && typeof value.chatId === "string" && typeof value.provider === "string" && isValidAgentProvider(value.provider) && typeof value.model === "string" && (value.senderUserId === void 0 || typeof value.senderUserId === "string") && typeof value.occurredAt === "string" && typeof value.seconds === "number" && Number.isFinite(value.seconds) && value.seconds >= 0;
|
|
271
|
+
return isRecord(value) && typeof value.turnId === "string" && typeof value.chatId === "string" && typeof value.provider === "string" && isValidAgentProvider(value.provider) && 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" && typeof value.seconds === "number" && Number.isFinite(value.seconds) && value.seconds >= 0;
|
|
209
272
|
}
|
|
210
273
|
|
|
211
274
|
// ../shared/src/aster.ts
|
|
@@ -639,7 +702,7 @@ var WORKSPACE_SIZES = ["small", "large"];
|
|
|
639
702
|
var INVALID_WORKSPACE_SIZE_ERROR = `Invalid size: must be one of ${WORKSPACE_SIZES.join(", ")}`;
|
|
640
703
|
|
|
641
704
|
// ../shared/src/e2b.ts
|
|
642
|
-
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-
|
|
705
|
+
var E2B_TEMPLATE_NAME = "replicas-sandbox-2026-08-01-v2";
|
|
643
706
|
|
|
644
707
|
// ../shared/src/runtime-env.ts
|
|
645
708
|
function shellQuotePosix(value) {
|
|
@@ -2944,63 +3007,6 @@ function isTransientErrorText(text, options = {}) {
|
|
|
2944
3007
|
return false;
|
|
2945
3008
|
}
|
|
2946
3009
|
|
|
2947
|
-
// ../shared/src/credentials/types.ts
|
|
2948
|
-
var CREDENTIAL_SCOPE = {
|
|
2949
|
-
USER: "user",
|
|
2950
|
-
ORG: "org"
|
|
2951
|
-
};
|
|
2952
|
-
var CREDENTIAL_SCOPES = Object.values(CREDENTIAL_SCOPE);
|
|
2953
|
-
var CREDENTIAL_SCOPE_PRIORITY = [CREDENTIAL_SCOPE.USER, CREDENTIAL_SCOPE.ORG];
|
|
2954
|
-
|
|
2955
|
-
// ../shared/src/credentials/agents.ts
|
|
2956
|
-
var CREDENTIAL_METHOD = {
|
|
2957
|
-
OAUTH: "oauth",
|
|
2958
|
-
API_KEY: "api_key",
|
|
2959
|
-
FOUNDRY: "foundry",
|
|
2960
|
-
BEDROCK: "bedrock",
|
|
2961
|
-
OPENCODE_GO: "opencode-go",
|
|
2962
|
-
ASTER: "aster",
|
|
2963
|
-
OPENROUTER: "openrouter"
|
|
2964
|
-
};
|
|
2965
|
-
var CREDENTIAL_TYPE = {
|
|
2966
|
-
CLAUDE_OAUTH: "claude",
|
|
2967
|
-
ANTHROPIC_API_KEY: "claude_anthropic_api_key",
|
|
2968
|
-
CLAUDE_FOUNDRY: "claude_foundry",
|
|
2969
|
-
CLAUDE_BEDROCK: "claude_bedrock",
|
|
2970
|
-
CODEX_OAUTH: "codex",
|
|
2971
|
-
OPENAI_API_KEY: "openai_api_key",
|
|
2972
|
-
CODEX_FOUNDRY: "codex_foundry",
|
|
2973
|
-
CURSOR_API_KEY: "cursor_api_key",
|
|
2974
|
-
OPENCODE_GO_API_KEY: "opencode_go_api_key",
|
|
2975
|
-
ASTER_API_KEY: "aster_api_key",
|
|
2976
|
-
OPENROUTER_API_KEY: "openrouter_api_key"
|
|
2977
|
-
};
|
|
2978
|
-
var AGENT_CREDENTIAL_METHODS_IN_ORDER = {
|
|
2979
|
-
[AGENT.CLAUDE]: [
|
|
2980
|
-
{ method: CREDENTIAL_METHOD.OAUTH, credentialType: CREDENTIAL_TYPE.CLAUDE_OAUTH },
|
|
2981
|
-
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.ANTHROPIC_API_KEY },
|
|
2982
|
-
{ method: CREDENTIAL_METHOD.FOUNDRY, credentialType: CREDENTIAL_TYPE.CLAUDE_FOUNDRY },
|
|
2983
|
-
{ method: CREDENTIAL_METHOD.BEDROCK, credentialType: CREDENTIAL_TYPE.CLAUDE_BEDROCK }
|
|
2984
|
-
],
|
|
2985
|
-
[AGENT.CODEX]: [
|
|
2986
|
-
{ method: CREDENTIAL_METHOD.OAUTH, credentialType: CREDENTIAL_TYPE.CODEX_OAUTH },
|
|
2987
|
-
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.OPENAI_API_KEY },
|
|
2988
|
-
{ method: CREDENTIAL_METHOD.FOUNDRY, credentialType: CREDENTIAL_TYPE.CODEX_FOUNDRY }
|
|
2989
|
-
],
|
|
2990
|
-
[AGENT.CURSOR]: [
|
|
2991
|
-
{ method: CREDENTIAL_METHOD.API_KEY, credentialType: CREDENTIAL_TYPE.CURSOR_API_KEY }
|
|
2992
|
-
],
|
|
2993
|
-
[AGENT.OPENCODE]: [
|
|
2994
|
-
{ method: CREDENTIAL_METHOD.OPENCODE_GO, credentialType: CREDENTIAL_TYPE.OPENCODE_GO_API_KEY },
|
|
2995
|
-
{ method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
|
|
2996
|
-
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
2997
|
-
],
|
|
2998
|
-
[AGENT.PI]: [
|
|
2999
|
-
{ method: CREDENTIAL_METHOD.ASTER, credentialType: CREDENTIAL_TYPE.ASTER_API_KEY },
|
|
3000
|
-
{ method: CREDENTIAL_METHOD.OPENROUTER, credentialType: CREDENTIAL_TYPE.OPENROUTER_API_KEY }
|
|
3001
|
-
]
|
|
3002
|
-
};
|
|
3003
|
-
|
|
3004
3010
|
// ../shared/src/claude-auth.ts
|
|
3005
3011
|
function isClaudeAuthErrorText(text) {
|
|
3006
3012
|
const lower = text.toLowerCase();
|
|
@@ -4998,6 +5004,11 @@ function loadRuntimeEnvFile() {
|
|
|
4998
5004
|
}
|
|
4999
5005
|
}
|
|
5000
5006
|
|
|
5007
|
+
// src/utils/type-guards.ts
|
|
5008
|
+
function isRecord4(value) {
|
|
5009
|
+
return typeof value === "object" && value !== null;
|
|
5010
|
+
}
|
|
5011
|
+
|
|
5001
5012
|
// src/engine-env.ts
|
|
5002
5013
|
function readEnv(name) {
|
|
5003
5014
|
const value = process.env[name]?.trim();
|
|
@@ -5039,6 +5050,23 @@ function parseCodexAuthMethod(value) {
|
|
|
5039
5050
|
}
|
|
5040
5051
|
return void 0;
|
|
5041
5052
|
}
|
|
5053
|
+
function parseAgentCredentialSnapshots(value) {
|
|
5054
|
+
if (!value) return {};
|
|
5055
|
+
try {
|
|
5056
|
+
const parsed = JSON.parse(value);
|
|
5057
|
+
if (!isRecord4(parsed)) return {};
|
|
5058
|
+
const snapshots = {};
|
|
5059
|
+
for (const [provider, snapshot] of Object.entries(parsed)) {
|
|
5060
|
+
if (!isValidAgentProvider(provider) || !isRecord4(snapshot)) continue;
|
|
5061
|
+
const { method, scope } = snapshot;
|
|
5062
|
+
if (!isAuthMethod(method) || !isCredentialScope(scope)) continue;
|
|
5063
|
+
snapshots[provider] = { method, scope };
|
|
5064
|
+
}
|
|
5065
|
+
return snapshots;
|
|
5066
|
+
} catch {
|
|
5067
|
+
return {};
|
|
5068
|
+
}
|
|
5069
|
+
}
|
|
5042
5070
|
var IS_WARMING_MODE = process.argv.includes("--warming");
|
|
5043
5071
|
function loadEngineEnv() {
|
|
5044
5072
|
loadRuntimeEnvFile();
|
|
@@ -5067,6 +5095,7 @@ function loadEngineEnv() {
|
|
|
5067
5095
|
ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION: readEnv("ANTHROPIC_SMALL_FAST_MODEL_AWS_REGION"),
|
|
5068
5096
|
REPLICAS_CLAUDE_AUTH_METHOD: parseClaudeAuthMethod(readEnv("REPLICAS_CLAUDE_AUTH_METHOD")),
|
|
5069
5097
|
REPLICAS_CODEX_AUTH_METHOD: parseCodexAuthMethod(readEnv("REPLICAS_CODEX_AUTH_METHOD")),
|
|
5098
|
+
REPLICAS_AGENT_CREDENTIALS: parseAgentCredentialSnapshots(readEnv("REPLICAS_AGENT_CREDENTIALS")),
|
|
5070
5099
|
REPLICAS_ENV_SYSTEM_PROMPT: readEnv("REPLICAS_ENV_SYSTEM_PROMPT"),
|
|
5071
5100
|
REPLICAS_ENV_START_HOOK: readEnv("REPLICAS_ENV_START_HOOK"),
|
|
5072
5101
|
REPLICAS_DISABLE_AUTO_START_HOOKS: readEnv("REPLICAS_DISABLE_AUTO_START_HOOKS")?.toLowerCase() === "true",
|
|
@@ -5078,6 +5107,13 @@ function loadEngineEnv() {
|
|
|
5078
5107
|
return env;
|
|
5079
5108
|
}
|
|
5080
5109
|
var ENGINE_ENV = loadEngineEnv();
|
|
5110
|
+
function setAgentCredentialSnapshot(provider, snapshot) {
|
|
5111
|
+
ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS = {
|
|
5112
|
+
...ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS,
|
|
5113
|
+
[provider]: snapshot
|
|
5114
|
+
};
|
|
5115
|
+
process.env.REPLICAS_AGENT_CREDENTIALS = JSON.stringify(ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS);
|
|
5116
|
+
}
|
|
5081
5117
|
|
|
5082
5118
|
// src/managers/base-refresh-manager.ts
|
|
5083
5119
|
var BaseRefreshManager = class {
|
|
@@ -5317,13 +5353,6 @@ import { readFile as readFile2, mkdir as mkdir2 } from "fs/promises";
|
|
|
5317
5353
|
import { existsSync } from "fs";
|
|
5318
5354
|
import { join as join4 } from "path";
|
|
5319
5355
|
import { homedir as homedir3 } from "os";
|
|
5320
|
-
|
|
5321
|
-
// src/utils/type-guards.ts
|
|
5322
|
-
function isRecord4(value) {
|
|
5323
|
-
return typeof value === "object" && value !== null;
|
|
5324
|
-
}
|
|
5325
|
-
|
|
5326
|
-
// src/utils/state.ts
|
|
5327
5356
|
var STATE_DIR = join4(homedir3(), ".replicas");
|
|
5328
5357
|
var STATE_FILE = join4(STATE_DIR, "engine-state.json");
|
|
5329
5358
|
var DEFAULT_STATE = {
|
|
@@ -6142,6 +6171,7 @@ var ClaudeTokenManager = class extends BaseRefreshManager {
|
|
|
6142
6171
|
}
|
|
6143
6172
|
const data = await response.json();
|
|
6144
6173
|
await this.applyCredentialsResponse(data);
|
|
6174
|
+
if (data.scope) setAgentCredentialSnapshot("claude", { method: data.type, scope: data.scope });
|
|
6145
6175
|
console.log(`[ClaudeTokenManager] Credentials refreshed (method=${data.type})`);
|
|
6146
6176
|
}
|
|
6147
6177
|
async fetchFreshCredentials(failureReason) {
|
|
@@ -6249,6 +6279,7 @@ var CodexTokenManager = class extends BaseRefreshManager {
|
|
|
6249
6279
|
}
|
|
6250
6280
|
const data = await response.json();
|
|
6251
6281
|
await this.applyCredentialsResponse(data);
|
|
6282
|
+
if (data.scope) setAgentCredentialSnapshot("codex", { method: data.type, scope: data.scope });
|
|
6252
6283
|
console.log(`[CodexTokenManager] Credentials refreshed (method=${data.type})`);
|
|
6253
6284
|
}
|
|
6254
6285
|
async fetchFreshCredentials(failureReason) {
|
|
@@ -10178,7 +10209,7 @@ var DEFAULT_CODEX_ARGS = ["app-server", "--listen", "stdio://"];
|
|
|
10178
10209
|
var MIN_CODEX_CLI_VERSION = "0.144.6";
|
|
10179
10210
|
var CODEX_UPGRADE_TIMEOUT_MS = 12e4;
|
|
10180
10211
|
var codexCliVersionEnsured = null;
|
|
10181
|
-
var ENGINE_PACKAGE_VERSION = "0.1.
|
|
10212
|
+
var ENGINE_PACKAGE_VERSION = "0.1.542";
|
|
10182
10213
|
var INITIALIZE_METHOD = "initialize";
|
|
10183
10214
|
var INITIALIZED_NOTIFICATION = "initialized";
|
|
10184
10215
|
var ACCOUNT_LOGIN_START_METHOD = "account/login/start";
|
|
@@ -14392,7 +14423,14 @@ function noteMessageAccepted(messageId, request) {
|
|
|
14392
14423
|
}
|
|
14393
14424
|
}
|
|
14394
14425
|
function noteTurnStarted(chatId, messageId, provider) {
|
|
14395
|
-
|
|
14426
|
+
const credential = ENGINE_ENV.REPLICAS_AGENT_CREDENTIALS[provider];
|
|
14427
|
+
activeTurns.set(chatId, {
|
|
14428
|
+
turnId: randomUUID5(),
|
|
14429
|
+
messageId,
|
|
14430
|
+
startedAtMs: Date.now(),
|
|
14431
|
+
provider,
|
|
14432
|
+
...credential ? { credentialMethod: credential.method, credentialScope: credential.scope } : {}
|
|
14433
|
+
});
|
|
14396
14434
|
}
|
|
14397
14435
|
function noteTurnEnded(chatId) {
|
|
14398
14436
|
const turn = activeTurns.get(chatId);
|
|
@@ -14415,9 +14453,10 @@ function recordTurn(chatId, turn) {
|
|
|
14415
14453
|
const attrs = messageAttrs.get(turn.messageId) ?? {};
|
|
14416
14454
|
messageAttrs.delete(turn.messageId);
|
|
14417
14455
|
writeRecord({
|
|
14418
|
-
turnId:
|
|
14456
|
+
turnId: turn.turnId,
|
|
14419
14457
|
chatId,
|
|
14420
14458
|
provider: turn.provider,
|
|
14459
|
+
...turn.credentialMethod && turn.credentialScope ? { credentialMethod: turn.credentialMethod, credentialScope: turn.credentialScope } : {},
|
|
14421
14460
|
...attrs,
|
|
14422
14461
|
// A request without a model runs the agent's default, so record that rather than nothing.
|
|
14423
14462
|
model: attrs.model ?? getDefaultAgentModel(turn.provider),
|