@pushpalsdev/cli 1.0.6 → 1.0.7

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.
Files changed (73) hide show
  1. package/dist/pushpals-cli.js +483 -37
  2. package/package.json +3 -2
  3. package/runtime/.env.example +73 -0
  4. package/runtime/configs/backend.toml +79 -0
  5. package/runtime/configs/default.toml +259 -0
  6. package/runtime/configs/dev.toml +2 -0
  7. package/runtime/configs/local.example.toml +124 -0
  8. package/runtime/prompts/localbuddy/local_quick_reply_json_system_suffix.md +2 -0
  9. package/runtime/prompts/localbuddy/local_quick_reply_system_prompt.md +10 -0
  10. package/runtime/prompts/localbuddy/local_quick_reply_user_prompt.md +2 -0
  11. package/runtime/prompts/localbuddy/localbuddy_planner_git_diff_section.md +3 -0
  12. package/runtime/prompts/localbuddy/localbuddy_planner_git_status_section.md +3 -0
  13. package/runtime/prompts/localbuddy/localbuddy_planner_output_contract.md +5 -0
  14. package/runtime/prompts/localbuddy/localbuddy_planner_user_prompt.md +2 -0
  15. package/runtime/prompts/localbuddy/localbuddy_system_prompt.md +110 -0
  16. package/runtime/prompts/remotebuddy/autonomy_ideation_system_prompt.md +60 -0
  17. package/runtime/prompts/remotebuddy/autonomy_planning_system_prompt.md +5 -0
  18. package/runtime/prompts/remotebuddy/autonomy_scoring_system_prompt.md +6 -0
  19. package/runtime/prompts/remotebuddy/codex_adapter_json_requirements.md +1 -0
  20. package/runtime/prompts/remotebuddy/codex_adapter_json_schema_intro.md +1 -0
  21. package/runtime/prompts/remotebuddy/codex_adapter_max_tokens_line.md +1 -0
  22. package/runtime/prompts/remotebuddy/codex_adapter_prompt_template.md +14 -0
  23. package/runtime/prompts/remotebuddy/context_packer_condensed_history_system_prompt.md +1 -0
  24. package/runtime/prompts/remotebuddy/context_packer_system_prompt.md +1 -0
  25. package/runtime/prompts/remotebuddy/context_packer_user_prompt.md +11 -0
  26. package/runtime/prompts/remotebuddy/fallback_file_system_prompt.md +1 -0
  27. package/runtime/prompts/remotebuddy/fallback_file_user_prompt.md +4 -0
  28. package/runtime/prompts/remotebuddy/planner_post_system_prompt.md +2 -0
  29. package/runtime/prompts/remotebuddy/planner_repair_suffix_prompt.md +1 -0
  30. package/runtime/prompts/remotebuddy/planner_repair_user_prompt.md +7 -0
  31. package/runtime/prompts/remotebuddy/remotebuddy_system_prompt.md +109 -0
  32. package/runtime/prompts/review_agent/fix_job_intro_line.md +1 -0
  33. package/runtime/prompts/review_agent/merge_conflict_context_intro_line.md +1 -0
  34. package/runtime/prompts/review_agent/merge_conflict_instruction.md +4 -0
  35. package/runtime/prompts/review_agent/review_prompt_template.md +18 -0
  36. package/runtime/prompts/review_agent/reviewer.md +39 -0
  37. package/runtime/prompts/shared/post_system_prompt.md +62 -0
  38. package/runtime/prompts/workerpals/codex_quality_critic_instruction_prompt.md +14 -0
  39. package/runtime/prompts/workerpals/commit_message_prompt.md +36 -0
  40. package/runtime/prompts/workerpals/commit_message_user_prompt.md +7 -0
  41. package/runtime/prompts/workerpals/miniswe_broker_system_prompt.md +33 -0
  42. package/runtime/prompts/workerpals/miniswe_broker_task_prompt.md +5 -0
  43. package/runtime/prompts/workerpals/miniswe_completion_requirement.md +1 -0
  44. package/runtime/prompts/workerpals/miniswe_context_compaction_retry_prompt.md +1 -0
  45. package/runtime/prompts/workerpals/miniswe_explicit_targets_block.md +2 -0
  46. package/runtime/prompts/workerpals/miniswe_recovery_guidance_base.md +4 -0
  47. package/runtime/prompts/workerpals/miniswe_recovery_guidance_blocker_line.md +1 -0
  48. package/runtime/prompts/workerpals/miniswe_strict_tool_use_guidance.md +6 -0
  49. package/runtime/prompts/workerpals/miniswe_supplemental_guidance_section.md +2 -0
  50. package/runtime/prompts/workerpals/miniswe_timeout_note.md +1 -0
  51. package/runtime/prompts/workerpals/miniswe_toolcall_retry_guidance.md +1 -0
  52. package/runtime/prompts/workerpals/openai_codex_default_system_prompt.md +4 -0
  53. package/runtime/prompts/workerpals/openai_codex_instruction_wrapper.md +5 -0
  54. package/runtime/prompts/workerpals/openai_codex_runtime_policy_appendix.md +5 -0
  55. package/runtime/prompts/workerpals/openai_codex_supplemental_guidance_section.md +2 -0
  56. package/runtime/prompts/workerpals/openai_codex_task_execute_system_prompt.md +12 -0
  57. package/runtime/prompts/workerpals/openhands_minimal_security_policy.j2 +8 -0
  58. package/runtime/prompts/workerpals/openhands_minimal_system_prompt.j2 +20 -0
  59. package/runtime/prompts/workerpals/openhands_strict_tool_use_message.md +1 -0
  60. package/runtime/prompts/workerpals/openhands_supplemental_guidance_message.md +2 -0
  61. package/runtime/prompts/workerpals/openhands_task_execute_fallback_system_prompt.md +1 -0
  62. package/runtime/prompts/workerpals/openhands_task_execute_system_prompt.md +21 -0
  63. package/runtime/prompts/workerpals/openhands_task_user_prompt.md +6 -0
  64. package/runtime/prompts/workerpals/openhands_timeout_note.md +1 -0
  65. package/runtime/prompts/workerpals/pr_description.md +42 -0
  66. package/runtime/prompts/workerpals/task_quality_critic_system_prompt.md +9 -0
  67. package/runtime/prompts/workerpals/task_quality_critic_user_prompt.md +17 -0
  68. package/runtime/prompts/workerpals/workerpals_system_prompt.md +115 -0
  69. package/runtime/protocol/schemas/approvals.schema.json +6 -0
  70. package/runtime/protocol/schemas/envelope.schema.json +96 -0
  71. package/runtime/protocol/schemas/events.schema.json +679 -0
  72. package/runtime/protocol/schemas/http.schema.json +50 -0
  73. package/runtime/vision.example.md +191 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@pushpalsdev/cli",
