@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.
- package/dist/pushpals-cli.js +4 -1
- package/package.json +1 -1
- package/runtime/configs/default.toml +2 -1
- package/runtime/configs/local.example.toml +2 -1
- package/runtime/prompts/workerpals/openai_codex_runtime_policy_appendix.md +1 -0
- package/runtime/prompts/workerpals/openai_codex_task_execute_system_prompt.md +4 -0
- package/runtime/sandbox/apps/workerpals/src/backends/openai_codex/test_openai_codex_runtime_config.py +1 -0
- package/runtime/sandbox/apps/workerpals/src/merge_conflict_job.ts +3 -0
- package/runtime/sandbox/configs/default.toml +2 -1
- package/runtime/sandbox/configs/local.example.toml +2 -1
- package/runtime/sandbox/packages/shared/src/config.ts +15 -4
- package/runtime/sandbox/prompts/workerpals/openai_codex_runtime_policy_appendix.md +1 -0
- package/runtime/sandbox/prompts/workerpals/openai_codex_task_execute_system_prompt.md +4 -0
package/dist/pushpals-cli.js
CHANGED
|
@@ -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
|
-
|
|
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
|
@@ -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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
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
|
|
@@ -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
|
-
|
|
1502
|
-
|
|
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.
|