@pushpalsdev/cli 1.0.69 → 1.0.71
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/pushpals-cli.js +42 -3
- package/monitor-ui/+not-found.html +1 -1
- package/monitor-ui/_expo/static/js/web/{entry-6fc2a4ed369a881b7b810e1a9df3ce7b.js → entry-d69cc703f72afa383e4108efd6e0f726.js} +1138 -1138
- package/monitor-ui/_expo/static/js/web/{index-071ae9ae3713008b86319979f7148137.js → index-6013f9ebc87a963a55bb9137af1a5a06.js} +6 -6
- package/monitor-ui/_sitemap.html +1 -1
- package/monitor-ui/index.html +1 -1
- package/monitor-ui/modal.html +1 -1
- package/package.json +1 -1
- package/runtime/configs/default.toml +1 -1
- package/runtime/configs/local.example.toml +4 -4
- package/runtime/sandbox/.pushpals-remotebuddy-fallback.js +19 -7
- package/runtime/sandbox/apps/workerpals/src/backends/openai_codex/openai_codex_executor.py +4 -3
- package/runtime/sandbox/apps/workerpals/src/backends/openai_codex/test_openai_codex_runtime_config.py +7 -1
- package/runtime/sandbox/apps/workerpals/src/execute_job.ts +2 -1
- package/runtime/sandbox/configs/default.toml +1 -1
- package/runtime/sandbox/configs/local.example.toml +4 -4
- package/runtime/sandbox/packages/shared/src/config.ts +14 -6
package/dist/pushpals-cli.js
CHANGED
|
@@ -456,6 +456,8 @@ var DEFAULT_REMOTEBUDDY_MEMORY_MAX_RECALL_ITEMS = 12;
|
|
|
456
456
|
var DEFAULT_REMOTEBUDDY_MEMORY_MAX_RECALL_CHARS = 2400;
|
|
457
457
|
var DEFAULT_REMOTEBUDDY_MEMORY_MAX_SUMMARY_CHARS = 420;
|
|
458
458
|
var DEFAULT_REMOTEBUDDY_MEMORY_RETENTION_DAYS = 30;
|
|
459
|
+
var DEFAULT_OPENAI_CODEX_MODEL = "gpt-5.5";
|
|
460
|
+
var DEFAULT_OPENAI_CODEX_REASONING_EFFORT = "xhigh";
|
|
459
461
|
var cachedConfig = null;
|
|
460
462
|
var cachedConfigKey = "";
|
|
461
463
|
function firstNonEmpty(...values) {
|
|
@@ -486,7 +488,7 @@ function parseIntEnv(name) {
|
|
|
486
488
|
function parseTomlFile(path) {
|
|
487
489
|
if (!existsSync2(path))
|
|
488
490
|
return {};
|
|
489
|
-
const raw = readFileSync(path, "utf-8");
|
|
491
|
+
const raw = readFileSync(path, "utf-8").replace(/^\uFEFF/, "");
|
|
490
492
|
const parsed = Bun.TOML.parse(raw);
|
|
491
493
|
if (!parsed || typeof parsed !== "object" || Array.isArray(parsed))
|
|
492
494
|
return {};
|
|
@@ -651,10 +653,14 @@ function resolveLlmConfig(serviceNode, envPrefix, defaults, globalSessionId) {
|
|
|
651
653
|
const llmNode = getObject(serviceNode, "llm");
|
|
652
654
|
const backend = normalizeBackend(firstNonEmpty(process.env[`${envPrefix}_LLM_BACKEND`], asString(llmNode.backend, defaults.backend), defaults.backend));
|
|
653
655
|
const endpoint = firstNonEmpty(process.env[`${envPrefix}_LLM_ENDPOINT`], asString(llmNode.endpoint, defaults.endpoint), defaults.endpoint);
|
|
654
|
-
const
|
|
656
|
+
const envModel = firstNonEmpty(process.env[`${envPrefix}_LLM_MODEL`]);
|
|
657
|
+
const configuredFileModel = firstNonEmpty(asString(llmNode.model, ""));
|
|
658
|
+
const configuredModel = firstNonEmpty(envModel, configuredFileModel);
|
|
659
|
+
const modelFallback = backend === "openai_codex" ? DEFAULT_OPENAI_CODEX_MODEL : defaults.model;
|
|
660
|
+
const model = backend === "openai_codex" && !envModel && (!configuredFileModel || configuredFileModel === defaults.model) ? DEFAULT_OPENAI_CODEX_MODEL : firstNonEmpty(configuredModel, modelFallback) ?? modelFallback;
|
|
655
661
|
const sessionId = firstNonEmpty(process.env[`${envPrefix}_LLM_SESSION_ID`], asString(llmNode.session_id, defaults.sessionId), process.env.PUSHPALS_LLM_SESSION_ID, globalSessionId);
|
|
656
662
|
const apiKey = firstNonEmpty(process.env[`${envPrefix}_LLM_API_KEY`], defaultApiKeyForBackend(backend, endpoint));
|
|
657
|
-
const reasoningEffort = firstNonEmpty(process.env[`${envPrefix}_LLM_REASONING_EFFORT`], asString(llmNode.reasoning_effort, ""));
|
|
663
|
+
const reasoningEffort = firstNonEmpty(process.env[`${envPrefix}_LLM_REASONING_EFFORT`], asString(llmNode.reasoning_effort, ""), backend === "openai_codex" ? DEFAULT_OPENAI_CODEX_REASONING_EFFORT : "");
|
|
658
664
|
const codexAuthMode = firstNonEmpty(process.env[`${envPrefix}_LLM_CODEX_AUTH_MODE`], asString(llmNode.codex_auth_mode, ""));
|
|
659
665
|
const codexBin = firstNonEmpty(process.env[`${envPrefix}_LLM_CODEX_BIN`], asString(llmNode.codex_bin, ""));
|
|
660
666
|
const codexTimeoutMs = Math.max(1e4, asInt(parseIntEnv(`${envPrefix}_LLM_CODEX_TIMEOUT_MS`) ?? llmNode.codex_timeout_ms, 120000));
|
|
@@ -3062,6 +3068,13 @@ async function cleanupLingeringWorkerpalWarmContainers(opts) {
|
|
|
3062
3068
|
removed: 0
|
|
3063
3069
|
};
|
|
3064
3070
|
}
|
|
3071
|
+
if (isDockerCleanupTimeoutDetail(detail)) {
|
|
3072
|
+
return {
|
|
3073
|
+
ok: true,
|
|
3074
|
+
detail: `docker cleanup timed out; skipped WorkerPal warm-container cleanup: ${detail}`,
|
|
3075
|
+
removed: 0
|
|
3076
|
+
};
|
|
3077
|
+
}
|
|
3065
3078
|
return {
|
|
3066
3079
|
ok: false,
|
|
3067
3080
|
detail: `failed to inspect lingering WorkerPal warm containers: ${detail}`,
|
|
@@ -3079,6 +3092,20 @@ async function cleanupLingeringWorkerpalWarmContainers(opts) {
|
|
|
3079
3092
|
const remove = await runCommandWithEnvFn([dockerExecutable, "rm", "-f", ...containerIds], opts.repoRoot, opts.env, commandTimeoutMs);
|
|
3080
3093
|
if (!remove.ok) {
|
|
3081
3094
|
const detail = remove.stderr || remove.stdout || `exit ${remove.exitCode}`;
|
|
3095
|
+
if (isDockerUnavailableDetail(detail)) {
|
|
3096
|
+
return {
|
|
3097
|
+
ok: true,
|
|
3098
|
+
detail: `docker unavailable; skipped WorkerPal warm-container cleanup: ${detail}`,
|
|
3099
|
+
removed: 0
|
|
3100
|
+
};
|
|
3101
|
+
}
|
|
3102
|
+
if (isDockerCleanupTimeoutDetail(detail)) {
|
|
3103
|
+
return {
|
|
3104
|
+
ok: true,
|
|
3105
|
+
detail: `docker cleanup timed out; skipped WorkerPal warm-container cleanup: ${detail}`,
|
|
3106
|
+
removed: 0
|
|
3107
|
+
};
|
|
3108
|
+
}
|
|
3082
3109
|
return {
|
|
3083
3110
|
ok: false,
|
|
3084
3111
|
detail: `failed to remove lingering WorkerPal warm containers: ${detail}`,
|
|
@@ -3123,6 +3150,14 @@ async function cleanupLocalWorkerpalSandboxImage(opts) {
|
|
|
3123
3150
|
imageName
|
|
3124
3151
|
};
|
|
3125
3152
|
}
|
|
3153
|
+
if (isDockerCleanupTimeoutDetail(detail)) {
|
|
3154
|
+
return {
|
|
3155
|
+
ok: true,
|
|
3156
|
+
detail: `docker cleanup timed out; skipped WorkerPal sandbox image cleanup: ${detail}`,
|
|
3157
|
+
removed: false,
|
|
3158
|
+
imageName
|
|
3159
|
+
};
|
|
3160
|
+
}
|
|
3126
3161
|
return {
|
|
3127
3162
|
ok: false,
|
|
3128
3163
|
detail: `failed to remove local WorkerPal sandbox image ${imageName}: ${detail}`,
|
|
@@ -3222,6 +3257,9 @@ async function cleanupLingeringPushPalsGitWorktrees(opts) {
|
|
|
3222
3257
|
function isMissingDockerImageDetail(detail) {
|
|
3223
3258
|
return /\b(no such object|no such image|not found)\b/i.test(String(detail ?? ""));
|
|
3224
3259
|
}
|
|
3260
|
+
function isDockerCleanupTimeoutDetail(detail) {
|
|
3261
|
+
return /\btimed out after \d+ms\b/i.test(String(detail ?? ""));
|
|
3262
|
+
}
|
|
3225
3263
|
function isDockerUnavailableDetail(detail) {
|
|
3226
3264
|
const text = String(detail ?? "");
|
|
3227
3265
|
return /cannot connect to (the )?docker daemon/i.test(text) || /docker daemon is not running/i.test(text) || /failed to connect to the docker api/i.test(text) || /docker_engine/i.test(text) || /is the docker daemon running/i.test(text) || /docker(?:\.exe)?: command not found/i.test(text) || /spawn\s+docker(?:\.exe)?\s+ENOENT/i.test(text) || /docker(?:\.exe)?'?\s+is not recognized as an internal or external command/i.test(text);
|
|
@@ -5435,6 +5473,7 @@ export {
|
|
|
5435
5473
|
normalizeCliInteractiveMessage,
|
|
5436
5474
|
normalizeChildProcessEnv,
|
|
5437
5475
|
isDockerUnavailableDetail,
|
|
5476
|
+
isDockerCleanupTimeoutDetail,
|
|
5438
5477
|
isCliExitCommand,
|
|
5439
5478
|
injectMonitoringHubBootstrap,
|
|
5440
5479
|
formatWorkerExecutionReadinessLines,
|
|
@@ -435,5 +435,5 @@ input::-webkit-search-cancel-button,input::-webkit-search-decoration,input::-web
|
|
|
435
435
|
@keyframes r-1pzkwqh{0%{transform:translateY(100%);}100%{transform:translateY(0%);}}
|
|
436
436
|
@keyframes r-imtty0{0%{opacity:0;}100%{opacity:1;}}
|
|
437
437
|
@keyframes r-q67da2{0%{transform:translateX(-100%);}100%{transform:translateX(400%);}}
|
|
438
|
-
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-
|
|
438
|
+
@keyframes r-t2lo5v{0%{opacity:1;}100%{opacity:0;}}</style><script type="module">globalThis.__EXPO_ROUTER_HYDRATE__=true;</script><link rel="icon" href="/favicon.ico" /></head><body><div id="root"><div class="css-g5y9jx r-13awgt0"></div></div><script src="/_expo/static/js/web/entry-d69cc703f72afa383e4108efd6e0f726.js" defer></script>
|
|
439
439
|
</body></html>
|