3
- "version": "1.0.6",
3
+ "version": "1.0.7",
4
4
  "description": "PushPals terminal CLI for LocalBuddy -> RemoteBuddy orchestration",
5
5
  "license": "MIT",
6
6
  "repository": {
@@ -17,10 +17,11 @@
17
17
  "files": [
18
18
  "bin",
19
19
  "dist",
20
+ "runtime",
20
21
  "README.md"
21
22
  ],
22
23
  "scripts": {
23
- "build": "bun build ../../scripts/pushpals-cli.ts --target=bun --outfile ./dist/pushpals-cli.js",
24
+ "build": "bun run ../../scripts/sync-cli-runtime-assets.ts && bun build ../../scripts/pushpals-cli.ts --target=bun --outfile ./dist/pushpals-cli.js",
24
25
  "prepack": "bun run build"
25
26
  },
26
27
  "engines": {
@@ -0,0 +1,73 @@
1
+ # PushPals minimal environment template
2
+ #
3
+ # Canonical configuration is TOML:
4
+ # configs/default.toml
5
+ # configs/<profile>.toml
6
+ # configs/local.toml (gitignored)
7
+ #
8
+ # Keep this file to deployment wiring + secrets only.
9
+
10
+ # -----------------------------------------------------------------------------
11
+ # Wiring
12
+ # -----------------------------------------------------------------------------
13
+ PUSHPALS_PROFILE=dev
14
+ PUSHPALS_SERVER_URL=http://localhost:3001
15
+ PUSHPALS_SESSION_ID=dev
16
+
17
+ # Expo bootstrap URLs.
18
+ EXPO_PUBLIC_PUSHPALS_URL=http://localhost:3001
19
+ EXPO_PUBLIC_LOCAL_AGENT_URL=http://localhost:3003
20
+
21
+ # Optional runtime wiring for wrappers/containers.
22
+ # PUSHPALS_REPO_PATH=
23
+
24
+ # -----------------------------------------------------------------------------
25
+ # Secrets (machine/CI only)
26
+ # -----------------------------------------------------------------------------
27
+ # PUSHPALS_AUTH_TOKEN=
28
+ # PUSHPALS_GIT_TOKEN=
29
+ # GITHUB_TOKEN=
30
+ # GH_TOKEN=
31
+ # Optional: `bun run start` attempts non-interactive GH auth refresh by default; set to 0 to disable.
32
+ # PUSHPALS_GH_AUTH_REFRESH_ON_START=1
33
+ # WORKERPALS_OPENHANDS_WEB_MCP_AUTH_TOKEN=
34
+ #
35
+ # LLM provider secrets (recommended in env, not TOML):
36
+ # (If localbuddy/remotebuddy/workerpals use backend="openai", this single key
37
+ # is used as the default across all services.)
38
+ # OPENAI_API_KEY=
39
+ # OPENAI_BASE_URL=
40
+ # OPENAI_ORG_ID=
41
+ # OPENAI_PROJECT=
42
+ #
43
+ # Optional per-service API keys (override service-specific llm.api_key):
44
+ # LOCALBUDDY_LLM_API_KEY=
45
+ # REMOTEBUDDY_LLM_API_KEY=
46
+ # WORKERPALS_LLM_API_KEY=
47
+ #
48
+ # OpenAI Codex CLI behavior is primarily configured in `configs/local.toml`
49
+ # under [localbuddy.llm], [remotebuddy.llm], [workerpals.llm], and
50
+ # [workerpals.openai_codex]. Keep secrets/URLs in env only.
51
+ #
52
+ # Optional Codex env overrides (advanced; env overrides TOML):
53
+ # PUSHPALS_OPENAI_CODEX_AUTH_MODE=auto
54
+ # PUSHPALS_OPENAI_CODEX_BIN=bun x --yes @openai/codex
55
+ # PUSHPALS_OPENAI_CODEX_BASE_URL=
56
+ # - auto: use API key when present, otherwise use `codex login` session
57
+ # - api_key: force API-key auth (requires OPENAI_API_KEY)
58
+ # - chatgpt: force ChatGPT/Codex CLI login auth (ignores OPENAI_API_KEY)
59
+ # When Codex CLI auth is required,
60
+ # `bun run start` will run Codex login preflight on host before Docker/services.
61
+ # Non-secret Codex behavior knobs belong in TOML:
62
+ # [workerpals.openai_codex]
63
+ # timeout_ms, timeout_s, reasoning_effort, approval_policy, sandbox, color, json
64
+ # Docker mode: worker auto-mounts host ~/.codex by default.
65
+ # Optional override:
66
+ # PUSHPALS_OPENAI_CODEX_HOST_CODEX_HOME=
67
+ # PUSHPALS_OPENAI_CODEX_CONTAINER_CODEX_HOME=/root/.codex
68
+
69
+ # Optional network proxy wiring (if your environment requires it).
70
+ # HTTP_PROXY=
71
+ # HTTPS_PROXY=
72
+ # NO_PROXY=
73
+ # ALL_PROXY=
@@ -0,0 +1,79 @@
1
+ default_backend = "miniswe"
2
+
3
+ [env]
4
+ shared_passthrough = [
5
+ "HTTP_PROXY",
6
+ "HTTPS_PROXY",
7
+ "NO_PROXY",
8
+ "ALL_PROXY",
9
+ "http_proxy",
10
+ "https_proxy",
11
+ "no_proxy",
12
+ "all_proxy",
13
+ "PUSHPALS_GIT_TOKEN",
14
+ "GITHUB_TOKEN",
15
+ "GH_TOKEN",
16
+ "GIT_TOKEN",
17
+ "OPENAI_API_KEY",
18
+ "OPENAI_BASE_URL",
19
+ "OPENAI_API_BASE",
20
+ "OPENAI_ORG_ID",
21
+ "OPENAI_PROJECT",
22
+ "PUSHPALS_REPO_PATH",
23
+ "WORKERPALS_DEBUG",
24
+ ]
25
+
26
+ [backends.openhands]
27
+ script_segments = ["backends", "openhands", "openhands_executor.py"]
28
+ python_config_key = "openhandsPython"
29
+ timeout_config_key = "openhandsTimeoutMs"
30
+ passthrough_env = [
31
+ "WORKERPALS_OPENHANDS_PROMPT_PROFILE",
32
+ "WORKERPALS_OPENHANDS_AGENT_MAX_STEPS",
33
+ "WORKERPALS_OPENHANDS_WORKSPACE_PYTHON",
34
+ "WORKERPALS_OPENHANDS_LLM_NUM_RETRIES",
35
+ "WORKERPALS_OPENHANDS_LLM_RETRY_MULTIPLIER",
36
+ "WORKERPALS_OPENHANDS_LLM_RETRY_MIN_WAIT",
37
+ "WORKERPALS_OPENHANDS_LLM_RETRY_MAX_WAIT",
38
+ "WORKERPALS_OPENHANDS_LLM_TIMEOUT_SEC",
39
+ "WORKERPALS_OPENHANDS_LLM_MAX_MESSAGE_CHARS",
40
+ "WORKERPALS_OPENHANDS_LLM_TIMEOUT_RECOVERY_ATTEMPTS",
41
+ "WORKERPALS_OPENHANDS_LLM_TIMEOUT_RECOVERY_BACKOFF_SEC",
42
+ "WORKERPALS_OPENHANDS_TASK_PROMPT_MODE",
43
+ "WORKERPALS_OPENHANDS_LARGE_INSTRUCTION_CHARS",
44
+ "WORKERPALS_OPENHANDS_ENABLE_BROWSER_TOOL",
45
+ "WORKERPALS_OPENHANDS_ENABLE_WEB_MCP",
46
+ "WORKERPALS_OPENHANDS_MCP_CONFIG_JSON",
47
+ "WORKERPALS_OPENHANDS_WEB_MCP_URL",
48
+ "WORKERPALS_OPENHANDS_WEB_MCP_NAME",
49
+ "WORKERPALS_OPENHANDS_WEB_MCP_TRANSPORT",
50
+ "WORKERPALS_OPENHANDS_WEB_MCP_AUTH_TOKEN",
51
+ "WORKERPALS_OPENHANDS_WEB_MCP_HEADERS_JSON",
52
+ "WORKERPALS_OPENHANDS_WEB_MCP_TIMEOUT_SEC",
53
+ ]
54
+
55
+ [backends.miniswe]
56
+ script_segments = ["backends", "miniswe", "miniswe_executor.py"]
57
+ python_config_key = "miniswePython"
58
+ timeout_config_key = "minisweTimeoutMs"
59
+ passthrough_env = [
60
+ "WORKERPALS_MINISWE_AGENT_MAX_STEPS",
61
+ "WORKERPALS_MINISWE_TOOLCALL_RETRY_MAX",
62
+ "WORKERPALS_MINISWE_TOOL_BROKER",
63
+ "WORKERPALS_MINISWE_TOOL_BROKER_MAX_STEPS",
64
+ "WORKERPALS_MINISWE_TOOL_BROKER_MAX_ACTIONS_PER_STEP",
65
+ "WORKERPALS_MINISWE_TOOL_BROKER_SHELL_TIMEOUT_SEC",
66
+ ]
67
+
68
+ [backends.openai_codex]
69
+ script_segments = ["backends", "openai_codex", "openai_codex_executor.py"]
70
+ python_config_key = "openaiCodexPython"
71
+ timeout_config_key = "openaiCodexTimeoutMs"
72
+ passthrough_env = [
73
+ "PUSHPALS_OPENAI_CODEX_BIN",
74
+ "PUSHPALS_OPENAI_CODEX_BIN_JSON",
75
+ "PUSHPALS_OPENAI_CODEX_AUTH_MODE",
76
+ "PUSHPALS_OPENAI_CODEX_BASE_URL",
77
+ "PUSHPALS_OPENAI_CODEX_HOST_CODEX_HOME",
78
+ "PUSHPALS_OPENAI_CODEX_CONTAINER_CODEX_HOME",
79
+ ]
@@ -0,0 +1,259 @@
1
+ profile = "dev"
2
+ session_id = "dev"
3
+
4
+ [llm.lmstudio]
5
+ context_window = 4096
6
+ min_output_tokens = 256
7
+ token_safety_margin = 64
8
+ batch_tail_messages = 3
9
+ batch_chunk_tokens = 0
10
+ batch_memory_chars = 0
11
+
12
+ [paths]
13
+ data_dir = "outputs/data"
14
+ shared_db_path = "outputs/data/pushpals.db"
15
+ remotebuddy_db_path = "outputs/data/remotebuddy-state.db"
16
+
17
+ [server]
18
+ url = "http://localhost:3001"
19
+ host = "0.0.0.0"
20
+ port = 3001
21
+ debug_http = false
22
+ stale_claim_ttl_ms = 120000
23
+ stale_claim_sweep_interval_ms = 5000
24
+
25
+ [localbuddy]
26
+ port = 3003
27
+ status_heartbeat_ms = 120000
28
+
29
+ [localbuddy.llm]
30
+ backend = "lmstudio"
31
+ endpoint = "http://127.0.0.1:1234"
32
+ model = "local-model"
33
+ session_id = "localbuddy-dev"
34
+
35
+ [remotebuddy]
36
+ poll_ms = 2000
37
+ status_heartbeat_ms = 120000
38
+ workerpal_online_ttl_ms = 15000
39
+ wait_for_workerpal_ms = 15000
40
+ auto_spawn_workerpals = true
41
+ max_workerpals = 10
42
+ workerpal_startup_timeout_ms = 10000
43
+ workerpal_docker = true
44
+ workerpal_require_docker = true
45
+ workerpal_image = ""
46
+ workerpal_poll_ms = 0
47
+ workerpal_heartbeat_ms = 0
48
+ workerpal_labels = []
49
+ execution_budget_interactive_ms = 600000
50
+ execution_budget_normal_ms = 1500000
51
+ execution_budget_background_ms = 1800000
52
+ finalization_budget_ms = 120000
53
+ crash_restart_enabled = true
54
+ crash_restart_max_restarts = 3
55
+ crash_restart_backoff_ms = 3000
56
+
57
+ [remotebuddy.memory]
58
+ enabled = true
59
+ include_cross_session = true
60
+ max_recall_items = 12
61
+ max_recall_chars = 2400
62
+ max_summary_chars = 420
63
+ retention_days = 30
64
+
65
+ [remotebuddy.llm]
66
+ backend = "lmstudio"
67
+ endpoint = "http://127.0.0.1:1234"
68
+ model = "local-model"
69
+ session_id = "remotebuddy-dev"
70
+
71
+ [remotebuddy.autonomy]
72
+ enabled = true
73
+ kill_switch_enabled = false
74
+ tick_interval_ms = 300000
75
+ heartbeat_log_ms = 30000
76
+ vision_context_max_chars = 65536
77
+ ideation_budget_ms = 20000
78
+ llm_timeout_ms = 60000
79
+ allow_dirty_worktree = false
80
+ ideation_max_candidates = 20
81
+ top_k = 3
82
+ explore_rate = 0.3
83
+ min_confidence = 0.65
84
+ max_concurrent_objectives = 2
85
+ max_dispatch_per_hour = 6
86
+ max_dispatch_per_hour_by_type = { flaky_test = 4, lint_fix = 3, type_fix = 3, small_refactor = 2, feature_small = 2, feature_medium = 1, feature_large = 0, docs = 1, dep_bump = 0 }
87
+ max_dispatch_per_hour_by_component = { "apps/server" = 3, "apps/remotebuddy" = 2, "apps/workerpals" = 2, "apps/client" = 2, "packages/protocol" = 1, "packages/shared" = 2, "tests/integration" = 2, "tests/unit" = 2 }
88
+ max_token_usage_per_hour = 120000
89
+ max_runtime_ms_per_hour = 5400000
90
+ cooldown_fail_streak_threshold = 2
91
+ cooldown_ms = 1800000
92
+ stale_objective_ttl_ms = 2700000
93
+ stale_objective_sweep_interval_ms = 60000
94
+ auto_freeze_fail_streak_threshold = 3
95
+ auto_freeze_duration_ms = 1800000
96
+ evaluator_window_hours = 24
97
+ evaluator_min_samples = 6
98
+ evaluator_min_success_rate = 0.45
99
+ evaluator_max_regret_rate = 0.35
100
+ evaluator_run_interval_ms = 120000
101
+ alert_queue_pending_threshold = 20
102
+ alert_job_failure_rate_threshold = 0.3
103
+ alert_autonomy_failure_rate_threshold = 0.45
104
+ allow_read_anywhere = true
105
+ pr_feedback_comment_rows = 16
106
+ pr_feedback_comment_chars = 600
107
+ pr_feedback_summary_chars = 600
108
+ question_ttl_ms = 259200000
109
+ policy_version = "policy-v3.3"
110
+ impact_model_version = "impact-v1"
111
+
112
+ [remotebuddy.autonomy.replay]
113
+ store_prompt_payloads = false
114
+ max_runs_with_payloads = 50
115
+ max_payload_bytes = 262144
116
+
117
+ [workerpals]
118
+ poll_ms = 2000
119
+ heartbeat_ms = 5000
120
+ executor = "miniswe"
121
+ openhands_python = "python"
122
+ openhands_timeout_ms = 1800000
123
+ miniswe_python = "python"
124
+ miniswe_timeout_ms = 1800000
125
+ openai_codex_python = "python"
126
+ openai_codex_timeout_ms = 7200000
127
+ openhands_stuck_guard_enabled = true
128
+ openhands_stuck_guard_explore_limit = 18
129
+ openhands_stuck_guard_min_elapsed_ms = 180000
130
+ openhands_stuck_guard_broad_scan_limit = 2
131
+ openhands_stuck_guard_no_progress_max_ms = 300000
132
+ require_push = false
133
+ push_agent_branch = false
134
+ require_docker = false
135
+ skip_docker_self_check = false
136
+ docker_image = "pushpals-worker-sandbox:latest"
137
+ docker_timeout_ms = 7260000
138
+ docker_idle_timeout_ms = 600000
139
+ docker_agent_startup_timeout_ms = 45000
140
+ docker_warm_max_attempts = 3
141
+ docker_warm_retry_backoff_ms = 2000
142
+ docker_job_max_attempts = 2
143
+ docker_job_retry_backoff_ms = 3000
144
+ docker_warm_memory_mb = 2048
145
+ docker_warm_cpus = 2
146
+ file_modifying_jobs = ["task.execute"]
147
+ output_max_chars = 196608
148
+ output_max_lines = 600
149
+ output_max_head_lines = 120
150
+ quality_max_auto_revisions = 4
151
+ quality_validation_step_timeout_ms = 180000
152
+ quality_critic_timeout_ms = 45000
153
+ quality_soft_pass_on_exhausted = true
154
+ quality_critic_min_score = 8.0
155
+ quality_critic_max_diff_chars = 16000
156
+ quality_critic_max_validation_output_chars = 8000
157
+ executor_result_prefix = "__PUSHPALS_OH_RESULT__ "
158
+ docker_network_mode = "bridge"
159
+ base_ref = "origin/main_agents"
160
+ labels = []
161
+ failure_cooldown_ms = 20000
162
+
163
+ [workerpals.openhands]
164
+ workspace_python = "python3"
165
+ agent_server_url = ""
166
+ prompt_profile = "auto"
167
+ task_prompt_mode = "none"
168
+ large_instruction_chars = 1800
169
+ enable_web_mcp = false
170
+ web_mcp_url = ""
171
+ web_mcp_name = "web-search"
172
+ web_mcp_transport = "streamable-http"
173
+ web_mcp_timeout_sec = 0
174
+ enable_browser_tool = false
175
+ lmstudio_slot_id = -1
176
+ llm_num_retries = 2
177
+ llm_retry_multiplier = 1.5
178
+ llm_retry_min_wait = 1
179
+ llm_retry_max_wait = 4
180
+ llm_timeout_sec = 240
181
+ llm_max_message_chars = 8000
182
+ llm_timeout_recovery_attempts = 2
183
+ llm_timeout_recovery_backoff_sec = 5
184
+ agent_max_steps = 30
185
+ auto_steer_enabled = true
186
+ auto_steer_initial_delay_sec = 90
187
+ auto_steer_interval_sec = 60
188
+ auto_steer_max_nudges = 30
189
+
190
+ [workerpals.llm]
191
+ backend = "lmstudio"
192
+ endpoint = "http://127.0.0.1:1234"
193
+ model = "local-model"
194
+ session_id = "workerpals-dev"
195
+
196
+ [workerpals.openai_codex]
197
+ timeout_ms = 7200000
198
+ progress_log_interval_s = 30
199
+ reasoning_effort = "high"
200
+ approval_policy = "never"
201
+ sandbox = "workspace-write"
202
+ color = "never"
203
+ json = true
204
+
205
+ [source_control_manager]
206
+ repo_path = ".worktrees/source_control_manager"
207
+ remote = "origin"
208
+ pushpals_branch = "main_agents"
209
+ base_branch = "main"
210
+ branch_prefix = "agent/"
211
+ poll_interval_seconds = 10
212
+ checks = []
213
+ state_dir = "outputs/data/source_control_manager"
214
+ port = 3002
215
+ delete_after_merge = false
216
+ max_attempts = 3
217
+ merge_strategy = "cherry-pick"
218
+ push_main_after_merge = true
219
+ open_pr_after_push = true
220
+ pr_base_branch = "main"
221
+ pr_title = ""
222
+ pr_body = ""
223
+ pr_draft = false
224
+ status_heartbeat_ms = 120000
225
+ skip_clean_check = false
226
+ auto_create_main_branch = false
227
+
228
+ [source_control_manager.review_agent]
229
+ enabled = false
230
+ poll_interval_ms = 60000
231
+ reviewer_md_path = "prompts/review_agent/reviewer.md"
232
+ pass_threshold = 9.5
233
+ max_pr_comments_before_give_up = 10
234
+ merge_method = "squash"
235
+ codex_auth_mode = "chatgpt"
236
+ codex_bin = "bun x --yes @openai/codex"
237
+ codex_home_dir = ""
238
+ codex_timeout_ms = 300000
239
+
240
+ [startup]
241
+ worker_image_rebuild = "auto"
242
+ log_config_on_start = true
243
+ sync_integration_with_main = true
244
+ skip_llm_preflight = false
245
+ auto_start_lmstudio = true
246
+ lmstudio_ready_timeout_ms = 120000
247
+ lmstudio_cli = "lms"
248
+ lmstudio_port = 1234
249
+ lmstudio_start_args = ""
250
+ startup_warmup = true
251
+ startup_warmup_timeout_ms = 120000
252
+ startup_warmup_poll_ms = 1000
253
+ allow_external_clean = false
254
+ port_preflight = true
255
+ port_conflict_policy = "terminate_pushpals"
256
+
257
+ [client]
258
+ local_agent_url = "http://localhost:3003"
259
+ trace_tail_lines = 100
@@ -0,0 +1,2 @@
1
+ [source_control_manager]
2
+ skip_clean_check = true
@@ -0,0 +1,124 @@
1
+ # Copy this file to configs/local.toml for machine-specific, non-secret overrides.
2
+ # Keep secrets in .env (or CI secret store), not in TOML.
3
+
4
+ [localbuddy.llm]
5
+ backend = "openai_codex"
6
+ model = "gpt-5-codex"
7
+ codex_auth_mode = "chatgpt"
8
+ codex_bin = "bun x --yes @openai/codex"
9
+ codex_timeout_ms = 120000
10
+ reasoning_effort = "high"
11
+
12
+ [remotebuddy.llm]
13
+ backend = "openai_codex"
14
+ model = "gpt-5-codex"
15
+ codex_auth_mode = "chatgpt"
16
+ codex_bin = "bun x --yes @openai/codex"
17
+ codex_timeout_ms = 120000
18
+ reasoning_effort = "high"
19
+
20
+ [remotebuddy]
21
+ max_workerpals = 10
22
+ crash_restart_enabled = true
23
+ crash_restart_max_restarts = 3
24
+ crash_restart_backoff_ms = 3000
25
+
26
+ [remotebuddy.autonomy]
27
+ llm_timeout_ms = 60000
28
+ allow_dirty_worktree = false
29
+
30
+ [remotebuddy.memory]
31
+ enabled = true
32
+ include_cross_session = true
33
+ max_recall_items = 12
34
+ max_recall_chars = 2400
35
+ max_summary_chars = 420
36
+ retention_days = 30
37
+
38
+ [workerpals.llm]
39
+ backend = "openai_codex"
40
+ model = "gpt-5-codex"
41
+ codex_auth_mode = "chatgpt"
42
+ codex_bin = "bun x --yes @openai/codex"
43
+ codex_timeout_ms = 120000
44
+ reasoning_effort = "high"
45
+
46
+ [workerpals]
47
+ executor = "openai_codex"
48
+ docker_image = "pushpals-worker-sandbox:latest"
49
+ openhands_timeout_ms = 1800000
50
+ openai_codex_timeout_ms = 7200000
51
+ docker_timeout_ms = 7260000
52
+ openhands_stuck_guard_enabled = true
53
+ openhands_stuck_guard_explore_limit = 18
54
+ openhands_stuck_guard_min_elapsed_ms = 180000
55
+ openhands_stuck_guard_broad_scan_limit = 2
56
+ openhands_stuck_guard_no_progress_max_ms = 300000
57
+ docker_warm_memory_mb = 2048
58
+ docker_warm_cpus = 2
59
+ file_modifying_jobs = ["task.execute"]
60
+ output_max_chars = 196608
61
+ output_max_lines = 600
62
+ output_max_head_lines = 120
63
+ quality_max_auto_revisions = 4
64
+ quality_validation_step_timeout_ms = 180000
65
+ quality_critic_timeout_ms = 45000
66
+ quality_soft_pass_on_exhausted = true
67
+ quality_critic_min_score = 8.0
68
+ quality_critic_max_diff_chars = 16000
69
+ quality_critic_max_validation_output_chars = 8000
70
+ executor_result_prefix = "__PUSHPALS_OH_RESULT__ "
71
+
72
+ [workerpals.openhands]
73
+ prompt_profile = "minimal"
74
+ llm_timeout_sec = 180
75
+ llm_max_message_chars = 12000
76
+ llm_timeout_recovery_attempts = 2
77
+ llm_timeout_recovery_backoff_sec = 5
78
+ agent_max_steps = 30
79
+ auto_steer_enabled = true
80
+ auto_steer_initial_delay_sec = 90
81
+ auto_steer_interval_sec = 60
82
+ auto_steer_max_nudges = 30
83
+
84
+ [workerpals.openai_codex]
85
+ auth_mode = "chatgpt"
86
+ bin = "bun x --yes @openai/codex"
87
+ timeout_ms = 7200000
88
+ progress_log_interval_s = 30
89
+ # timeout_s = 120 # optional; if set, overrides timeout_ms
90
+ reasoning_effort = "high"
91
+ approval_policy = "never"
92
+ sandbox = "workspace-write"
93
+ color = "never"
94
+ json = true
95
+
96
+ [llm.lmstudio]
97
+ context_window = 4096
98
+ min_output_tokens = 256
99
+ batch_tail_messages = 3
100
+
101
+ [source_control_manager]
102
+ repo_path = ".worktrees/source_control_manager"
103
+ pushpals_branch = "main_agents"
104
+ base_branch = "main"
105
+ checks = []
106
+
107
+ [source_control_manager.review_agent]
108
+ enabled = true
109
+ poll_interval_ms = 60000
110
+ reviewer_md_path = "prompts/review_agent/reviewer.md"
111
+ pass_threshold = 8.1
112
+ max_pr_comments_before_give_up = 10
113
+ merge_method = "squash"
114
+ codex_auth_mode = "chatgpt"
115
+ codex_bin = "bun x --yes @openai/codex"
116
+ codex_home_dir = ""
117
+ codex_timeout_ms = 300000
118
+
119
+ [startup]
120
+ log_config_on_start = true
121
+ startup_warmup = true
122
+ lmstudio_ready_timeout_ms = 120000
123
+ port_preflight = true
124
+ port_conflict_policy = "terminate_pushpals" # fail|terminate_pushpals
@@ -0,0 +1,2 @@
1
+ Respond in strict JSON with this shape:
2
+ {"reply":"<final user-facing response>"}
@@ -0,0 +1,10 @@
1
+ You are PushPals LocalBuddy.
2
+
3
+ Respond directly and briefly for lightweight chat and coordination questions.
4
+ If the user asks for coding/execution work, remind them to use:
5
+ /ask_remote_buddy <request>
6
+
7
+ Return ONLY the final user-facing reply. Never reveal internal reasoning, analysis steps, or chain-of-thought.
8
+ Do not include numbered analysis, "identify constraints", "self-correction", or planning text.
9
+ Keep replies concise and helpful (max 2 short sentences).
10
+ If unclear, ask one brief clarifying question.
@@ -0,0 +1,2 @@
1
+ User message: {{user_message}}
2
+ Return JSON only.
@@ -0,0 +1,3 @@
1
+
2
+ Git diff (truncated):
3
+ {{git_diff}}
@@ -0,0 +1,3 @@
1
+
2
+ Git status:
3
+ {{git_status}}
@@ -0,0 +1,5 @@
1
+ Planner-specific output contract:
2
+ - For this response, output STRICT JSON only.
3
+ - JSON shape: { "tasks": [{ "title": string, "description": string, "toolsNeeded": string[], "confidence": number }] }
4
+ - Do not include markdown, prose, or code fences.
5
+ - Keep tasks concrete and executable by available tools.
@@ -0,0 +1,2 @@
1
+ User request: "{{user_text}}"
2
+ {{git_status_section}}{{git_diff_section}}