@pushpalsdev/cli 1.0.44 → 1.0.46

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.
@@ -692,6 +692,8 @@ function loadPushPalsConfig(options = {}) {
692
692
  const remoteNode = getObject(merged, "remotebuddy");
693
693
  const remoteStatusHeartbeatMs = Math.max(0, asInt(parseIntEnv("REMOTEBUDDY_STATUS_HEARTBEAT_MS") ?? globalStatusHeartbeatMs ?? remoteNode.status_heartbeat_ms, 120000));
694
694
  const remotePollMs = Math.max(200, asInt(parseIntEnv("REMOTEBUDDY_POLL_MS") ?? remoteNode.poll_ms, 2000));
695
+ const remoteMaxWorkerpals = Math.max(1, asInt(parseIntEnv("REMOTEBUDDY_MAX_WORKERPALS") ?? remoteNode.max_workerpals, 20));
696
+ const remoteMinWorkerpals = Math.max(1, Math.min(remoteMaxWorkerpals, asInt(parseIntEnv("REMOTEBUDDY_MIN_WORKERPALS") ?? remoteNode.min_workerpals, 1)));
695
697
  const remoteLlm = resolveLlmConfig(remoteNode, "REMOTEBUDDY", {
696
698
  backend: "lmstudio",
697
699
  endpoint: "http://127.0.0.1:1234",
@@ -944,7 +946,8 @@ function loadPushPalsConfig(options = {}) {
944
946
  workerpalOnlineTtlMs: Math.max(1000, asInt(parseIntEnv("REMOTEBUDDY_WORKERPAL_ONLINE_TTL_MS") ?? remoteNode.workerpal_online_ttl_ms, 15000)),
945
947
  waitForWorkerpalMs: Math.max(0, asInt(parseIntEnv("REMOTEBUDDY_WAIT_FOR_WORKERPAL_MS") ?? remoteNode.wait_for_workerpal_ms, 15000)),
946
948
  autoSpawnWorkerpals: parseBoolEnv("REMOTEBUDDY_AUTO_SPAWN_WORKERPALS") ?? asBoolean(remoteNode.auto_spawn_workerpals, true),
947
- maxWorkerpals: Math.max(1, asInt(parseIntEnv("REMOTEBUDDY_MAX_WORKERPALS") ?? remoteNode.max_workerpals, 20)),
949
+ minWorkerpals: remoteMinWorkerpals,
950
+ maxWorkerpals: remoteMaxWorkerpals,
948
951
  workerpalStartupTimeoutMs: Math.max(1000, asInt(parseIntEnv("REMOTEBUDDY_WORKERPAL_STARTUP_TIMEOUT_MS") ?? remoteNode.workerpal_startup_timeout_ms, 1e4)),
949
952
  workerpalDocker: parseBoolEnv("REMOTEBUDDY_WORKERPAL_DOCKER") ?? asBoolean(remoteNode.workerpal_docker, true),
950
953
  workerpalRequireDocker: parseBoolEnv("REMOTEBUDDY_WORKERPAL_REQUIRE_DOCKER") ?? asBoolean(remoteNode.workerpal_require_docker, true),
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pushpalsdev/cli",
3
- "version": "1.0.44",
3
+ "version": "1.0.46",
4
4
  "description": "PushPals terminal CLI for LocalBuddy -> RemoteBuddy orchestration",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -40,7 +40,8 @@ status_heartbeat_ms = 120000
40
40
  workerpal_online_ttl_ms = 15000
41
41
  wait_for_workerpal_ms = 15000
42
42
  auto_spawn_workerpals = true
43
- max_workerpals = 3
43
+ min_workerpals = 1
44
+ max_workerpals = 4
44
45
  workerpal_startup_timeout_ms = 10000
45
46
  workerpal_docker = true
46
47
  workerpal_require_docker = true
@@ -23,7 +23,8 @@ codex_timeout_ms = 120000
23
23
  reasoning_effort = "high"
24
24
 
25
25
  [remotebuddy]
26
- max_workerpals = 3
26
+ min_workerpals = 1
27
+ max_workerpals = 4
27
28
  crash_restart_enabled = true
28
29
  crash_restart_max_restarts = 3
29
30
  crash_restart_backoff_ms = 3000
@@ -4,3 +4,4 @@ Runtime policy guardrails (mandatory):
4
4
  - Never bypass Codex usage by changing tests/code expectations.
5
5
  - If Codex CLI auth/execution is unavailable, hard-fail and stop.
6
6
  - Do not apply fallback/workaround execution paths when Codex is unavailable.
7
+ - Use direct commands without shell wrappers; do not rely on `/bin/bash -lc`, `sh -lc`, `cmd /c`, `powershell -Command`, pipelines, or `awk` when a plain command will do.
@@ -12,4 +12,8 @@ Execution rules:
12
12
 
13
13
  - Keep edits minimal, correct, and scoped to the requested task.
14
14
  - Read relevant files before editing, then run focused validation.
15
+ - Use direct commands without shell wrappers. Prefer plain commands like `git diff -- path`, `git add <path>`, `git status --porcelain`, and `pwd`.
16
+ - Do not wrap commands in `/bin/bash -lc`, `sh -lc`, `cmd /c`, or `powershell -Command`, and avoid pipelines, `awk`, heredocs, or multi-command shell snippets unless they are truly unavoidable.
17
+ - If the command router rejects a command, simplify it to a single direct command instead of retrying more shell wrappers.
18
+ - When a prepared merge-conflict sandbox is paused mid-rebase, explicitly finish it with `git add <resolved-files>` and `git -c core.editor=true rebase --continue` before returning.
15
19
  - Report blockers explicitly; do not hide platform/runtime issues with workaround edits.
@@ -170,6 +170,7 @@ class OpenAICodexRuntimeConfigTests(unittest.TestCase):
170
170
  def test_loads_openai_codex_task_prompt_template(self) -> None:
171
171
  template = _load_prompt_template("workerpals/openai_codex_task_execute_system_prompt.md")
172
172
  self.assertIn("Codex CLI is required infrastructure", template)
173
+ self.assertIn("Use direct commands without shell wrappers", template)
173
174
 
174
175
  def test_extracts_usage_counts_from_nested_json_event(self) -> None:
175
176
  usage = _extract_usage_counts(
@@ -174,6 +174,9 @@ function buildPlannerGuidance(
174
174
  if (conflictPaths.length > 0) {
175
175
  lines.push(`- Unresolved conflict files: ${conflictPaths.join(", ")}`);
176
176
  }
177
+ lines.push(
178
+ "- Use direct commands only while resolving this rebase. Prefer `git diff -- <path>`, `git add <path>`, and `git -c core.editor=true rebase --continue` instead of `/bin/bash -lc`, `sh -lc`, `awk`, or chained shell snippets.",
179
+ );
177
180
  lines.push(
178
181
  "- After editing, run `git add <files>` and `git -c core.editor=true rebase --continue` until the rebase completes.",
179
182
  );
@@ -40,7 +40,8 @@ status_heartbeat_ms = 120000
40
40
  workerpal_online_ttl_ms = 15000
41
41
  wait_for_workerpal_ms = 15000
42
42
  auto_spawn_workerpals = true
43
- max_workerpals = 3
43
+ min_workerpals = 1
44
+ max_workerpals = 4
44
45
  workerpal_startup_timeout_ms = 10000
45
46
  workerpal_docker = true
46
47
  workerpal_require_docker = true
@@ -23,7 +23,8 @@ codex_timeout_ms = 120000
23
23
  reasoning_effort = "high"
24
24
 
25
25
  [remotebuddy]
26
- max_workerpals = 3
26
+ min_workerpals = 1
27
+ max_workerpals = 4
27
28
  crash_restart_enabled = true
28
29
  crash_restart_max_restarts = 3
29
30
  crash_restart_backoff_ms = 3000
@@ -97,6 +97,7 @@ export interface PushPalsConfig {
97
97
  workerpalOnlineTtlMs: number;
98
98
  waitForWorkerpalMs: number;
99
99
  autoSpawnWorkerpals: boolean;
100
+ minWorkerpals: number;
100
101
  maxWorkerpals: number;
101
102
  workerpalStartupTimeoutMs: number;
102
103
  workerpalDocker: boolean;
@@ -533,6 +534,7 @@ function resolveLlmConfig(
533
534
  10_000,
534
535
  asInt(parseIntEnv(`${envPrefix}_LLM_CODEX_TIMEOUT_MS`) ?? llmNode.codex_timeout_ms, 120_000),
535
536
  );
537
+
536
538
  return {
537
539
  backend,
538
540
  endpoint,
@@ -726,6 +728,17 @@ export function loadPushPalsConfig(options: LoadOptions = {}): PushPalsConfig {
726
728
  200,
727
729
  asInt(parseIntEnv("REMOTEBUDDY_POLL_MS") ?? remoteNode.poll_ms, 2_000),
728
730
  );
731
+ const remoteMaxWorkerpals = Math.max(
732
+ 1,
733
+ asInt(parseIntEnv("REMOTEBUDDY_MAX_WORKERPALS") ?? remoteNode.max_workerpals, 20),
734
+ );
735
+ const remoteMinWorkerpals = Math.max(
736
+ 1,
737
+ Math.min(
738
+ remoteMaxWorkerpals,
739
+ asInt(parseIntEnv("REMOTEBUDDY_MIN_WORKERPALS") ?? remoteNode.min_workerpals, 1),
740
+ ),
741
+ );
729
742
  const remoteLlm = resolveLlmConfig(
730
743
  remoteNode,
731
744
  "REMOTEBUDDY",
@@ -1498,10 +1511,8 @@ export function loadPushPalsConfig(options: LoadOptions = {}): PushPalsConfig {
1498
1511
  autoSpawnWorkerpals:
1499
1512
  parseBoolEnv("REMOTEBUDDY_AUTO_SPAWN_WORKERPALS") ??
1500
1513
  asBoolean(remoteNode.auto_spawn_workerpals, true),
1501
- maxWorkerpals: Math.max(
1502
- 1,
1503
- asInt(parseIntEnv("REMOTEBUDDY_MAX_WORKERPALS") ?? remoteNode.max_workerpals, 20),
1504
- ),
1514
+ minWorkerpals: remoteMinWorkerpals,
1515
+ maxWorkerpals: remoteMaxWorkerpals,
1505
1516
  workerpalStartupTimeoutMs: Math.max(
1506
1517
  1_000,
1507
1518
  asInt(
@@ -4,3 +4,4 @@ Runtime policy guardrails (mandatory):
4
4
  - Never bypass Codex usage by changing tests/code expectations.
5
5
  - If Codex CLI auth/execution is unavailable, hard-fail and stop.
6
6
  - Do not apply fallback/workaround execution paths when Codex is unavailable.
7
+ - Use direct commands without shell wrappers; do not rely on `/bin/bash -lc`, `sh -lc`, `cmd /c`, `powershell -Command`, pipelines, or `awk` when a plain command will do.
@@ -12,4 +12,8 @@ Execution rules:
12
12
 
13
13
  - Keep edits minimal, correct, and scoped to the requested task.
14
14
  - Read relevant files before editing, then run focused validation.
15
+ - Use direct commands without shell wrappers. Prefer plain commands like `git diff -- path`, `git add <path>`, `git status --porcelain`, and `pwd`.
16
+ - Do not wrap commands in `/bin/bash -lc`, `sh -lc`, `cmd /c`, or `powershell -Command`, and avoid pipelines, `awk`, heredocs, or multi-command shell snippets unless they are truly unavoidable.
17
+ - If the command router rejects a command, simplify it to a single direct command instead of retrying more shell wrappers.
18
+ - When a prepared merge-conflict sandbox is paused mid-rebase, explicitly finish it with `git add <resolved-files>` and `git -c core.editor=true rebase --continue` before returning.
15
19
  - Report blockers explicitly; do not hide platform/runtime issues with workaround edits.