@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.
@@ -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 model = firstNonEmpty(process.env[`${envPrefix}_LLM_MODEL`], asString(llmNode.model, defaults.model), defaults.model);
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-6fc2a4ed369a881b7b810e1a9df3ce7b.js" defer></script>
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>